2009-01-07 4 views
6

ich diese Aussage gefunden ist einige alte Code und es hat mich eine Sekunde, um herauszufinden, ...einen Booleschen Wert Einstellung basiert auf einer ganzen Zahl

IsTestActive = (TestStateID == 1 ? true : false); 

mich bitte korrigieren, wenn ich falsch liege, aber nicht das gleiche wie dieses ?:

IsTestActive = (TestStateID == 1); 

Wenn es ist, warum würden Sie jemals das erste verwenden möchten? Welcher ist lesbarer? (Ich denke, letzteres, aber ich würde gerne sehen, was andere denken.)

Antwort

32

Ja, es ist genau das gleiche.

Ja, letzteres ist besser lesbar.

+2

ich nur die ehemaligen von 2 Arten von Menschen verwendet gesehen habe: diejenigen, die ein grundlegendes Verständnis von Boolescher Logik fehlt, oder diejenigen, die den ternären Operator für wirklich cool halten. –

+1

Ersteres hätte theoretisch einen winzigen Perf-Treffer, aber wenn Sie sich um dieses Leistungsniveau kümmern, dann vermute ich, dass Sie größere Probleme haben ... –

5
IsTestActive = (TestStateID == 1); 

ist auf jeden Fall besser lesbar.

Sie einen Fall machen könnte eine Konstante für die Definition

ACTIVE = 1 

dann mit

(TestStateID == ACTIVE) 

Die Art und Weise der Code nun die Boolesche Variable IsTestActive ersetzt wird, wird der Zustand der Booleschen IsTestActive fehlerhaft sein, wenn sich der Zustand TestStateID ändert, ohne den booleschen Wert zu aktualisieren. Das Umgehen des booleschen Werts und das Testen der tatsächlichen Quelle der Informationen, die Sie suchen, wird die Möglichkeit dieses Fehlers beseitigen.

+1

guten Punkt, ich hasse magische ganze Zahlen - aber ich nehme an, das OP gab nur Beispiel Code – annakata

+0

Das mag sein, aber ich sehe eine Menge Leute, die solche Temp-Variablen im Produktionscode verwenden. –

0

Lesbarkeit hängt davon ab, wo Sie dieses Konstrukt verwenden. Ich finde oft etwas wie

(TestStateID == 1 ? true : false) 

besser lesbar.

0

Nun, ich weiß nicht, über andere Sprachen, aber es ist noch einfacher, mit Typ-Casting in PHP:

$IsTestActive = (boolean)$TestStateId;