Lyx – Bedingungen (if / else)

Bedingungen steuern den Kontrollfluss in Lyx. Sie erlauben es, Codeblöcke nur dann auszuführen, wenn eine bestimmte logische Voraussetzung erfüllt ist.

1. Grundlegende Syntax

Eine if-Bedingung erwartet einen Ausdruck, der zu einem bool (oder qbool) evaluiert.

if (altitude < 1000) {
    ActivateLandingGear();
} else if (altitude > 40000) {
    ReduceThrust();
} else {
    MaintainFlight();
}
  • Klammern: Die Bedingung muss in runden Klammern stehen.
  • Blöcke: Die geschweiften Klammern { } sind auch bei einzeiligen Anweisungen für die Eindeutigkeit empfohlen.

2. Logische Operatoren & Short-Circuiting

Lyx verwendet standardmäßig Short-Circuit Evaluation (Kurzschlussauswertung) für logische Verknüpfungen.

Operator Bedeutung Beschreibung
&& UND (AND) Zweiter Teil wird nur geprüft, wenn der erste true ist.
|| ODER (OR) Zweiter Teil wird nur geprüft, wenn der erste false ist.
! NICHT (NOT) Invertiert den Wahrheitswert.
// Wenn 'sensor' null ist, wird 'sensor.is_active' gar nicht erst geprüft.
// Dies verhindert Null-Pointer-Exceptions.
if (sensor != null && sensor.is_active) {
    process(sensor.data);
}

3. MC/DC und DO-178C Relevanz

Für die Luftfahrt-Zertifizierung (DAL A) reicht ein einfacher Test der Pfade nicht aus. Lyx unterstützt hierbei die Modified Condition/Decision Coverage (MC/DC).

 
Zertifizierungs-Hinweis:
Bei Verwendung des Compiler-Flags –mcdc-report analysiert Lyx alle if-Bedingungen. Der Report hilft nachzuweisen, dass jede Teilbedingung in einem komplexen Ausdruck (z. B. A && B) unabhängig das Gesamtergebnis beeinflussen kann.
Details unter: DO-178C Compliance.

4. Besonderheit: Probabilistisches If (qbool)

Lyx unterstützt den Typ qbool für probabilistische Logik (z. B. für Simulationen oder KI-Entscheidungen).

var failure_probability: qbool := 0.01q; // 1% Wahrscheinlichkeit
 
if (failure_probability) {
    // Dieser Block wird mit einer Wahrscheinlichkeit von 1% betreten
    TriggerEmergencyRoutine();
}

5. Pattern Matching (match)

Für komplexere Fallunterscheidungen, insbesondere bei Enums oder Typ-Prüfungen, bietet Lyx den match-Block als sicherere und mächtigere Alternative zum klassischen switch.

Zertifizierungs-Hinweis:
Die durch den Compiler erzwungene Vollständigkeitsprüfung (Exhaustiveness) ist ein Schlüsselelement zur Vermeidung von undefiniertem Verhalten in sicherheitskritischen Systemen.
Details dazu siehe: DO-178C Compliance.
match (flight_state) {
    case State.Idle    => { PowerOn(); }
    case State.Taxiing => { SetFlaps(10); }
    case State.InAir   => { RetractGear(); }
    default            => { LogError(); }
}
  • Exhaustiveness: Der Compiler prüft (v0.9.0+), ob alle möglichen Fälle abgedeckt sind. Falls ein Enum-Wert fehlt, wird die Kompilierung mit einem Fehler abgebrochen.
  • Detail-Dokumentation: Eine vollständige Übersicht der Möglichkeiten (Ranges, Deconstruction) findest du auf der Seite Pattern Matching.