Lyx Code Beispiele

Praktische Codebeispiele zum Erlernen der Lyx Programmiersprache. Von den Grundlagen bis zur OOP.

1. Hello World

Das einfachste mögliche Lyx-Programm.

HELLO.LYX
fn main(): int64 {
    PrintStr("Hello Lyx\n");
    return 0;
}

2. Variablen & Speicherklassen

Vier Speicherklassen steuern Veränderbarkeit und Lebensdauer: var, let, co, con.

VARIABLES.LYX
fn main(): int64 {
    // var - veränderbar
    var x: int64 := 10;
    x := x + 1;  // erlaubt

    // let - unveränderbar nach Initialisierung
    let y: int64 := 20;
    // y := 0;  // FEHLER: let ist unveränderbar

    // co - Laufzeit-Konstante (readonly)
    co z: int64 := x + y;

    // con - Compilezeit-Konstante (kein Speicher)
    con LIMIT: int64 := 100;

    PrintInt(x);  // 11
    PrintStr("\n");
    return 0;
}

3. Arrays

Stack-allokierte Arrays mit Literalen, Indizierung und Zuweisung.

ARRAYS.LYX
fn main(): int64 {
    // Array-Literal
    var arr: array := [10, 20, 30];

    // Element lesen
    var first: int64 := arr[0];  // 10

    // Element zuweisen
    arr[0] := 100;

    // Dynamischer Index
    var i: int64 := 1;
    var second: int64 := arr[i];  // 20

    PrintInt(arr[0]);  // 100
    PrintStr("\n");
    return 0;
}

4. Structs

Benutzerdefinierte Typen mit Struct-Literalen und Feldzugriff.

STRUCTS.LYX
type Point = struct {
    x: int64;
    y: int64;
};

fn main(): int64 {
    // Struct-Literal mit Feldinitialisierung
    var p: Point := Point { x: 10, y: 20 };

    // Feldzugriff
    PrintInt(p.x);        // 10
    PrintStr("\n");

    // Feldzuweisung
    p.x := 42;
    PrintInt(p.x);        // 42
    PrintStr("\n");

    return 0;
}

5. Struct-Methoden

Structs können Methoden mit self und statische Methoden haben.

METHODS.LYX
type Counter = struct {
    count: int64;
    
    // Instanz-Methode mit self
    fn increment(): int64 {
        self.count := self.count + 1;
        return self.count;
    }
    
    // Statische Methode - kein self, aufrufbar als Counter.zero()
    static fn zero(): Self {
        return Counter { count: 0 };
    }
};

fn main(): int64 {
    var c: Counter := Counter { count: 10 };
    c.increment();
    PrintInt(c.count);  // 11
    PrintStr("\n");
    return 0;
}

6. OOP — Klassen

Volle OOP mit Vererbung, Konstruktoren und Destruktoren.

OOP.LYX
// Basisklasse
type Animal = class {
    name: pchar;
    
    fn speak() {
        PrintStr("Irgendein Laut\n");
    }
};

// Abgeleitete Klasse mit Vererbung
type Dog = class extends Animal {
    breed: pchar;
    
    // Konstruktor
    fn Create(n: pchar, b: pchar) {
        self.name := n;
        self.breed := b;
    }
    
    // Methode überschreiben
    fn speak() {
        PrintStr("Wuff!\n");
    }
    
    // Destruktor
    fn Destroy() {
        PrintStr("Hund zerstört\n");
    }
};

fn main(): int64 {
    // Heap-Allokation mit Konstruktor
    var d: Dog := new Dog("Bello", "Labrador");
    d.speak();           // "Wuff!"
    
    dispose d;          // ruft Destroy() auf und gibt Speicher frei
    return 0;
}

7. Pipe-Operator

Verkette Funktionen mit lesbarem Links-nach-Rechts-Datenfluss durch |>.

PIPE.LYX
fn double(x: int64): int64 { return x * 2; }
fn addOne(x: int64): int64 { return x + 1; }

fn main(): int64 {
    var x: int64 := 5;
    
    // Pipe: lesbar von links nach rechts
    var result: int64 := x |> double() |> addOne();
    
    // Entspricht: addOne(double(x)) = 11
    PrintInt(result);  // 11
    PrintStr("\n");
    return 0;
}

8. Externe Funktionen

Integriere C-Bibliotheken mit extern fn und Varargs.

EXTERN.LYX
// Externe Funktionen deklarieren
extern fn malloc(size: int64): pchar;
extern fn free(ptr: pchar): void;
extern fn printf(format: pchar, ...): int64;

fn main(): int64 {
    // Speicher allokieren
    let ptr: pchar := malloc(64);
    
    // printf mit Varargs
    printf("Hallo %s, Zahl: %d\n", "Welt", 42);
    
    // Speicher freigeben
    free(ptr);
    
    return 0;
}

9. Kontrollfluss

if/else, while-Schleifen und switch/case-Anweisungen.

CONTROL.LYX
fn klassifiziere(n: int64): int64 {
    if (n > 0) {
        PrintStr("positiv\n");
    } else {
        if (n < 0) {
            PrintStr("negativ\n");
        } else {
            PrintStr("Null\n");
        }
    }
    
    // switch/case
    switch (n % 3) {
        case 0: PrintStr("durch 3 teilbar\n");
        case 1: PrintStr("Rest 1\n");
        default: PrintStr("Rest 2\n");
    }
    
    return 0;
}

fn main(): int64 {
    var i: int64 := 0;
    while (i < 3) {
        klassifiziere(i);
        i := i + 1;
    }
    return 0;
}

10. Standardbibliothek

Verwende die eingebaute Standardbibliothek.

STDLIB.LYX
// Standardbibliothek-Module importieren
import std.math;
import std.string;

fn main(): int64 {
    // Mathematische Funktionen
    var x: int64 := -42;
    PrintInt(Abs64(x));      // 42
    PrintStr("\n");
    
    // String-Funktionen
    var s: pchar := "Hallo Welt";
    PrintInt(StrLength(s));  // 10
    PrintStr("\n");
    
    // Int-zu-String-Konvertierung
    var numStr: pchar := IntToStr(12345);
    PrintStr(numStr);
    PrintStr("\n");
    
    return 0;
}