~/ / docs / Grundlagen / 02 · Grundlagen
Erste Programme — let, Funktionen, Werte
let-Bindungen, anonyme Funktionen und der Unterschied zwischen Wert und Funktion — die Grundbausteine jeder OCaml-Datei.
OCaml ist eine expression-basierte Sprache. Fast alles ist ein Ausdruck mit Typ und Wert — auch Verzweigungen, auch Schleifen-Ersatz. Die wichtigste Konstruktion zum Festhalten dieser Werte ist let.
let bindet Werte
Eine let-Bindung verknüpft einen Namen mit einem Wert. Der Typ wird vom Compiler abgeleitet:
let pi = 3.14159
let greeting = "Hallo"
let answer = 42
In der REPL bestätigt OCaml den abgeleiteten Typ. Bindungen sind immutabel — ein nochmaliges let pi = 4.0 erzeugt nicht etwa eine Mutation, sondern eine neue Bindung, die die alte im aktuellen Scope verdeckt.
let ... in schachtelt Bindungen innerhalb eines Ausdrucks. Das ist der typische lokale Variablenstil:
let area_circle r =
let pi = 3.14159 in
pi *. r *. r
Achte auf den Punkt in *. — OCaml unterscheidet streng zwischen Integer- und Float-Operatoren. * multipliziert int, *. multipliziert float. Diese Trennung wirkt zunächst pedantisch, vermeidet aber stille Konvertierungsfehler.
Funktionen sind Werte
In OCaml ist eine Funktion einfach ein Wert mit Pfeil-Typ. Diese beiden Definitionen sind äquivalent:
let double x = x * 2
let double = fun x -> x * 2
Funktionen mit mehreren Argumenten sind curried — sie nehmen ein Argument nach dem anderen und geben dazwischen jeweils eine neue Funktion zurück:
let add a b = a + b
(* val add : int -> int -> int *)
let add5 = add 5
(* val add5 : int -> int *)
let result = add5 10 (* 15 *)
Das Phänomen heißt partielle Applikation und wird ständig genutzt — etwa um aus generischen Funktionen spezialisierte Varianten abzuleiten.
Ausdrücke statt Anweisungen
if liefert einen Wert zurück. Beide Zweige müssen denselben Typ haben:
let classify n =
if n > 0 then "positiv"
else if n < 0 then "negativ"
else "null"
Wer aus C oder Python kommt, gewöhnt sich schnell daran, dass es kein return gibt — der letzte Ausdruck einer Funktion ist der Rückgabewert. Übung im REPL:
utop # double (add 3 4) ;;
- : int = 14
Damit stehen die Grundbausteine. Das nächste Kapitel führt Pattern Matching ein — das zentrale Werkzeug, mit dem OCaml-Code seine charakteristische Form bekommt.