Reihenfolge der Elemente verglichen werden?
-
05-07-2019 - |
Frage
Ich habe dies um gesehen, aber noch nie gehört, eine klare Erklärung, warum ... Das ist wirklich für jede Sprache, nicht nur C # oder VB.NET oder Perl oder was auch immer.
Wenn zwei Elemente zu vergleichen, manchmal die „check“ Wert auf der linken Seite gesetzt wird statt der rechten Seite. Logischer mir, Sie Liste Ihrer Variable und dann den Wert, auf den Sie vergleichen. Aber ich habe das Gegenteil gesehen, wo die „Konstante“ zuerst genannt.
Was (falls vorhanden) Verstärkung ist es zu dieser Methode?
Also statt:
if (myValue > 0)
Ich habe gesehen:
if (0 < myValue)
oder
if (Object.GimmeAnotherObject() != null)
wird ersetzt durch:
if (null != Object.GimmeAnotherObject())
Irgendwelche Ideen dazu?
TIA! Kevin
Lösung
Einige Entwickler setzen die Konstante auf der linken Seite wie so
if(0 = myValue)
Das ist, weil Sie einen Fehler vom Compiler bekommen, da Sie nicht 0 ein Wert zuweisen können. Stattdessen müssen Sie es ändern
if(0 == myValue)
Dies verhindert, dass viele schmerzhafte Fehlersuche auf der Straße, da die Eingabe
if(myValue = 0)
ist völlig legal, aber die meisten wahrscheinlich, dass Sie gemeint
if(myValue == 0)
Die erste Wahl ist nicht das, was Sie wollen. Es wird auf subtile Weise das Programm ändern und alle Arten von Kopfschmerzen verursachen. Hoffe, dass stellt klar!
Andere Tipps
Ich glaube nicht eine einfache Regel wie aber die konstante erste oder aber die Konstante letzte ist keine sehr kluge Wahl. Ich glaube, die Überprüfung sollte es Semantik auszudrücken. Zum Beispiel ziehe ich beiden Versionen in einem Bereich Prüfung zu verwenden.
if ((low <= value) && (value <= high))
{
DoStuff(value);
}
Aber ich stimme auf die Beispiele, die Sie erwähnt. - Ich würde aber die Konstante letzte und kann tun es anders nicht obviouse Grund sehen
if (object != null)
{
DoStuff(object);
}
In C ++ beide diese gültig sind und kompilieren
if(x == 1)
und
if(x=1)
aber wenn man es so schreiben
if(1==x)
und
if(1=x)
dann die Zuordnung zu 1 wird gefangen und der Code wird nicht kompiliert werden.
Es ist als „sicherer“, um den const-Variable auf der linken Seite zu setzen.
Wenn Sie in die Gewohnheit auf der linken Seite den const-Variable des Setzens für die Zuordnung neigt es Ihr Standard-Betriebsmodus zu werden, das ist, warum Sie es sehen zeigt, wie auch in Gleichheit prüft bis
Für .Net, es ist irrelevant, da die Compiler lassen Sie nicht einen Auftrag in einer Bedingung machen, wie:
if(x=1)
, weil sie (wie jeder sagte, sonst), es ist eine schlechte Praxis (weil es einfach zu verpassen).
Sobald Sie müssen nicht befürchten, dass, es ist etwas besser lesbar die Variable auf die erste Stelle setzen und den Wert Sekunde, aber das ist der einzige Unterschied -. Beide Seiten ausgewertet werden müssen,
Die eine Codierung der Praxis Fehler wie ‚! =‘ Getippt wie ‚=‘ zum Beispiel zu fangen.
Wenn Sie eine Konstante auf der linken alle Zuweisungsoperatoren werden vom Compiler abgefangen werden, da Sie nicht auf eine Konstante zuweisen können.
Viele Sprachen (insbesondere C
) ein hohes Maß an Flexibilität in das Schreiben von Code ermöglichen. Während die Konstante auf der linken Seite scheint ungewöhnlich, Sie können Sie auch Programmzuordnungen und conditionals zusammen,
if (var1 = (var2 & var3)) { /* do something */ }
Dieser Code wird das Boolesche Ergebnis in var1
bekommen und / * auch etwas tun * / wenn das Ergebnis stimmt.
Eine entsprechende Codierung der Praxis ist das Schreiben von Code zu vermeiden, in denen bedingte Ausdrücke Zuweisungen in ihnen haben; obwohl die Programmiersprache erlaubt es, solche Dinge. Sie kommen nicht über einen solchen Code viel da Zuweisungen innerhalb conditionals ungewöhnlich ist so typischen Code nicht solche Dinge hat.
Es gibt einen guten C
Sprachkodierung Praktiken Artikel auf dem IBM developer Website, die wahrscheinlich immer noch relevant für die Menschen ist in dieser Sprache zu schreiben.