JavaRush /Java-Blog /Random-DE /Yoda-Bedingungen
MAX
Level 16
Киров

Yoda-Bedingungen

Veröffentlicht in der Gruppe Random-DE
Anlässlich des 40. Jahrestages der Veröffentlichung von Episode V der Star-Saga ist allen Fans von Star Wars und Java / JavaRush ein kurzer Beitrag gewidmet! Yoda-Bedingungen – 1Manchmal findet man im Internet viele interessante Dinge, und neulich bin ich auf eine auf den ersten Blick ziemlich lustige Programmierpraxis namens Yoda-Bedingungen gestoßen . Kurz gesagt handelt es sich bei Yoda-Bedingungen (auch Yoda-Notation) um einen Programmierstil, bei dem die beiden Teile des bekannten Vergleichsausdrucks in bedingten Anweisungen umgekehrt werden:
if (5 == a) {
    // do something
}
Dieser Stil kann in Sprachen mit C-ähnlicher Syntax verwendet werden, am häufigsten in Ausdrücken mit ifund while.
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
Warum den konstanten Ausdruck auf die linke Seite des Vergleichsoperators verschieben? Nehmen wir eine hypothetische Situation an, in der wir uns nach einer Marathon-Ansicht aller neun sechs Teile der Saga schlaflos hinsetzten, um Code für unser Lieblingsprojekt zu schreiben, und Folgendes schrieben:
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
In diesem Fall erhalten Sie jedes Mal, wenn Sie das Programm ausführen, die Zeichenfolge Number is 13", unabhängig vom аan die Methode übergebenen Argument checkNumber(int a). Das ist nicht das, was wir erwartet haben! Logische Fehler können bei unerfahrenen Programmierern recht häufig auftreten (glauben Sie mir, ich weiß es). Aber in der Kompilierungsphase erzeugt Code wie 13 = a einen Fehler, den wir sicherlich nicht übersehen werden, da der ganzzahlige Wert eine Konstante ist und sich dementsprechend nicht ändern (in „a“ verwandeln) kann. Yoda-Bedingungen – 1

Die Verwendung der Yoda-Bedingungen hat sowohl Vor- als auch Nachteile.

Helle Seite:

  1. Verhindern der Zuweisung zu einer Variablen, wenn unser Ziel der Vergleich ist.

  2. Lösung des Problems des unsicheren „Null-Verhaltens“ ( NullPointerException) // Beispiele aus Wikipedia

  3. Ohne Yoda:

    String myString = null;
    if (myString.equals("foobar")) { /* ... */ }
    // This causes a NullPointerException in Java

    Mit Yoda:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

Dunkle Seite:

  1. Die Lesbarkeit des Codes für Personen, die Ihren Code betrachten, wird komplexer, was die Wahrnehmung des Codes stärker belastet.
  2. Enger Geltungsbereich, es wird nur ein Vergleich auf Gleichheit oder ein Vergleich mit einer Konstante verwendet, wobei auf Null geprüft wird.
  3. Viele Compiler „sehen“ Fehler dieser Art bereits und warnen vor dem Vorliegen eines möglichen Fehlers.
Eine Alternative zur Yoda-Notation können Unit-Tests sein. In den Tagen der Alten Republik hieß es, dass gute Tests sicherstellen würden, dass der Code fehlerfrei sei und nur das tue, wofür er geschrieben wurde. Welche nützlichen Praktiken kennen Sie? Teilen Sie Ihr Wissen in den Kommentaren! Und schreibe auch deine Lieblingsfolge! Und möge die Macht mit dir sein!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION