Abarbeitung der Operatoren && und ||

Von: , Frage gestellt am Mi, 16. Aug 2000

Neulich kam die Frage auf ob in der Sprache C festgelegt ist, dass die Verkettungen mit && oder || von links her abgearbeitet werden und abgebrochen wird sobald die weitere Auswertung sinnlos ist.
Ist das so definiert?
und wie siehts in Java aus?

Ich verlasse mich da relativ oft darauf, z.b. versuche ich zur Zeit mit:

boolean success = true;
success = funktion() && success;

rauszufinden ob die funktion() jemals schiefging. Es scheint zu gehen, wenn er aber z.b. von rechts her auswerten würde, würde er gar nicht mehr nach funktion() reingehen, nach dem ersten Fehler.

In Scriptsprachen wie Perl etc. sieht man ja auch oft:
tuirgendwas() || error.....;

Bruno

2 Antworten zu dieser Frage

  1. Antwort von nach 56 Minuten hilfreich
    Re: Abarbeitung der Operatoren && und ||


    Hi Bruno ;-))) Neulich kam die Frage auf ob in der Sprache C festgelegt ist,
    dass die Verkettungen mit && oder || von links her
    abgearbeitet werden und abgebrochen wird sobald die weitere
    Auswertung sinnlos ist.
    Ist das so definiert?
    Ja!!! Das ist tatsächlich so. Wenn du z.B. ein Feld "int a[100]" definierst hast, dann kommen oft Abfragen in der Form:

    if (i<100 && a[i]>...) ...

    Wenn jetzt i=100 ist und a[i] noch ausgewertet würde, würdest du einen Seitenfehler (segmentation fault) verursachen! Gleiches würde passieren, wenn von rechts nach links ausgewertet würde. Außerdem ist es schneller so ...

    Wenn du unbedingt beide Seiten auswerten möchtest, dann kannst du && durch * und || durch + ersetzen, also etwa

    if ( (i<100) * (a[i]>...) ) ... und wie siehts in Java aus?
    Dasselbe ... Ich verlasse mich da relativ oft darauf, z.b. versuche ich zur
    Zeit mit:

    boolean success = true;
    success = funktion() && success;

    rauszufinden ob die funktion() jemals schiefging.
    Klar geht das ;-)))

    cu Stefan.

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!