Destructuring von Parametern in Clojure
Von Carsten
In Clojure gibt es ein nettes Sprachmittel, um Parameter -oder generell: Elemente aus Listen- herauszuholen. Am häufigsten wird das sicher bei Funktionsparametern eingesetzt. Hier ist ein einfaches Beispiel:
;; Anlegen einer Koordinate
(def coord [3 5])
;; Ausgeben der Koordinaten
(let [[x y] coord]
(println "x:" x " y:" y))
Zeile 2 legt eine Koordinate an, bestehend aus 2 Zahlen. Zeile 4+5 destructures die Koordinate und weist den Parametern x
und y
die Werte aus coord
zu. In der Funktion werden die Parameter dann verwendet und als String ausgegeben.
Den gleichen Mechanismus nutzt man eigentlich bei jeder Funktion. Am deutlichsten wurde mir das, als ich das obige Beispiel für beliebig-dimensionale Koordinaten erweitert habe:
;; 3-dimensionale Koordinate anlegen
(def coord [1 2 3])
;; Koordinate ausgeben
(let [[x y & more] coord]
(println "x:" x "y:" y "others:" more))
;; => x: 1 y: 2 others: (3)
Jetzt werden immer noch die ersten beiden Elemente aus der Koordinate geholt, aber der Rest wird durch & more
als Liste weitergegeben. Diesen Mechanismus nutzt man oft bei der definition von eigenen Funktionen in Clojure.