Clojure
Főnév
Clojure (tsz. Clojures)
Clojure (kiejtés: klózsör) egy modern, funkcionális programozási nyelv, amely:
✅ Lisp alapú (S-expressions → szimbolikus kifejezések) ✅ A Java virtuális gépen (JVM) fut → Java ökoszisztémát is használhatja ✅ Immutable adatszerkezeteket használ → nincs változás helyben ✅ Erősen támogatja a párhuzamos programozást ✅ Interaktív (REPL támogatott)
Készítette: Rich Hickey → első verzió: 2007.
2️⃣ Hogyan néz ki a Clojure kód?
Mivel Clojure Lisp nyelvcsaládba tartozik, a kód “sok zárójelet” használ:
(println "Hello, World!")
Szintaxisa nagyon egyszerű: mindig prefix:
(operator operand1 operand2 ...)
Példa:
(+ 2 3 4)
; → 9
Listák:
'(1 2 3 4)
Map-ek:
{:name "Alice" :age 30}
3️⃣ Miért érdekes a Clojure?
⚡️ Funkcionális
- A Clojure nem változtatja meg az adatokat → új adatokat hoz létre.
- Nagyon jó párhuzamosításra, mivel nincs mutable state.
🛠 JVM-re épül
- Bármilyen Java libet tudsz Clojure-ből hívni.
- Könnyen integrálható Java enterprise alkalmazásokkal.
🚀 REPL first
- A Clojure környezetben alapból REPL van.
- Nagyon interaktív → kódot írsz → REPL-ben kipróbálod.
✨ Egyszerű és kifejező
- A Clojure “szintaxis” minimális → 7-8 kulcselem elég a legtöbb feladatra.
- Kifejező funkcionális primitíveket ad.
4️⃣ Clojure REPL
Clojure indítása REPL-ben:
$ clj
Clojure 1.11.1
user=>
Itt írhatod be:
user=> (+ 1 2 3)
6
user=> (str "Hello, " "World!")
"Hello, World!"
REPL a Clojure kultúrában központi:
- Clojure fejlesztés = REPL-driven development.
5️⃣ Alap adatszerkezetek
Clojure a következő immutable adatszerkezeteket adja:
| Típus | Példa |
|---|---|
| List | (1 2 3) |
| Vector | [1 2 3] |
| Map | {:a 1 :b 2} |
| Set | #{1 2 3} |
Ezekből minden kombinálható.
6️⃣ Függvények definiálása
Clojure-ban függvény így néz ki:
(defn greet [name]
(str "Hello, " name "!"))
Használat:
(greet "Alice")
; → "Hello, Alice!"
7️⃣ Magasabb szintű funkciók
Clojure igazi ereje a magasabb szintű függvényekben van:
- map → minden elemre alkalmaz függvényt:
(map inc [1 2 3])
; → (2 3 4)
- filter → csak azokat adja vissza, amelyekre a feltétel igaz:
(filter even? [1 2 3 4])
; → (2 4)
- reduce → összegzés (fold):
(reduce + [1 2 3 4])
; → 10
8️⃣ Immutability
Clojure-ban immutable az adat:
(def numbers [1 2 3])
(def more-numbers (conj numbers 4))
; numbers → [1 2 3]
; more-numbers → [1 2 3 4]
conj = új collection-t ad vissza, nem módosítja az eredetit.
9️⃣ Párhuzamosítás
Clojure támogatja a párhuzamos feldolgozást:
- atomok (
atom) - tranzakciók (
ref, STM) - future-k (
future) - async lib (
core.async)
Példa future:
(def result (future (+ 1 2 3)))
@result
; → 6
10️⃣ Java interop
Mivel a Clojure JVM-en fut, bármilyen Java osztályt használhatsz:
(new java.util.Date)
; → #inst "2025-06-06T08:00:00.000-00:00"
vagy rövidebben:
(java.util.Date.)
Metódushívás:
(.toUpperCase "hello")
; → "HELLO"
11️⃣ Hol használják?
- Backend szolgáltatások
- Big Data feldolgozás (pl. Apache Storm, Kafka)
- Webfejlesztés (pl. Ring, Compojure, Luminus)
- DevOps tooling
- AI prototípusok
- Startupoknál és nagy cégeknél is (pl. Nubank, Netflix)
12️⃣ Összefoglalás — miért érdemes megnézni?
✅ Egyszerű és következetes nyelv ✅ Nagyon erős REPL támogatás ✅ Immutable adatszerkezetek → biztonságos párhuzamosítás ✅ Java ökoszisztéma előnyeit is használja ✅ Funkcionális szemlélet → rövidebb, kifejezőbb kód
Hogyan kezdd el?
1️⃣ Telepítsd a Clojure CLI-t → https://clojure.org/guides/getting_started 2️⃣ Használj REPL-t → clj parancs 3️⃣ Olvass könyvet pl.: “Clojure for the Brave and True” 4️⃣ Játssz el az alap adatszerkezetekkel és a map / filter / reduce hármassal.