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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top