Freecodecamp: Bug no desafio: use vários operadores condicionais (ternários).

Criado em 22 mai. 2020  ·  16Comentários  ·  Fonte: freeCodeCamp/freeCodeCamp


Descreva o seu problema e como reproduzi-lo:
Bug - o teste para o código abaixo falha com erro: checkSign deve usar vários operadores condicionais.

function checkSign(num) {
  return (num!==0) ?(num>0) ? "positive" 
    : "negative" 
    : "zero";
}


console.log(checkSign(10));
console.log(checkSign(-10));
console.log(checkSign(0));

Captura de tela -1:
image

Captura de tela - 2:
image

Como reproduzi-lo.
Em vez de Erro: “checkSign deve usar vários operadores condicionais”.
O erro deve ser: Usar vários operadores ternários na parte declaração se verdadeira do operador ternário não é a melhor prática.

(Aumentando a clareza da mensagem de erro)

Adicione um link para a página com o problema:
Link para o desafio ;
Link para minha postagem relatando bug no fórum:

first timers only help wanted learn

Comentários muito úteis

"É uma prática recomendada formatar os vários operadores condicionais de modo que cada condição esteja em uma linha separada, conforme mostrado no exemplo, para facilitar a leitura."

Gostaria de adicionar uma nota semelhante.

Todos 16 comentários

Eu concordo que alguns ajustes fazem sentido. Eu ajudaria se pudéssemos capturar o fato de que o teste falha se a) você não estiver usando um ternário múltiplo ou b) o ternário não estiver no formato esperado.

Não acho que seja isso que o desafio pede: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Este é o código dos documentos:

function example(…) {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

O que você construiu é:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Eu concordo, você _completou_ a tarefa. No entanto, a lógica implementada esperada é da forma:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Então, talvez devêssemos mudar as instruções do desafio para ser mais específico quanto ao formato ...

Não acho que seja isso que o desafio pede: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Este é o código dos documentos:

function example(…) {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

O que você construiu é:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Eu concordo, você _completou_ a tarefa. No entanto, a lógica implementada esperada é da forma:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Então, talvez devêssemos mudar as instruções do desafio para ser mais específico quanto ao formato ...

Senhor, observe: este repositório é do Free Code Camp . Obrigado por sua resposta.

@FelixBoscoJ , haha. Sim, estou bem ciente. Eu vinculei a documentação do Mozilla para recuperar um exemplo de Multiple Conditional Ternary Operators.

Meu ponto ainda é inteiramente válido.

@FelixBoscoJ , haha. Sim, estou bem ciente. Eu vinculei a documentação do Mozilla para recuperar um exemplo de Multiple Conditional Ternary Operators.

Meu ponto ainda é inteiramente válido.

`` `js
function checkSign (num) {
return (num! == 0)? (num> 0)? "positivo"
: "negativo"
: "zero";
}

console.log (checkSign (10));
console.log (checkSign (-10));
console.log (checkSign (0));

`` ``
Tente o código acima neste desafio . Verifique o que é necessário para passar no desafio.

@FelixBoscoJ ,

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Eu concordo, você cumpriu a tarefa. No entanto, a lógica implementada esperada é da forma:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Sua solução não contém a lógica else if .

@FelixBoscoJ ,

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Eu concordo, você cumpriu a tarefa. No entanto, a lógica implementada esperada é da forma:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Sua solução não contém a lógica else if .

Senhor, a condição para vencer o desafio é:

Use vários operadores condicionais na função checkSign para verificar se um número é positivo, negativo ou zero.

Devemos usar vários operadores condicionais ( ternários ).

Talvez a mensagem de erro deva ser "... vários operadores condicionais no formato recomendado."

E talvez adicionar uma nota ao longo das linhas de "É uma prática recomendada formatar os vários operadores condicionais de forma que cada condição esteja em uma linha separada, conforme mostrado no exemplo, para facilitar a leitura."

"É uma prática recomendada formatar os vários operadores condicionais de modo que cada condição esteja em uma linha separada, conforme mostrado no exemplo, para facilitar a leitura."

Gostaria de adicionar uma nota semelhante.

Fechadas? Foi uma atualização da descrição mesclada?

@ Sky020 Não é possível implementar a lógica if / else if / else usando o operador ternário. Mas a tarefa pode ser realizada.

Eu concordo, você cumpriu a tarefa. No entanto, a lógica implementada esperada é da forma:

 function findGreaterOrEqual(a, b) {
   if (a === b) {
     return "a and b are equal";
   }
   else if (a > b) {
     return "a is greater";
   }
   else {
     return "b is greater";
   }
 }

Não, a lógica implementada esperada é da forma:
`` `js
function findGreaterOrEqual (a, b) {

if (a === b) {
retornar "a e b são iguais";
}
outro {
if (num> 0) {
retornar "positivo";
} outro {
retornar "negativo";
}
}
}

`` `

@FelixBoscoJ

Solução esperada (uma de 6, muito semelhante à sua resposta final):

function checkSign(num) {
  return (num > 0) ? "positive" 
    : (num < 0) ? "negative"
    : "zero";
}

Versão if-else

function checkSign(num) {
  if (num > 0) {
    return "positive";
 } else if (num < 0) {
    return "negative";
 } else {
    return "zero";
 } 
}

Um ternário, ou ternário múltiplo, sempre pode ser escrito com if-else. O desafio e a descrição são precisos. Queremos apenas adicionar um ou dois comentários esclarecedores para enfatizar as melhores práticas de formatação para facilitar a leitura.

Deixa pra lá.

Parece-me que adicionar comentários esclarecedores é a melhor solução. Então, vamos deixar isso em aberto até que um PR seja mesclado.

Eu gostaria de saltar sobre isso, se possível. Sou um novato, mas estou muito animado para aprender!

Vá em frente, @jasnkwcz. Isso deve ser um bom problema para um primeiro temporizador.

Recomendo dar uma olhada no guia de contribuição e, se tiver dúvidas, pergunte na sala de chat do colaborador

Esta página foi útil?
0 / 5 - 0 avaliações