4

(function(){
    Math.sqrt(25) == 5 ? return true : return false;
})();

Solo quiero retornar true si la raíz de 25 da 5, y si no retornar false.

eferion
  • 49,291
  • 5
  • 30
  • 72
Eduardo Sebastian
  • 4,908
  • 7
  • 30
  • 70
  • 1
    ¿ Existe la posibilidad que retorne `false`? ;) , además recomendaría leer una [pregunta relacionada](https://es.stackoverflow.com/questions/2130/qu%C3%A9-significan-los-caracteres-de-y-en-javascript/2131#2131) – Dev. Joel Jul 18 '17 at 05:57
  • 1
    Además de como dice @Dev.Joel esa condición siempre será `true` no entiendo el `return`, un operador ternario siempre devuelve un valor así que con poner `true` y `false` sería suficiente. Corregidme si me equivoco. –  Jul 18 '17 at 06:16
  • @Dev.Joel @blonfu Es irrelevante que siempre retorne `true`, @Eduardo no está preguntando por eso. El problema es que la función se ejecuta con errores pues el return debe estar por fuera del operador, y no contenido en las ramas – Piyin Jul 18 '17 at 15:06
  • 1
    @Piyin si tienes una respuesta acertada, debes añadirla en la sección respuestas. Sé lo que pregunta el OP y además un error lógico nunca es irrelevante. – Dev. Joel Jul 18 '17 at 15:31
  • @Dev.Joel La respuesta correcta ya la dio Javier Pintor. Eso no es un error lógico, se podría simplificar, claro, pero no es un error – Piyin Jul 18 '17 at 15:37

2 Answers2

9

El return lo debes poner al principio de la siguiente manera:

(function(){
  return (Math.sqrt(25)==5 ? true : false);
})();
Javier Pintor
  • 368
  • 1
  • 8
1

El error se soluciona extrayendo el return de las opciones del operador ternario, y poníendolo fuera devolviendo el resultado del operador ternario (como ya te ha respondido @JavierPintor en la otra respuesta).

La causa del error es debida a que el operador ternario, al ser un operador, no es exactamente como una sentencia condicional if. Como es un operador tiene que devolver un valor, obteniendo dicho valor de una de las opciones posibles a ambos lados de :. Estas posibles opciones deben ser expresiones (combinación de operadores y operandos) que serán evaluadas a un valor en caso de ser elegidas dependiendo del resultado de la condición. Por lo tanto, como return no forma una expresión que se evalúe a un valor, no es admitida.

Así es la solución:

(function() {
    return Math.sqrt(25) == 5 ? true : false;
})();

Pero, en los casos como éste, donde devuelves true o false dependiendo del resultado de una comparación, lo óptimo es que devuelvas directamente el resultado de la comparación que se evalúa a true o false. Así te evitas el operador ternario:

(function() {
    return Math.sqrt(25) == 5;
})();
Carlos A. Gómez
  • 1,601
  • 1
  • 12
  • 29