2009-04-23 8 views
5

Ich habe vor kurzem eine HasValue Funktion unserer internen Javascript-Bibliothek hinzugefügt:Lohnt es sich, eine Funktion zu haben, die die Umkehrung einer anderen Funktion liefert?

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

A während eines convorsation mit einem Kollegen, kamen wir auf die Idee, auch das Hinzufügen eines weiteren Funktion auf, die im Grunde nur das Gegenteil wäre: vielleicht HasNoValue oder IsNothing Wenn wir tun, am Ende, dass wir würden:

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

Allerdings sind wir nicht sicher, ob es besser lesbar ist, beides zu haben, oder HasValue. Was ist besser lesbar/bevorzugt?

A:

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

B:

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

was ist! == Ich weiß was! = Ist. Verwendet! == das Äquivalent von nicht ===? Das habe ich noch nie zuvor gesehen. –

+1

@John Isaacks Ja,! == ist zu === wie!= ist zu == – Greg

+0

@John: Siehe die Antworten auf http://StackOverflow.com/Questions/359494/Javascript-VS/359509#359509 Informationen auf === und! == in JavaScript. –

Antwort

20

ich stark bevorzugen A nach B "!" ist eine Programmiersprache, die von allen verstanden werden sollte.

1

Gerade im Interesse der weniger Code-Zeilen mit und weil Ihre Funktion einen Boolean zurückgibt, würde ich sagen, mit Methode A zu gehen, wenn Sie die Lesbarkeit kümmern, können Sie immer versuchen:

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

Ich würde sagen, Option A ist klarer, Sie wissen genau, was es bedeutet.

8

Ich stimme "A" bei weitem.

Der zusätzliche Wartungsaufwand dies für jeden zu tun, und jede boolean Rückgabefunktion ist es nicht wert im Vergleich zu der gut verstanden und gut lesbar „!“, Und in der Tat glaube ich, „B“ tatsächlich weniger lesbar, weil es so leicht ist, das "Nein" in der Mitte des Namens zu verpassen.

0

Ich würde bei Option A bleiben, aber das ist nur ich.

12

Wenn !HasValue(y) und HasNoValue(y) über den gesamten Eingangsbereich von y logisch gleichwertig sind, würde ich !HasValue(y) sehr bevorzugen.

Ich würde zögern, auch haben eine Funktion namens HasNoValue(y), weil zwangsläufig jemand schreiben wird !HasNoValue(y).

+1

Stimme voll und ganz zu. Ich hasse es, wenn Leute Code wie 'while (! IsNotDisabled()) schreiben ... ', weil ich viel zu viel geistige Anstrengung brauche, um alle Negationen von Negationen herauszufinden. Funktionen, die Booleans zurückgeben, sollten nicht "Not" oder eine Variation in ihren Namen haben. –

2

Ich weiß, ich werde ziemlich allein mit dieser Meinung sein und wenn ich mit dieser Wahl in einem gemeinschaftlichen Projekt konfrontiert würde, würde ich sicherlich mit A gehen, da es ziemlich offensichtlich ist, dass es die richtige Sache ist , aber ich muss sagen, dass ich die Ausführlichkeit von Option B schätze. Worte sind einfach unendlich viel leichter zu lesen und zu verstehen als Symbolik, auch wenn es etwas so Alltägliches ist wie unser geliebter alter Ausrufspunkt.

Gerade jetzt, wo IDEs so viel intelligenter als vorher haben, tendiere ich normalerweise zu weit mehr Ausführlichkeit als vorher mit allen Namen. In 9 von 10 Fällen übertrifft die Lesbarkeit kleine Leistungsunterschiede.

+0

Richtig, deshalb haben wir die zweite Option gefunden, am Ende denke ich, dass A die richtige Lösung ist, aber ich mag die Lesbarkeit. – chills42