A Clojure-ben azt, hogy egy értéket egy névhez kötünk, var-nak nevezik. A legfelső szintű (globális) varok más nyelvek konstansaihoz hasonlítanak.
A legfelső szintű varokat a def segítségével definiáljuk:
(def fingers 10)
fingers
;;=> 10
A defn segítségével definiálhatsz egy függvényt, amely nulla vagy több argumentumot fogad. Ez egy olyan függvény, amely összead két számot:
(defn add [x y]
(+ x y))
Ez a függvény két argumentumot fogad, amelyek a [x y] vektorban kapnak helyet, ezt követi a függvény törzse, amely tetszőleges számú kifejezést tartalmazhat. A visszatérési érték mindig a törzs utolsó kifejezésének, a (+ x y)-nak a kiértékelési eredménye. Ez a kifejezés egy lista, amely egy függvényhívást képvisel. A lista első eleme a + függvény, amely a mögötte álló x és y elemeket argumentumként használva értékelődik ki.
A fent definiált add függvényt ugyanígy hívjuk meg:
(add 2 3)
;;=> 5
A Clojure-ben a függvényeket és az értékeket csak azután lehet használni, hogy definiáltuk őket, azaz a formokat mindig a megjelenési sorrendjükben értékeljük ki.
A Clojure-ben a szóközöknek a formázáson kívül nincs jelentőségük.
A Clojure-ben a függvények és a varok namespace-ekbe rendeződnek. Egy namespace összefogja a kapcsolódó funkcionalitást, és a ns makróval definiáljuk:
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
A Clojure kétféle megjegyzést támogat. Az egysoros megjegyzések előtt ; áll, a comment forma pedig arra szolgál, hogy megakadályozza a (comment és a ) közötti minden kifejezés kiértékelését.
Ebben a feladatban kódot írsz majd, hogy segíts egy ragyogó lasagnét elkészíteni a kedvenc szakácskönyvedből.
Négy részfeladat vár rád, és mindegyik a lasagne elkészítésével töltött időhöz kapcsolódik.
Definiáld az expected-time változót, amely megmondja, hány percig kell a lasagnének a sütőben lennie. A szakácskönyv szerint a várható sütési idő 40 perc:
expected-time
;;=> 40
Definiáld a remaining-time függvényt, amely argumentumként megkapja, hogy a lasagne hány perce van a sütőben, és visszaadja, hány percig kell még a sütőben maradnia, az előző részfeladatban megadott várható sütési idő alapján.
(remaining-time 30)
;;=> 10
Definiáld a prep-time függvényt, amely argumentumként megkapja a lasagnére rakott rétegek számát, és visszaadja, hány percet töltöttél a lasagne előkészítésével, feltéve, hogy egy réteg előkészítése 2 percet vesz igénybe.
(prep-time 2)
;;=> 4
Definiáld a total-time függvényt, amely két argumentumot kap: az első argumentum a lasagnére rakott rétegek száma, a második argumentum pedig az, hogy a lasagne hány perce van a sütőben. A függvény adja vissza, hogy összesen hány percet dolgoztál a lasagne elkészítésén, ami az előkészítési idő és a lasagne által a sütőben eddig eltöltött idő összege.
(total-time 3 20)
;;=> 26
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Clojure nyelvet 12 fogalom105 feladat segítségével, valódi emberi mentorálással, mindez ingyen.