Skip to content

Latest commit

 

History

History
284 lines (226 loc) · 6.92 KB

File metadata and controls

284 lines (226 loc) · 6.92 KB

Einschränkungen des German-Moduls / German Module Limitations

English | Deutsch

English

Summary

This module provides German functions and operators for Raku, but cannot modify the fundamental language syntax due to current Raku limitations (issue #2404).

What Works

✅ Translated Functions

  • Over 200 functions translated to German
  • All math, string, list, I/O, file, date/time functions
  • Examples:
    sagen "Hallo!";                    # say "Hello!"
    my $summe = summe([1,2,3,4,5]);   # sum([1,2,3,4,5])
    my $text = großbuchstaben("hallo"); # uc("hello")

✅ Custom Operators

  • Arithmetic: plus, minus, mal, geteilt, mod, hoch
  • Comparison: gleich, ungleich, größer, kleiner, größer_gleich, kleiner_gleich
  • Logical: und, oder, nicht
  • String: verknüpfen, wiederholen_text
  • Range: bis_, vor
  • Assignment: plus_gleich, minus_gleich, mal_gleich, geteilt_gleich

Important Note: Operators require parentheses for precedence:

# Correct
my $ergebnis = (5 plus 3 mal 2);        # (5+3)*2 = 16
my $ergebnis = (5 plus (3 mal 2));      # 5+(3*2) = 11

# In conditions
if ($alter größer_gleich 18) { ... }

✅ Constants

wahr          # True
falsch        # False
nichts        # Nil
unendlich     # Inf
keine_zahl    # NaN
pi            # 3.14159...
eulersche_zahl # 2.71828...

What Does NOT Work

❌ Language Keywords

Cannot translate control structures:

# Does NOT work:
wenn ($x > 5) { ... }            # if
während ($x < 10) { ... }        # while
für @liste { ... }               # for

# Must use original:
if ($x > 5) { ... }
while ($x < 10) { ... }
for @liste { ... }

❌ Variable Declaration

# Does NOT work:
mein $variable = 5;              # my
unser $gemeinsam = 10;           # our

# Must use:
my $variable = 5;
our $gemeinsam = 10;

❌ Class and Method Syntax

# Does NOT work:
klasse MeineKlasse { ... }       # class
methode foo() { ... }            # method

# Must use:
class MeineKlasse { ... }
method foo() { ... }

Technical Reason

Rakudo (Raku's implementation) has issue #2404 preventing modules from fully modifying the language grammar. Slangs currently cannot:

  1. Change reserved keywords
  2. Modify declaration syntax
  3. Alter core control structures

However, they CAN:

  • Define new functions
  • Create custom operators
  • Export symbols to namespace

Workarounds

For Control Structures

Use provided functions with blocks:

# Instead of if/while syntax
wenn($x > 5, { sagen "Größer" }, { sagen "Kleiner oder gleich" });

während({ $x < 10 }, { 
    sagen $x;
    $x++;
});

für([1,2,3,4,5], -> $n {
    sagen "Nummer: $n";
});

For Better Readability

Use German comments:

# Wenn der Benutzer volljährig ist
if ($alter größer_gleich 18) {
    sagen "Kann wählen";
}

# Für jeden Schüler in der Liste
for @schüler -> $schüler {
    sagen "Verarbeite: $schüler";
}

Deutsch

Zusammenfassung

Dieses Modul bietet deutsche Funktionen und Operatoren für Raku, kann aber aufgrund aktueller Raku-Einschränkungen (Problem #2404) die grundlegende Sprachsyntax nicht ändern.

Was funktioniert

✅ Übersetzte Funktionen

  • Über 200 ins Deutsche übersetzte Funktionen
  • Alle mathematischen, Zeichenketten-, Listen-, E/A-, Datei- und Datum/Zeit-Funktionen
  • Beispiele:
    sagen "Hallo!";                    # say "Hello!"
    my $summe = summe([1,2,3,4,5]);   # sum([1,2,3,4,5])
    my $text = großbuchstaben("hallo"); # uc("hello")

✅ Benutzerdefinierte Operatoren

  • Arithmetisch: plus, minus, mal, geteilt, mod, hoch
  • Vergleich: gleich, ungleich, größer, kleiner, größer_gleich, kleiner_gleich
  • Logisch: und, oder, nicht
  • Zeichenkette: verknüpfen, wiederholen_text
  • Bereich: bis_, vor
  • Zuweisung: plus_gleich, minus_gleich, mal_gleich, geteilt_gleich

Wichtiger Hinweis: Operatoren benötigen Klammern für die Vorrangigkeit:

# Richtig
my $ergebnis = (5 plus 3 mal 2);        # (5+3)*2 = 16
my $ergebnis = (5 plus (3 mal 2));      # 5+(3*2) = 11

# In Bedingungen
if ($alter größer_gleich 18) { ... }

✅ Konstanten

wahr          # True
falsch        # False
nichts        # Nil
unendlich     # Inf
keine_zahl    # NaN
pi            # 3.14159...
eulersche_zahl # 2.71828...

Was NICHT funktioniert

❌ Sprachschlüsselwörter

Kontrollstrukturen können nicht übersetzt werden:

# Funktioniert NICHT:
wenn ($x > 5) { ... }            # if
während ($x < 10) { ... }        # while
für @liste { ... }               # for

# Muss das Original verwenden:
if ($x > 5) { ... }
while ($x < 10) { ... }
for @liste { ... }

❌ Variablendeklaration

# Funktioniert NICHT:
mein $variable = 5;              # my
unser $gemeinsam = 10;           # our

# Muss verwenden:
my $variable = 5;
our $gemeinsam = 10;

❌ Klassen- und Methodensyntax

# Funktioniert NICHT:
klasse MeineKlasse { ... }       # class
methode foo() { ... }            # method

# Muss verwenden:
class MeineKlasse { ... }
method foo() { ... }

Technischer Grund

Rakudo (die Raku-Implementierung) hat das Problem #2404, das Module daran hindert, die Sprachgrammatik vollständig zu ändern. Slangs können derzeit nicht:

  1. Reservierte Schlüsselwörter ändern
  2. Deklarationssyntax modifizieren
  3. Kern-Kontrollstrukturen verändern

Sie KÖNNEN jedoch:

  • Neue Funktionen definieren
  • Benutzerdefinierte Operatoren erstellen
  • Symbole in den Namespace exportieren

Workarounds

Für Kontrollstrukturen

Verwenden Sie die bereitgestellten Funktionen mit Blöcken:

# Anstelle der if/while-Syntax
wenn($x > 5, { sagen "Größer" }, { sagen "Kleiner oder gleich" });

während({ $x < 10 }, { 
    sagen $x;
    $x++;
});

für([1,2,3,4,5], -> $n {
    sagen "Nummer: $n";
});

Für bessere Lesbarkeit

Verwenden Sie deutsche Kommentare:

# Wenn der Benutzer volljährig ist
if ($alter größer_gleich 18) {
    sagen "Kann wählen";
}

# Für jeden Schüler in der Liste
for @schüler -> $schüler {
    sagen "Verarbeite: $schüler";
}

Zukünftiger Status

Wenn das Rakudo-Problem #2404 gelöst wird, wird es möglich sein:

  • Alle Schlüsselwörter zu übersetzen
  • Eine vollständig deutsche Syntax zu erstellen
  • Die Sprachgrammatik zu modifizieren

Derzeit bietet dieses Modul die maximal mögliche Funktionalität innerhalb der aktuellen Einschränkungen.

Empfehlung

Für Bildungs- oder Lernprojekte ist dieses Modul hervorragend geeignet für:

  • Programmierunterricht für deutschsprachige Lernende
  • Demonstration von Konzepten ohne Sprachbarriere
  • Erstellung zugänglicherer Beispiele

Für Produktionsprojekte sollten Sie erwägen:

  • Deutsche Kommentare mit englischem Code zu verwenden
  • Umfassende Dokumentation auf Deutsch
  • Hilfsfunktionen mit beschreibenden deutschen Namen zu erstellen