====== 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]]**.