2009-01-07 20 views
6

znalazłem to stwierdzenie jest trochę stary kod i zajęło mi chwilę, aby dowiedzieć się ...Ustawienie wartość logiczną na podstawie liczby całkowitej

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

Proszę mnie poprawić, jeśli się mylę, ale nie jest to samo jak to ?:

IsTestActive = (TestStateID == 1); 

Jeśli tak, to dlaczego miałbyś chcieć użyć pierwszego? Który z nich jest bardziej czytelny? (Myślę, że to drugie, ale chciałbym zobaczyć, co myślą inni.)

Odpowiedz

32

Tak, to jest dokładnie to samo.

Tak, ten drugi jest bardziej czytelny.

+2

mam tylko postrzegane były używane przez 2 rodzaje ludzi: ci, którzy brak podstawowej wiedzy na temat logiki boolowskiej lub tych, którzy uważają, że operator trójskładnikowy jest naprawdę fajny. –

+1

Te pierwsze miałyby teoretycznie minutę perfekcji, chociaż jeśli dbasz o ten poziom wydajności, to podejrzewam, że masz większe problemy ... –

5
IsTestActive = (TestStateID == 1); 

jest zdecydowanie bardziej czytelny.

Ty mógłby złożyć sprawę do zdefiniowania stałej

ACTIVE = 1 

następnie zastąpienie logiczną zmienną IsTestActive z

(TestStateID == ACTIVE) 

Sposób kod jest teraz, stan logicznej IsTestActive będzie być błędne, jeśli stan TestStateID zmienia się bez aktualizowania wartości logicznej. Pomijanie wartości boolowskiej i testowanie prawdziwego źródła informacji, o które prosisz, usunie możliwość wystąpienia tego błędu.

+1

Dobra uwaga, nienawidzę magicznych liczb całkowitych - ale zakładam, że OP był po prostu przykładem kod – annakata

+0

To może być, ale widzę wielu ludzi używających zmiennych tymczasowych takich jak ten w kodzie produkcyjnym. –

0

Czytelność zależy od miejsca użycia tej konstrukcji. Często można znaleźć bardziej czytelne informacje.

0

No, nie wiem o innych językach, ale w PHP jest jeszcze bardziej proste, używając typu odlew:

$IsTestActive = (boolean)$TestStateId; 
Powiązane problemy