2009-04-23 8 views
5

me han añadido recientemente una función HasValue a nuestra biblioteca de JavaScript interno:¿Vale la pena el esfuerzo de tener una función que devuelva el inverso de otra función?

function HasValue(item) { 
    return (item !== undefined && item !== null); 
} 

A durante un convorsation con un compañero de trabajo, se nos ocurrió la idea de, además de darle otra función que, básicamente, sólo será el inverso: quizá HasNoValue o IsNothing Si terminamos haciendo que tendríamos:

function HasNoValue(item) { 
    return (item === undefined || item === null); 
} 
function HasValue(item) { 
    return !HasNoValue(item); 
} 

sin embargo, no estamos seguros de si es más fácil de leer para tener ambos, o HasValue. ¿Qué es más legible/preferido?

A:

if (HasValue(x) && !HasValue(y)) 

B:

if (HasValue(x) && HasNoValue(y)) 
+1

¿Qué es! == Sé lo que! = Es. ¿Está usando! == el equivalente de no ===? Nunca he visto eso usado antes. –

+1

@John Isaacks ¡Sí,! == es para === como!= es == – Greg

+0

@John: consulte las respuestas a http://stackoverflow.com/questions/359494/javascript-vs/359509#359509 información sobre === y! == en JavaScript. –

Respuesta

20

Yo prefiero mucho de A a B. "!" es un lenguaje de programación que debe ser entendido por todos.

1

Sólo por el hecho de tener menos líneas de código y debido a que su función devuelve un valor booleano, yo diría que ir con el método A. Si usted tiene que preocuparse de la legibilidad, siempre se puede intentar:

if (HasValue(x) && !(HasValue(y))) 
0

Yo diría que la opción A es más clara, usted sabe exactamente lo que significa.

8

Estoy a votar "A" por ahora.

La carga de mantenimiento adicional de hacer esto para cada uno y cualquier función booleana de retorno no vale la pena en comparación con el bien entendido y bastante legible "!", Y de hecho creo "B" es en realidad menos legible, ya que es muy fácil pasar por alto el "No" en el medio del nombre.

0

Me quedaría con la opción A, pero así soy yo.

12

Si !HasValue(y) y HasNoValue(y) se garantiza que sea lógicamente equivalente en todo el rango de entrada de y, entonces yo preferiría en gran medida !HasValue(y).

dudaría en incluso tienen una función llamada HasNoValue(y) porque inevitablemente alguien escribirá !HasNoValue(y).

+1

Muy de acuerdo con esto. Odio cuando las personas escriben código como 'while (! IsNotDisabled()) ...', porque me lleva demasiado esfuerzo mental para descifrar todas las negaciones de las negaciones. Las funciones que devuelven booleanos no deben tener 'Not' ni ninguna variación dentro de sus nombres. –

2

Sé que voy a estar bastante solo con esta opinión y si tuviera que enfrentar esta elección en un proyecto de colaboración, seguramente iría con A, ya que es bastante obvio que es derecho que hacer , pero debo decir que aprecio la verbosidad de la opción B. Las palabras son infinitamente más fáciles de leer y comprender que los símbolos, incluso si es algo tan mundano como nuestro querido signo de admiración.

Especialmente ahora que los IDE tienen mucha mejor inteligencia que antes, por lo general tiendo a optar por mucha más verbosidad que antes con todos los nombres. 9 veces de cada 10, la legibilidad supera las pequeñas diferencias de rendimiento, sin dudas.

+0

Correcto, esa fue la razón por la que se nos ocurrió la segunda opción, al final creo que A es la solución correcta, pero me gusta la legibilidad. – chills42

Cuestiones relacionadas