Dlaczego się nie stosuje if(!zmienna)

Odpowiedz Nowy wątek
2015-01-06 01:05
agg
0

Witam
Spotkałem się z tym podczas review mojego kodu że nie nalezy stosować:
if(!zmienna)
Jeśli zmienna jest typu bool to nie rozumiem czemu miałbym stosować if(false == zmienna) a nie wolno mi if(!zmienna)?
Jeśli zmienna jest typu signed no to już rozumiem że if(!zmienna) zwróci true gdy zmienna jest 0 bądź ujemna.
Jeśli zmienna jest typu unsigned to też nie rozumiem czemu miałbym stosować if(false == zmienna) a nie wolno mi if(!zmienna)? No bo tutaj w ifa wejdziemy tylko wtedy gdy wynik w ifie będzie 0.
Więc tak czy siak gdy zmienna jest signed to widzę zagrożenie w tym ifie że ktoś oczekuje warunku na == 0 a tak naprawdę mamy warunek <=0. Ale dla typu bool czy unsigned to nie widzę żadnego zagrożenia.

if(false==zmienna) jest to dziwny zapis, niezgodny wg mnie ze sposobem przyswajania kodu przez większość programistów. - członek zarządu 2015-01-06 12:43

Pozostało 580 znaków

2015-01-06 01:07
0

Bo jest mniej czytelne. Czytający musi się zastanawiać co oznacza ten zapis. Szczególnie że C++ ma swoje niejawne konwersje którą bardzo skomplikować sytuacje. Kod pisze sie dla ludzi do czytania i tylko incydentalnie do uruchamiania na komputerze ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Ale jak zmienna jest bool to na czytelności za dużo nie traci. - some_ONE 2015-01-06 01:09
@Shalom O, porozmawiajmy bo też mnie to zastanawia cały czas. A czy if (!isValid()) jest wg Ciebie ok? Bo jeżeli z funkcją można, to z odpowiednio nazwaną zmienną isXXX też byłoby ok. Bo jak dla mnie if (isValid() == false) wygląda trochę dziwnie. - Endrju 2015-01-06 01:13
@Endrju zauważ że isValid od razu wskazuje na to że jest to zmienna logiczna, co więcej od razu mówi dodatkowo co ona "oznacza". Gdybyś miał ifa w stylu if(isCośtamValid){} to też byłoby ok. Ale jeśli to nie jest bool albo nie jest odpowiednio nazwany to już przestaje być oczywiste co oznacza. - Shalom 2015-01-06 01:21
lepiej walnąć if(!bool) { return; } niż if(bool) { logika; } else { return; } a to się często zdarza - gośćabc 2015-01-06 01:27
@Shalom no, właśnie o to mi chodziło. Jeżeli nazwa funkcji/zmiennej jest oczywista to taki "skrót" jest ok. :-) - Endrju 2015-01-06 01:47

Pozostało 580 znaków

2015-01-06 01:56
2

Jeśli zmienna jest typu signed no to już rozumiem że if(!zmienna) zwróci true gdy zmienna jest 0 bądź ujemna.

Nie widzę tu true -> http://ideone.com/ncm4A7

Ad tematu.
Stosuje się, tylko trzeba sensownie nazywać zmienne i funkcje. Wtedy ! z przodu jest dużo bardziej czytelny od == false.

Pozostało 580 znaków

2015-01-06 11:10
0

Jeśli zmienna jest typu bool to nie rozumiem czemu miałbym stosować if(false == zmienna) a nie wolno mi if(!zmienna)?

Nie widzę powodu. Nie ma nic złego w if (!zmienna_bool).

Jeśli zmienna jest typu signed no to już rozumiem że if(!zmienna) zwróci true gdy zmienna jest 0 bądź ujemna.

Uważam że to zuo. jeśli zmienna nie jest boolem to nie powinno się robić if (zmienna) ani if (!zmienna) zamiast porównania do zera, tylko wyraźnie przyrównywać do zera.

if (zmienna == 0)
if (zmienna != 0)

edytowany 2x, ostatnio: Azarien, 2015-01-06 11:11
A jak klasa ma zdefiniowany operator bool(), to też if (obiekt) lub if (!obiekt) nazwałbyś złem? - satirev 2015-01-06 12:38
nazwałbym złem operator bool ;-) - Azarien 2015-01-06 12:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0