Jest mój kolega, który nieustannie pisze:
if (someBool == true)
Doprowadza mnie do ściany! Czy powinienem to zrobić, czy po prostu porzucić?
Jest mój kolega, który nieustannie pisze:
if (someBool == true)
Doprowadza mnie do ściany! Czy powinienem to zrobić, czy po prostu porzucić?
if (some_flag == true)
ale niejawneif (is_something)
lubif (has_something)
. Zanotuj nazwy zmiennych.someBool == true
jest również logiczny, więc zgodnie z tą samą logiką powinien byćif ((someBool == true) == true)
.$var = (bool) some_expression
. W większości przypadków nie ma to nawet znaczenia, ponieważ PHP wykona niezbędne konwersje dynamicznie.Odpowiedzi:
To tylko zbędny kod, a nie życie lub śmierć. Jednak....
Jeśli to się często zdarza, problem może wynikać z tego, jak
someBool
się nazywa. Dobre imię może znacznie przyczynić się do wyeliminowania potrzeby==true
lub
lub
na przykład.
źródło
someBool == true
starszego kodu dla zachowania przejrzystości. Ale jeśli piszę od podstaw, odpowiednioif (isSomething)
Kiedy widzę
someBool == true
, nie mogę się powstrzymać, ale czuję, że programista nie zinternalizował koncepcji oceny , co jest dość zasadniczą wadą.Jednak moja perspektywa jest wypaczona, ponieważ spędziłem kilka lat na studiach programistycznych dla dzieci, które często pisały takie wyrażenia, ponieważ naprawdę nie opanowały mentalnego ćwiczenia oceny wyrażeń. Po zapoznaniu się z koncepcją redundancja stała się oczywista.
W przypadku innego kompetentnego programisty prawdopodobnie tak nie jest. Prawdopodobnie jest to po prostu zły nawyk, który rozwinęli na początku programowania i nigdy się nie trzęsli. Ale nadal by mnie to trochę przestraszyło, gdyby to była pierwsza rzecz, jaką zobaczyłem w rozmowie.
źródło
if (c == true) return true; else return false;
, ale 99% czasu (1% jest, ponieważ nigdy nie mogę być pewien, że czegoś nie przegapiłem) natychmiast zauważę i zastąpię to wszystkoreturn c
. Spodziewam się, że najbardziej kompetentni programiści powinni zrobić coś podobnego, jeśli rozwiną nawyk na początku swojej kariery. Nie spodziewałbym się odpowiedzi wtf.if (!someCondition) { someCondition = false; }
Widziałem kilka (eee, wiele) zwolnień, a także pewne niemożliwości w naszym kodzie, ale ten był tak prosty, ale tak irytujący, że ktoś go napisał. Nawet wiele razy.if(x) x=true;
które NIE były zbędne, ale raczej odpowiadałyx=!!x;
(normalizując x do 0/1)To też doprowadza mnie do szaleństwa, ale powiedziałbym, że wspominam o nadmiarowości w konstruktywny sposób, a potem porzucam ją, nawet jeśli się nie zgadzają.
Alternatywnie możesz wypróbować to podejście:
Ty: Czy możesz zacząć używać następującej konwencji kodu do oceny wartości logicznych?
One: Dlaczego mielibyśmy to robić? Druga połowa tego stwierdzenia jest zbędna, zawsze ocenia się ją na prawdziwą.
Ty: George, masz rację. Głupi ja. Przejdźmy więc do wersji bez nadmiarowości. Co powiesz na?
źródło
true=true
nie kompiluje się, nie można przypisać dotrue
;-)if(somebool == false)
albo!=
, ale zawsze przed fałszem i nieprawdą. Uważam to za zbędne, ale ponieważ standard kodowania nalega, abyif()
wyglądało to jak wywołanie funkcji, spacja między parenami pomaga mi je odczytać. Sam w sobie bool to bool, aleif (somePointer)
nie leci; Wolę,if (somePointer != NULL)
ponieważ wskaźnik nie jest boolem.Myślę, że jeśli coś tak trywialnego jest twoim największym problemem ze współpracownikami, powinieneś uważać się za szczęściarza.
źródło
Zdecydowanie powinieneś powstrzymać ten zły nawyk. Łagodnie...
Łatwo zapomnieć o napisaniu podwójnych znaków równości, zamieniając kod w:
Na przykład w języku C # spowoduje to wygenerowanie tylko ostrzeżenia, a nie błędu. Więc jeśli nie traktujesz ostrzeżeń jako błędów, kod będzie działał, ustaw zmienną na true i zawsze wprowadź warunek.
źródło
if (answer = 42) {}
po prostu się nie kompiluje, ponieważ wyrażenie nie jest boolem.Zgadzam się z tobą, ale zamierzam zagrać tutaj w adwokata diabła:
W zależności od języka i nazwy zmiennej odpowiednie jest x == true:
Rozważ następującą sytuację w języku ze statycznym pisaniem i wymuszaniem typów dla typów integralnych:
Ktoś czytający tę sekcję kodu może nie od razu zdać sobie sprawę, że akcjeAllowed to zmienna boolowska - może to być również liczba całkowita reprezentująca liczbę dozwolonych akcji. Więc dodając == true, staje się jasne, że x jest wartością logiczną, a nie liczbą całkowitą wymuszaną na wartość logiczną:
źródło
actionsAreAllowed
.if (x) { ...
, już twierdzisz, żex
jest to wartość logiczna lub można ją przekształcić w wartość logiczną. To, co nazywacie, jest nieistotne.Co z zerowalnymi boolami?
źródło
Zazwyczaj nie chcesz robić nic wielkiego z konwencji kodowania, chyba że wspomniana konwencja w jakiś sposób utrudnia projektowi znaczący wpływ. Widziałem wiele gorących sporów o rzeczy tak małe jak regiony kodu i wiodące podkreślenia.
Biorąc to pod uwagę, nie widzę problemu z dodawaniem
== true
do instrukcji warunkowej. W rzeczywistości mam zwyczaj używania== false
w przeciwieństwie do wiodącego wykrzyknika podczas testowania w warunkach ujemnych. Myślę, że to bardziej czytelne.Jeśli istnieje ustalona konwencja, mówię ją przestrzegaj, chyba że istnieje powód do zmiany. Jednak naprawdę nie warto podnosić wielkiego smrodu.
źródło
(9 == True)
ocenia na false w Pythonie i wyobrażam sobie podobne w C ++.Ack. Jestem tym facetem. Wstyd, wstyd. Tak się nauczyłem i tak „automatycznie formatuję” w mojej głowie. Używam preferowanej składni Joela tylko wtedy, gdy zmienna bool ma przedrostek czasownika, taki jak „is”. Potrzebuję czasownika, czy to „jest”, „może”, „zrobił”, czy też potrzebuję ==, aby podać czasownik „równa się”. Mogę nigdy nie zerwać z tym nawykiem, więc zrozumiem, jeśli na ulicy nie przywitasz się ze mną.
źródło
przypominają mi „boolowski kod szaleństwa”, jest taki jak te
Zamiast:
źródło
Osobiście bardzo nie lubię sposobu mówienia „nie” w językach opartych na C. Ten mały wykrzyknik jest zbyt łatwy do przeoczenia.
Dlatego piszę to w całości:
Po przeczytaniu tego przez chwilę chcę też symetrii z
Więc rozważ to jako artefakt użycia C
!
zamiastnot
.źródło
not
z operatorem, a więc robi C (po to standardowy nagłówek<iso646.h>
). Jeśli nie chcą (lub nie mogą) korzystać z tego nagłówka (lub jeśli utkniesz z Java lub C #), proponuję wprowadzenie spacji po wykrzyknikiem:if (! condition)
. To sprawia, że jest to nieco bardziej widoczne.not
nie jest opcją.To zależy od języka, ale zwykle jest to zły pomysł ...
W C nigdy tego nie rób. Zbyt łatwo jest znaleźć sytuację, w której testowana wartość nie jest fałszywa (niezerowa), ale również nie jest równa pojedynczej wartości zdefiniowanej jako „prawda”.
W Ruby, rób to tylko wtedy, gdy masz absolutną pewność, że chcesz zawieść we wszystkim oprócz Boolean true.
W C ++ i innych językach statycznych z typem bool jest zbędny i może prowadzić do błędów programistycznych przy błędnym pisaniu
=
zamiast==
lub błędów promocyjnych, jak wspomniano w komentarzach.źródło
if (b == true) {
nie jest po prostu redundantny. Jest to również trochę ryzykowne, ponieważ możesz przypadkowo zostać przydzielonymtrue
dob
.if (b == true)
, ab
nie bool, konwersje typów idą w niewłaściwy sposób.bool
Jest integralną typ, który jest normalnie promowany do odpowiedniego rodzaju integralnej o wartości 1. Jeśli piszesz, powiedzmy,int b(2); if (b == true)
wówczastrue
staje sięint
wartością 1 dla celów porównania, zamiastb
być zmuszane do typubool
, który dałby właściwego rezultatu.==
.Myślisz że to źle? Co powiesz na:
źródło
wolę
lub
ale obawiam się, że podniesienie go wkurzy ludzi, więc radzę o tym zapomnieć. Przepraszam!
źródło
if (!bNotVal)
lubif (bNotVal)
nawet w pierwszej kolejności. Ugh negatywy w nazwach utrudniają czytanie wszystkiego.powinieneś mu powiedzieć, że robi to źle.
jego
if (true == someBool) {
}
jeśli kiedykolwiek zapomni o jednym = ma duże problemy ze stylem pisania.
źródło
Co powiesz na
DLACZEGO TO STRING ?!
źródło
if(preg_match('/title/', implode($_POST))){
. PHP, wystarczy powiedzieć, muszę znaleźć lepszą pracę.x
pochodziły z danych wejściowych użytkownika (na przykład plik konfiguracyjny lub usługa internetowa). Zazwyczaj jednak dopuszczam inne prawdziwe wartości, więc kończy się to bardziejif x.lower().strip() in ["true", "yes", "on", "1"]
W rzeczywistości, jeśli jest zerowy, konieczne byłoby przetestowanie dla x == true. :)
źródło
Piszę taki kod!
Oto dlaczego:
„if bla == true” brzmi jak zdanie, gdzie jako „if bla” w wielu przypadkach nie. To po prostu brzmi źle, gdy CZYTANIE rzeczywistego kodu.
Kompilator ostrzega również o przypisaniach w blokach if, więc użycie naprawdę == true nie jest niebezpieczne. (myląc to z =)
Czy też faceci, którzy nie piszą „== true”, używają tego „! ()” Dla „== false”? Uważam to za naprawdę brzydkie. A jeśli użyjesz „== false”, to tylko bardzo spójne jest użycie „== true”, zamiast mieć dwa różne sposoby weryfikacji prawdy.
źródło
Pamiętaj, że pracujesz w zespole, więc musisz wypracować te rzeczy razem. „Gra z innymi miłymi” nadal jest ważną cechą osobowości nawet po szkole podstawowej :)
źródło
Zasadniczo pominie „== prawda”, ale nie warto poświęcić nawet minuty na omówienie go, chyba że uwzględnisz go w standardach kodowania twojego zespołu.
źródło
Chociaż zgadzam się jako programista głównie w języku C #, nie mogę powiedzieć, że zawsze tak jest. Na przykład w Javascripcie === wykona koalescencję typu. Więc zakładając var x = 3, to:
podczas
Myślę, że różni się to od ==, ponieważ nawet w JS nie użyłbym, jeśli (x == true), ale po prostu coś do przemyślenia.
Ten rodzaj dotyku dotyczy innej kwestii, która pojawiła się w moim biurze:
W języku C #, bool b; wystarczy i zainicjuje b na false . Jednak bardziej wyraźne jest napisanie powyższej linii i tak czy inaczej kompilator powinien ją zgrać podczas optymalizacji.
Myślę, że moim celem jest to, że nie zawsze jest tak oczywiste, co jest i nie jest dobrą praktyką, a wiele z nich sprowadza się do preferencji, a także cech / dziwactw językowych.
źródło
bool b;
inicjuje tylko fałsz, gdyb
jest polem. Musisz jawnie zainicjować zmienne lokalne.true
lub po prostu „prawda”. Na przykład tzn. Każdy niepusty ciąg znaków jest brany pod uwagę,== true
ale nie=== true
w niektórych językach.Ach tak, ale co jeśli zmienna ma wartość zerową? (bool?)
Niektóre języki (C #) będą wymagać i obsadzać lub porównywać z „true”.
źródło
Młodzi znają zasady, a starzy znają wyjątki;)
Najpóźniej
C#
, jeśli masz do czynienia znull-able bool
, musisz:Jeśli tristate nie stanowi problemu, zwykle nie powinno być powodu, aby porównywać coś do
true
/True
. Jednak wPython
kilku innych językach, takich jak np.C/C++
, Można wykonywaćif
wyrażenia inne niż bool. Te języki mają unikalne reguły interpretowania liczb całkowitych, wskaźników, list itp. Jako prawda lub fałsz. Czasem tego nie chcesz. Na przykład w tym fragmencie kodu w języku Python:Tutaj
z
powinno byćTrue
, alez2
powinno byćFalse
. TerazClojure
język podchodzi do tego w jeszcze inny sposób -and
funkcja nie musi być oceniana na abool
, aleif
może sobie z tym poradzić.Niezależnie od języka, za każdym razem, gdy porównujesz coś do
True
lubFalse
, prawdopodobnie warto to skomentować.źródło
notExceptButHasX
,exceptNotButIsntY
,doNotUnlessIsExceptZ
? Jak to wpływa na czytelność twojego problemu? Jeśli x, y, z nazwano coś w rodzaju „isEnabled”, „isEffective”, „hasProperty”, wówczas twoja instrukcja stajeisEnabled || isEffective || hasProperty
się o wiele bardziej czytelna niż porównywanie ztrue
lubfalse
.Takie kodowanie też wcześniej mnie potarłoby. Chociaż twój przykładowy identyfikator nosi nazwę „someBool”, nieumyślne użycie tego stylu kodowania w zmiennej, która nie była gwarantowana jako logiczna, może spowodować niezamierzone zachowanie. Jeśli wartość „someBool” nie jest dokładnie „prawda” lub „fałsz”, wynik będzie fałszywy.
W ubiegłym roku spotkałem bardzo subtelny błąd spowodowany takim stylem kodowania, który był trudny do zidentyfikowania, ponieważ oczy błyszczą nad takimi konstrukcjami. Pomyślałbyś: „Jak to może być źle?” To samo dotyczy tak dobrze rozumianych wyrażeń, jak „(var)” lub „(! Var)”, że czytasz je lub kodujesz bez sprawdzania ich zachowania.
Wprowadziłem więc kilka standardów kodowania, aby ograniczyć istnienie takich błędów w bazie kodu i prawdopodobieństwo, że takie subtelne błędy przypadkowo wkradną się w przyszłości.
Usuwając kod niezgodny z nowym stylem, zidentyfikowałem i poprawiłem kilka kolejnych takich subtelnych błędów.
źródło
Musiałem używać tego cały czas w ActionScript 2 (co prawda teraz martwy język), ponieważ:
Tak więc prawie zawsze najlepiej było być konkretnym.
źródło
Zgadzam się. Jest to zbędna konstrukcja, szczególnie w silnie pisanych językach.
Aby dodać kolejne niewłaściwe użycie boolanów, kilka razy znalazłem tego rodzaju konstrukcję w Javascript (szczególnie przy niektórych funkcjach potworów podobnych do spaghetti, jak w ponad 100 liniach):
Wygląda na to, że z powodu braku ścisłej definicji typu w tym języku niektórzy programiści wolą nie bawić się
false|undefined
wartościami.źródło
Mam kolegę, który będzie miał taki kod:
A potem, dla pewnego rodzaju testu / debugowania, nie będzie chciał wywoływać tego bloku, więc zmieni go na:
A potem od czasu do czasu zmieni to na:
Najgorsze jest to, że ten rodzaj debugowania czasami się na mnie ściera i jest naprawdę zły dla innych programistów!
źródło
Powiedziałbym, że spójność jest królem w bazie kodu. Dlatego powinieneś używać stylu, który jest najczęściej używany w twojej organizacji. Postaraj się, aby Twój ulubiony styl był częścią oficjalnych wytycznych kodowania firmy. Jeśli jest już w wytycznych, postępuj zgodnie z nim.
(To powiedziawszy, to też naprawdę mnie drażni - ale prawdopodobnie nie wystarczy, aby zrobić z tego wielką sprawę).
źródło
Wolę nie umieszczać dodatkowego == true, ale czasami przypadkowo go dołączam i nie zauważam. Osoba mogła ich nie zauważyć i przypadkowo je umieścić. Ponownie czytam kod i czasami zauważam, że umieściłem dodatkowe == true, więc usuwam to == true. Czasami tego nie zauważam iz radością witam kogoś, kto mówi mi, że umieściłem go niepotrzebnie.
źródło
Co powiesz na:
Tak, widziałem to.
źródło