Dies ist eines der Dinge, die ich am meisten hasse, wenn ich es im Code eines anderen sehe. Ich weiß, was es bedeutet und warum manche Leute es so machen ("Was ist, wenn ich versehentlich stattdessen '=' setze?"). Für mich ist es so, als würde ein Kind die Treppe hinuntergehen und die Stufen laut zählen.
Wie auch immer, hier sind meine Argumente dagegen:
- Es stört den natürlichen Ablauf des Lesens des Programmcodes. Wir Menschen sagen "wenn Wert Null ist" und nicht "wenn Null Wert ist".
- Moderne Compiler warnen Sie, wenn Sie einen Auftrag in Ihrem Zustand haben oder wenn Ihr Zustand aus nur diesem Auftrag besteht, der ohnehin verdächtig aussieht
- Sie sollten nicht vergessen, doppeltes '=' zu setzen, wenn Sie Werte vergleichen, wenn Sie ein Programmierer sind. Sie können auch vergessen, "!" beim Testen von Ungleichheit.
coding-style
Mojuba
quelle
quelle
0 == value
aber nicht daran erinnern, zu schreiben==
? Ich meine, verdammt, wenn du darüber nachdenkst, warum schreibst du es nicht gleich richtig?Antworten:
Ah ja, "Yoda conditionals" ("Wenn der Wert Null ist, führen Sie diesen Code aus, den Sie müssen!"). Ich weise immer jeden an, der behauptet, er sei "besser" bei Werkzeugen wie Flusen (1). Dieses spezielle Problem wurde seit den späten 70er Jahren gelöst. Die meisten modernen Sprachen kompilieren nicht einmal einen Ausdruck wie
if(x = 10)
, da sie sich weigern, das Ergebnis der Zuordnung zu einem Booleschen Wert zu erzwingen.Wie andere gesagt haben, ist es sicherlich kein Problem, aber es provoziert ein bisschen kognitive Dissonanz.
quelle
if(!value)
.if (0 == x)
?Es ist abscheulich, weil es eine kleine, aber spürbare mentale Steuer auferlegt.
Die Leute lesen von links nach rechts in praktisch allen Programmiersprachen (und den meisten natürlichen Sprachen).
Wenn ich sehe
123 == x
, ist die Art, wie ich es mental analysiere:123
- Na und? unvollständige Info.==
- Nun, 123 ist 123, warum testen Sie es ...x
- Ok, das ist es, worüber wir uns Sorgen machen. Erst jetzt habe ich den Kontext.123
warum x damit verglichen wird.Wenn ich
x == 123
mentales Parsen sehe, ist das:x
- Bietet Kontext, ich weiß, worum es bei der Bedingung geht. Ich kann mich dafür entscheiden, den Rest zu ignorieren. Aufgrund des vorherigen Ablaufs habe ich eine gute Idee, warum und was kommen wird (und wundere mich, wenn es anders ist).==
- Ich dachte auch.123
- Jep.Die Störung ist klein (in einem einfachen Beispiel), aber ich bemerke es immer .
Den Wert an die erste Stelle zu setzen, kann eine gute Idee sein, wenn Sie darauf aufmerksam machen möchten , z
if (LAUNCH_NUKES == cmd)
. Normalerweise ist das nicht die Absicht.quelle
=
oder==
vorher123
oderx
und mache mir am Ende nicht einmal die Mühe, den Code in meinem Kopf ins Englische zu übersetzen.Schädlich? Nein, es funktioniert so oder so.
Schlechte Praxis? Bestenfalls fraglich. Es ist eine einfache defensive Programmierung.
Lohnt es sich, den Schlaf zu verlieren? Nein.
quelle
Dies ist im Grunde flaimbait.
Nein, es schadet nicht mehr als es nützt. Einfach.
Mehr Wörter?
Compiler-Argument? Ähm, ish, vielleicht - vertraue nicht zu sehr auf den Komplizen, um dich vor dir selbst zu retten.
"Du solltest nicht vergessen" - na ja - nein, natürlich solltest du nicht, dass ich müde bin. Ich habe den ganzen Tag lang programmiert. Ich musste zwei verschiedene Sprachen verwenden und manchmal, manchmal, bin ich ein Mensch ein Fehler.
Der Sinn dieser Art von Verhalten ist, dass es defensiv ist, es ist nicht da, weil Sie erwarten, Fehler zu machen, genauso wie Sie eine Versicherung haben, weil Sie einen Absturz erwarten ... aber wenn Sie es tun, ist es schön, gedeckt zu sein.
Schwer zu lesen? Sie beschweren sich, dass ein anständiger Programmierer == fest verdrahtet haben sollte (was alle möglichen schlechten Annahmen macht), aber dass derselbe anständige Programmierer den Wert 0 == nicht lesen kann?
Schadet nicht, hat potenzielle Vorteile, alberne Frage, lass es andere tun, wenn sie wollen und weiterziehen.
quelle
Ich würde es nicht als schädlich bezeichnen, aber es ist widerlich. Also nein, ich würde nicht sagen, dass es das tut.
quelle
Ich habe noch nie das Gefühl gehabt, dass das Ganze "was ist, wenn ich ein = vergesse?" jemals wirklich viel Gewicht gehalten. Ja, Sie können einen Tippfehler machen, aber wir alle machen Tippfehler. Es scheint dumm, Ihren gesamten Codierungsstil zu ändern, weil Sie Angst haben, einen Fehler zu machen. Warum nicht alle Variablen und Funktionen ohne Satzzeichen in Kleinbuchstaben schreiben, weil Sie eines Tages vergessen könnten, Groß- oder Kleinschreibung zu verwenden oder einen Unterstrich zu vergessen?
quelle
Einige Leute verwenden es, um genau zu verdeutlichen, was eine Bedingung tut. Zum Beispiel:
Weg 1:
Weg 2:
Einige Leute glauben, dass das zweite Beispiel prägnanter ist, oder dass das Umkehren von Argumenten den (bedingten) Sinn eines Tests vor dem eigentlichen Test verdeutlicht.
Eigentlich macht es mir auch nichts aus. Ich habe ein Faible für Stil und das größte Problem ist die Inkonsistenz. Tun Sie es also konsequent auf die gleiche Weise, und es macht mir nichts aus, Ihren Code zu lesen.
Mischen Sie es bis zu dem Punkt, an dem es aussieht, als ob sechs verschiedene Leute mit ihrem eigenen unverwechselbaren Stil gleichzeitig daran gearbeitet haben. Ich ärgere mich ein wenig.
quelle
Für mich ist es eine einfache Konditionierung. Als jemand, der (in den 90er Jahren) C und C ++ gelernt hat, habe ich mich daran gewöhnt und benutze es immer noch, auch wenn die Gründe nicht klar sind.
Sobald Sie "konditioniert" sind, um auf der linken Seite nach der "Konstante" zu suchen, wird dies zur zweiten Natur.
Ich benutze es auch nur für Äquivalenz (oder negierte Äquivalenz), nicht für größer / kleiner als.
Ich stimme voll und ganz der Antwort von Wonko zu.
quelle
Der einzige Fall, in dem ich es hilfreich finde, ist, dass der variable Teil des if ziemlich lang ist und das Anzeigen der Werte das Lesen des Codes erleichtert. Die gepunkteten Namespace-Sprachen haben die besten Beispiele dafür.
Zum Beispiel hatte etwas, an dem ich mit Single Sign-On gearbeitet habe, eine Situation, in der Sie zwei Sitzungen gleichzeitig abhalten konnten, wenn eine bestimmte Art von Fehler auftrat und auf eine bestimmte Weise behoben wurde etwas wie das:
if (2 <= application.httpcontext.current.session["thenameofmysessiontoken"].items.count())
Zwar gibt es in diesem Beispiel andere Möglichkeiten, dies zu tun, aber dies wäre ein Fall, in dem die Version mit der ersten Nummer möglicherweise besser lesbar ist.
quelle
Und doch treten die Fehler auf. Und manchmal möchten Sie eine Zuweisung in einem Schleifenoperator, in dem Sie sonst die Gleichheit überprüfen könnten, oder zumindest ist es üblich, sie zu verwenden.
Ich halte etwas daran fest. Der Rat, den ich befolgt habe (möglicherweise von Code Complete), ist, den niedrigeren Wert links im Vergleich beizubehalten. Ich habe das vorher mit einem Kollegen besprochen und er fand es irgendwie verrückt, aber ich habe mich sehr daran gewöhnt.
Also würde ich sagen:
Ich würde aber auch sagen:
Gleichheit Ich werde eher mit der Variablen auf der linken Seite nachsehen, sie ist nur lesbarer.
quelle
if(y > x)
ganze Zeit zu benutzen . Esy
sei denn, ist eine Konstante.