2012-02-28 6 views
52

JSLint queja de que el (ejemplo inútil) código siguiente es válido:¿Por qué JSLint se queja de "Inesperado" else después de "devolver"?

(function (x) { 
    "use strict"; 
    if (x === 1) { 
     return 1; 
    } else if (x === 2) { 
     return -1; 
    } 
    return 0; 
}(1)); 

Error: Problem at line 4 character 9: Unexpected 'else' after 'return'.

return 1;

¿Es en serio lo que sugiere que es malo para utilizar sentencias de retorno dentro de una estructura if/else?

Se cree que esta versión está bien:

(function (x) { 
    "use strict"; 
    var returnval = 0; 
    if (x === 1) { 
     returnval = 1; 
    } else if (x === 2) { 
     returnval = -1; 
    } 
    return returnval; 
}(1)); 
+6

¿Hay alguna manera de deshabilitar esta regla en JSLint? –

Respuesta

85

Es apenas le dice que else después return es superfluo. El siguiente está bien:

(function (x) { 
    "use strict"; 
    if (x === 1) { 
     return 1; 
    } 
    if (x === 2) { 
     return -1; 
    } 
    return 0; 
}(1)); 
+49

Tienes razón. Personalmente, prefiero una cadena if-else, parece que atraviesa la intención del código más claramente. – Hal

+2

@Hal Y especialmente útil cuando se refactoriza, cuando realmente se decide usar un solo 'return'. Un 'else' omitido será un error entonces. – Sulthan

1

Es mejor tener una función siempre devuelve algo, ya que agrega consistencia. Se sabe que JSLint es bastante estricto y duele los sentimientos de los programadores. No puedo ayudarlo. Personalmente, creo que la versión 1 está bien

4

Lo que he encontrado con jslint es que si sigues las reglas, el 50% es ridículo pero no tiene un impacto negativo en tu código. El otro 50% (más o menos) le dará un buen beneficio. Entonces hazlo por el otro 50%. Este ejemplo particular te obliga a ser explícito sobre el inverso de una condición o similar ... en lugar de dejarla implícita con un else ... lo mismo se aplica a if/else.

+1

No estoy de acuerdo. Sí, el 50% no proporcionará un "impacto negativo". Pero solo se trata del código en sí. Piense en el mantenimiento futuro, el tiempo de depuración cercano y otros desarrolladores que no codifican como usted o que no son ninjas. JSLint en su modo estricto le ofrece el código de una manera estándar/normalizada que permite a cualquier persona leer/entender/codificar con todo el mundo, no con respecto a la experiencia/habilidades o el tiempo. Sí, es estricto, es difícil de respetar, pero cuando tu código es compatible, es un "código interhumano". – MathKimRobin

Cuestiones relacionadas