Freecodecamp: Error en el desafío: use varios operadores condicionales (ternarios).

Creado en 22 may. 2020  ·  16Comentarios  ·  Fuente: freeCodeCamp/freeCodeCamp


Describe tu problema y cómo reproducirlo:
Error: la prueba del código siguiente falla con un error: checkSign debe usar varios operadores condicionales.

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 pantalla -1:
image

Captura de pantalla 2:
image

Cómo reproducirlo.
En lugar de Error: "checkSign debe utilizar varios operadores condicionales".
El error debería ser: Usar múltiples operadores ternarios en la parte de declaración-si-verdadera del operador ternario no es una buena práctica.

(Mayor claridad del mensaje de error)

Agregue un enlace a la página con el problema:
Enlace al desafío ;
Enlace a mi publicación que informa de errores en el foro:

first timers only help wanted learn

Comentario más útil

"Es una buena práctica formatear los múltiples operadores condicionales para que cada condición esté en una línea separada, como se muestra en el ejemplo, para facilitar la lectura".

Yo estaría por agregar una nota similar.

Todos 16 comentarios

Estoy de acuerdo en que algunos ajustes tienen sentido. Ayudaría si podemos capturar el hecho de que la prueba falla si a) no está utilizando un ternario múltiple ob) el ternario no tiene el formato esperado.

No creo que esto sea lo que pide el desafío: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Este es el código de los documentos:

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

Lo que ha construido es:

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

Estoy de acuerdo, has _cumplido_ la tarea. Sin embargo, la lógica implementada esperada es de la 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";
  }
}

Entonces, tal vez deberíamos cambiar las instrucciones del desafío para que sean más específicos en cuanto al formato ...

No creo que esto sea lo que pide el desafío: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Este es el código de los documentos:

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

Lo que ha construido es:

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

Estoy de acuerdo, has _cumplido_ la tarea. Sin embargo, la lógica implementada esperada es de la 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";
  }
}

Entonces, tal vez deberíamos cambiar las instrucciones del desafío para que sean más específicos en cuanto al formato ...

Señor, tenga en cuenta: este repositorio es de Free Code Camp . Gracias por su respuesta.

@FelixBoscoJ , jaja. Sí, lo sé muy bien. Me vinculé a la documentación de Mozilla para recuperar un ejemplo de múltiples operadores ternarios condicionales.

Mi punto sigue siendo completamente válido.

@FelixBoscoJ , jaja. Sí, lo sé muy bien. Me vinculé a la documentación de Mozilla para recuperar un ejemplo de múltiples operadores ternarios condicionales.

Mi punto sigue siendo completamente válido.

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

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

`` ``
Pruebe el código anterior en este desafío . Compruebe lo que se requiere para aprobar el desafío.

@FelixBoscoJ , lo he hecho y entiendo exactamente por qué se creó este problema. Estoy señalando que el formato de su solución no es el esperado, lo cual se ve claramente en el ejemplo dado en la lección:

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

Estoy de acuerdo, has cumplido la tarea. Sin embargo, la lógica implementada esperada es de la 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";
  }
}

Su solución no contiene lógica else if .

@FelixBoscoJ , lo he hecho y entiendo exactamente por qué se creó este problema. Estoy señalando que el formato de su solución no es el esperado, lo cual se ve claramente en el ejemplo dado en la lección:

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

Estoy de acuerdo, has cumplido la tarea. Sin embargo, la lógica implementada esperada es de la 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";
  }
}

Su solución no contiene lógica else if .

Señor, la condición para ganar el desafío es:

Utilice varios operadores condicionales en la función checkSign para comprobar si un número es positivo, negativo o cero.

Deberíamos utilizar varios operadores condicionales ( ternarios ).

Quizás el mensaje de error debería ser "... múltiples operadores condicionales en el formato recomendado".

Y quizás agregar una nota como "Es una mejor práctica dar formato a los múltiples operadores condicionales para que cada condición esté en una línea separada, como se muestra en el ejemplo, para facilitar la lectura".

"Es una buena práctica formatear los múltiples operadores condicionales para que cada condición esté en una línea separada, como se muestra en el ejemplo, para facilitar la lectura".

Yo estaría por agregar una nota similar.

¿Cerrado? ¿Se fusionó una actualización de la descripción?

@ Sky020 No es posible implementar la lógica if / else if / else usando el operador ternario. Pero la tarea se puede realizar.

Estoy de acuerdo, has cumplido la tarea. Sin embargo, la lógica implementada esperada es de la 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";
   }
 }

No, la lógica implementada esperada es de la forma:
`` js
function findGreaterOrEqual (a, b) {

si (a === b) {
devuelve "ayb son iguales";
}
else {
if (num> 0) {
devolver "positivo";
} más {
devuelve "negativo";
}
}
}

''

@FelixBoscoJ

Solución esperada (una de 6, muy similar a su respuesta final):

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

Versión if-else

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

Un ternario, o ternario múltiple, siempre se puede escribir con if-else. El desafío y la descripción son precisos. Solo queremos agregar un comentario aclaratorio o dos para enfatizar el formato de las mejores prácticas para la legibilidad.

No importa.

Me parece que agregar comentarios aclaratorios es la mejor solución. Entonces, dejemos esto abierto hasta que se fusione un PR.

Me gustaría saltar sobre esto, si es posible. Soy un novato, ¡pero estoy muy emocionado de aprender!

Adelante, @jasnkwcz. Este debería ser un buen tema para un principiante.

Recomiendo echar un vistazo a la guía de contribuciones y, si se queda atascado, pregunte en la sala de chat del colaborador

¿Fue útil esta página
0 / 5 - 0 calificaciones