HS-Flensburg-PLTP / jlint

Other
0 stars 0 forks source link

`if`-Kaskaden erkennen, die `&&` oder `||` reimplementieren #218

Open mario-koehler opened 2 years ago

mario-koehler commented 2 years ago
if (b1) {
    if (b2) {
       stmt;
    } else {

    }
}
mario-koehler commented 2 years ago

Die Regel lässt sich nicht im Allgemeinen anwenden, WENN else Zweige vorhanden sind:

if (b1) {
    if (b2) {
       stmt;
    } else {
        // bedeutet (-b1 & -b2)
    }
} else {
    // bedeutet hier (-b1)
    // würde dann bedeuten -(b1 & b2), != (-b1), != (-b1 && -b2)
}

was durch && ersetzbar ist:

if (b1) {
    if (b2) {
       ....
    }
}
mario-koehler commented 2 years ago

Mir fällt bislang kein Fall einer Kaskadierung ein , den man direkt mit || ersetzen würde, || wäre für mich der Fall, gleicher Code in verschiedenen `if``:

if (b1) {
    doX();
}
if (b2) {
    doX();
}
jan-christiansen commented 2 years ago

Ich habe da beim posten nicht aufgepasst. Die Struktur muss wie folgt sein.

if (b1) {
    if (b2) {
        stmt1;
    } else {
        stmt2;
    }
} else {
    stmt2;
}

Diese lässt sich durch den folgenden Code abbilden.

if (b1 && b2) {
    stmt1;
} else {
    stmt2;
}

Als Spezialfall mit einer "leeren Anweisung" würde auch das folgende funktionieren.

if (b1) {
    if (b2) {
        stmt1;
    }
}

=>

if (b1 && b2) {
    stmt1;
}
jan-christiansen commented 2 years ago

Der folgende Code lässt sich durch ein || ausdrücken.

if (b1) {
    stmt1;
} else {
    if (b2) {
        stmt1;
    } else {
        stmt2;
    }
}

=>

if (b1 || b2) {
    stmt1;
} else {
    stmt2;
}
jan-christiansen commented 2 years ago

Es muss zuerst nach konkreten Beispielen gesucht werden.