BEAM Erlang Campus

Erlang-Lektion

Erlang Funktionen und Guards einfach erklaert

Funktionen in Erlang sind um mehrere Klauseln, Pattern Matching und optionale Guards gebaut. Das klingt zunaechst theoretisch, ist aber praktisch sehr stark: jede Klausel beschreibt genau, wann sie aktiv sein soll und warum spaetere Faelle ueberhaupt noch existieren.

Warum Erlang-Funktionskoepfe anders wirken

In vielen Sprachen schreibst du einen Funktionskoerper und verzweigst dann innen weiter. In Erlang schreibst du oft mehrere Klauseln. Jede Klausel kann eine andere Form oder einen anderen Wertebereich abdecken. Dadurch bleibt die Struktur der Funktion direkt oben sichtbar.

Fuer Anfaenger ist das ein entscheidender Stilwechsel. Gute Erlang-Funktionen lesen sich fast wie eine Liste von Faellen. Oft reicht es schon, die Koepfe der Funktion in Reihenfolge zu lesen, um die Logik zu verstehen.

Was ein Guard hinzufuegt

Ein Guard verengt eine Klausel weiter. Pattern Matching sagt, welche Form die Eingabe hat. Ein Guard sagt, welche Zusatzbedingung noch gelten muss. Dadurch wird Code praeziser, ohne unnoetig laut zu werden. Guards sind besonders stark, wenn zwei Klauseln aehnlich aussehen, aber nur unter unterschiedlichen Wertbedingungen laufen sollen.

Das beste Anfaenger-Muster ist: zuerst Pattern, dann Guard, dann Koerper. Wer diesen Rhythmus frueh lernt, schreibt deutlich sauberere Funktionen.

classify(N) when N < 0 -> negative;
classify(0) -> zero;
classify(N) when N > 0 -> positive.

So liest du mehrklauselige Funktionen

Lies solche Funktionen von oben nach unten. Frage dich bei jeder Klausel: welchen Fall faengt sie ab, und was faellt noch zur naechsten weiter? Die Reihenfolge ist wichtig. Eine zu breite Klausel am Anfang kann spaetere, spezifischere Faelle verschlucken.

Dadurch fuehlt sich Funktionsdesign in Erlang eher wie das Formulieren von Regeln an als wie das Schreiben eines Ablaufplans. Genau das passt zur Sprache.

Wie Funktionsklauseln aus Pattern Matching echte Regeln machen

Viele Suchende kommen von Pattern Matching hierher und fragen sich, was jetzt neu ist. Die Antwort: Pattern Matching beschreibt einzelne Formen, aber Funktionen und Guards machen daraus eine geordnete Regelsammlung fuer echtes Verhalten. Eine Klausel passt auf leere Listen, die naechste auf nicht leere Listen, eine weitere vielleicht nur auf positive Zahlen.

Genau dadurch entsteht der typische Erlang-Stil. Du schreibst nicht erst einen grossen Sammelkoerper und sortierst innen chaotisch nach Bedingungen. Du formulierst am Kopf, welcher Fall gilt, und im Guard, unter welcher Zusatzregel er laufen darf.

Eine kleine Walkthrough-Leseprobe

Stell dir eine Funktion vor, die Temperaturen in drei Gruppen einteilt. Lies nicht zuerst den Rueckgabewert, sondern die Reihenfolge: negative Werte, genau null, positive Werte. Jetzt verstehst du die Funktion schon fast vollstaendig, bevor du den Koerper ueberhaupt betrachtest.

temperature_label(N) when N < 0 -> cold;
temperature_label(0) -> neutral;
temperature_label(N) when N > 0 -> warm.

Das ist der Kern dieses Themas: Guard und Klausel machen die Absicht sichtbar. Gute Erlang-Funktionen sind deshalb oft leichter zu lesen, als sie fuer Einsteiger zuerst wirken.

Typische Fehler bei Funktionen und Guards

Ein haeufiger Fehler ist, zu viel Logik in den Funktionskoerper zu verschieben statt in Kopf und Guard. Ein anderer ist, Guards fuer Dinge zu verwenden, die eigentlich eigene Klauseln sein sollten. Ausserdem wird oft vergessen, dass Guards bewusst nur einen sicheren Teil der Sprache erlauben.

Die beste Korrektur ist Vereinfachung. Wenn sich ein Fall in einem Satz erklaeren laesst, verdient er meist eine eigene Klausel. Wenn etwas nur beschreibt, wann die Klausel gelten soll, ist es oft ein Guard.

Warum diese Seite fuer den Einsteigerpfad wichtig ist

Wer nach erlang functions and guards oder nach einer deutschen Erklaerung dazu sucht, will in der Regel nicht nur eine API-Liste. Die eigentliche Suchintention ist: Wie baue ich aus Pattern Matching und Fallunterscheidung endlich lesbare Funktionen?

Genau deshalb liegt diese Seite zwischen Pattern Matching und Rekursion. Erst wenn du Funktionskoepfe wirklich verstehst, fuehlen sich rekursive Funktionen nicht mehr wie kryptische Spezialfaelle an.

Was du danach ueben solltest

  • Eine Funktion mit zwei Klauseln fuer leere und nicht leere Eingaben schreiben.
  • Einen Guard fuer positive und negative Werte hinzufuegen.
  • Die Reihenfolge der Klauseln laut erklaeren.
  • Danach direkt Rekursion lernen.

Hauefige Fragen

Was ist ein Guard in Erlang?

Ein Guard ist eine Zusatzbedingung an einer Klausel, zum Beispiel when N > 0, die bestimmt, ob diese Klausel wirklich matchen darf.

Warum mehrere Funktionsklauseln verwenden?

Weil der Programmfluss dadurch direkt am Funktionskopf sichtbar und lesbar wird.