OCaml ist eine funktionale Programmiersprache mit starkem statischem Typsystem, die auch imperative und objektorientierte Elemente bietet. Sie wird für Compiler, statische Analysen und performante Systeme eingesetzt — der Rust-Konkurrent mit anderem Ansatz.
Erste Schritte
OCaml-Code wird in Dateien mit der Endung .ml gespeichert. Die REPL heißt ocaml, als Build-Tool etabliert ist dune mit dem Paketmanager opam.
ocaml # REPL starten
ocamlc hallo.ml # Bytecode kompilieren
ocamlopt hallo.ml # nativen Code kompilieren (schneller)
opam install dune # Build-Tool installieren
Variablen und Typen
OCaml leitet Typen automatisch ab, prüft sie aber zur Compile-Zeit strikt. let bindet Namen an Werte, ;; schließt eine Top-Level-Eingabe in der REPL ab.
let name = "Welt";;
let x = 10;;
let add a b = a + b;; (* Funktionsdefinition *)
add 3 4;; (* 7 *)
Pattern Matching
Pattern Matching ersetzt in OCaml weite Teile von if/switch und ist eines der stärksten Sprachfeatures.
let beschreibe n = match n with
| 0 -> "null"
| 1 -> "eins"
| _ -> "viel";;
beschreibe 5;; (* "viel" *)
Listen und Optionen
let liste = [1; 2; 3];;
List.map (fun x -> x * 2) liste;; (* [2; 4; 6] *)
let vielleicht = Some 42;;
match vielleicht with
| Some w -> w
| None -> 0;; (* 42 *)
Unveränderlichkeit
OCaml-Daten sind standardmäßig unveränderlich. Mit ref lassen sich veränderliche Zellen erzeugen, mit Array veränderliche Felder.
let zaehler = ref 0;;
incr zaehler;; (* !zaehler ist jetzt 1 *)
let a = [|1; 2; 3|];;
a.(0) <- 99;; (* Array ist veränderlich *)
Praxis-Tipps
- Der Typinferenz-Mechanismus fängt viele Fehler bereits beim Kompilieren.
- Dune + opam sind der Standard für neue Projekte.
- F# ist die .NET-Schwester von OCaml — Konzepte übertragen sich weitgehend.
Mehr funktionale Grundlagen: F#-Befehle und Haskell-Befehle.