====== 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: [[lyx_-_programmiersprache:do-178c|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 **[[lyx_-_programmiersprache:Pattern-Matching|Pattern Matching]]**.