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.