17
Jan
Tags: .NET | 7 Comments »
null != foo vs. foo != null
Všiml jsem si, že někteří programátoři resp. některé společnosti používají “otočený zápis”, tedy místo (pro mě obvyklého) foo != null používají null != foo. Ačkoli se dá obojí bez problémů přečíst a zvyknout si, připadá mi první verze přirozenější. Je snad na druhém zápisu něco “magicky lepšího”, co mi uniká?



There's 7 Comments So Far
January 17th, 2009 at 13:36
Pokud vím, tak je to zvyk z dob C++, pozůstatek, kdy se tím zabraňovalo tomu, aby kompiler provedl nežádoucí konverze, nebo tak něco. Ale detaily si už nepamatuji, sám jsem to nikdy nepoužíval.
January 17th, 2009 at 13:58
Duvodem, alespon v C++ je fakt, ze pokud se omylem misto == napise =, tak v pripade foo = null se provede prirazeni, ktere je pro kompilator v poradku. pokud ovsem bude null = foo, kompilator zahlasi chybi prirazeni do konstanty.Osobne ale pouzivam rovnez zapis “promenna == hodnota”.
January 17th, 2009 at 14:40
no ja to mam zazite tak, ze pisu _hodnota-ke-komparaci_ (komparator) _promenna_ protoze to je pak jednotne napr. i u “value”.equals(variable). zapis “value” == variable uz je tedy obdoba stejneho. U obj. modelu je pak vyhoda jasna.my 2 cents
January 17th, 2009 at 17:18
Důvod je přesně ten, jak píše L. Vodička. Vzpomně jsem si na to při práci v kůlně a na pozemku
Problém není jenom v tom přiřazení, ale i v tom, že kompilátor C++ výsledek vyhodnotí jako false, takže kód se zkompiluje, za runtime proběhne bez výjimky, ale ta podmínka nebude nikdy splněna.
January 22nd, 2009 at 00:23
Aha, tak to je zajimavy. Jeste ze jsem C++ nikdy moc nepouzival.
February 28th, 2009 at 01:45
2PetrB:Jasně že to tak je, jen pouze s tím rozdílem, že C (nevím jak .netí) do if bere krom porovnání také cokoliv, co se dá přeložit na číslo a pokud je jeho hodnota 0 tak je to false, jinak je to true.Pokud tedy uklepnutí je if (x=999), tak se to vykoná vždy, pokud je to if(x=0) tak nikdy.když se člověk trochu snaží, tak z toho udělá nepřehledný kód: uint i=1; if(i–){} -co to udělá
jinak v C# jsem si zvyknul na podivný paskvil kombinace obého:if (null == value), ale if (value == 100)
April 29th, 2009 at 14:48
V c# nehrozí to co v c++, takže to nemá v tomto kontextu žádný význam.
Share your thoughts, leave a comment!