Clojure
- Okunuşu
- klojır
Kısaca
Clojure, JVM'de çalışan modern ve dinamik bir Lisp lehçesidir; değiştirilemez veriyi, fonksiyonel programlamayı ve REPL tabanlı geliştirmeyi öne çıkarır.
Clojure nedir?
Clojure, Rich Hickey tarafından geliştirilen ve ilk kez 2007'de yayımlanan, genel amaçlı bir programlama dilidir. En eski programlama dili ailelerinden biri olan Lisp'in bir lehçesidir ve Java Sanal Makinesi üzerinde çalışır; bu yüzden Clojure kodu herhangi bir Java kütüphanesini çağırabilir. ClojureScript, tarayıcılar ve Node.js için JavaScript'e derlenen kardeş bir gerçeklemedir.
Tüm Lisp'ler gibi Clojure da kodu parantez içindeki iç içe listeler olarak yazar ve fonksiyon başta gelir: 1 + 2 yerine (+ 1 2). Kod dilin kendi veri yapılarıyla yazıldığı için (bu özelliğe homoikoniklik denir), makrolar kodu çalışmadan önce dönüştürebilir ve geliştiricilerin dilin kendisini genişletmesine izin verir. Clojure dinamik tiplidir ve fonksiyoneldir; çekirdek koleksiyonları (listeler, vektörler, eşlemeler ve kümeler) değiştirilemez ve kalıcıdır (persistent), yani güncellemeler eski sürümlerle belleği verimli biçimde paylaşan yeni sürümler döndürür. Değişmesi gereken durum için, bir değeri iş parçacıkları arasında güvenle güncelleyen atom gibi denetimli araçlar sunar.
Clojure arka uç servislerinde, veri işlemede ve finansal sistemlerde, ClojureScript ise web ön uçlarında kullanılır. Geliştiriciler genellikle çalışan programlarına bağlı bir REPL'de çalışır ve her seferinde tek bir fonksiyonu değerlendirip yeniden tanımlar; bu, düzenle-derle-çalıştır döngüsünden çok uygulamayla yapılan bir sohbete benzer.
Clojure sıklıkla diğer Lisp'lerle ve diğer JVM dilleriyle kıyaslanır. Common Lisp ve Scheme gibi eski Lisp'lere kıyasla vektörler ve eşlemeler için değişmez sözdizimi, varsayılan olarak değiştirilemez veri ve ana platformuyla sıkı bütünleşme ekler. Yine JVM'de çalışan Scala ve Kotlin'e kıyasla Clojure dinamik tiplidir ve sözdizimi bakımından çok daha minimaldir; derleme zamanı tip denetimlerini esneklik ve etkileşimli geliştirmeyle takas eder.
Önemli noktalar
- Clojure, JVM üzerinde çalışan ve Java kütüphanelerini kullanabilen bir Lisp lehçesidir.
- Çekirdek veri yapıları değiştirilemez ve kalıcıdır.
- Kod veri olarak yazıldığı için makrolar dili genişletebilir.
- REPL tabanlı geliştirme, çalışan bir programı etkileşimli olarak değiştirmenize olanak tanır.
- ClojureScript aynı dili JavaScript ortamlarına getirir.
Örnek
;; Maps are immutable: assoc returns a new map
(def user {:name "Ada" :langs ["clojure" "java"]})
(def updated (assoc user :role "admin"))
(println (:role user)) ;; nil (original unchanged)
(println (:role updated)) ;; admin
;; The ->> macro threads a value through a series of functions
(->> [1 2 3 4 5 6]
(filter even?)
(map #(* % %))
(reduce +)
(println)) ;; 56Sık sorulan sorular
Clojure'da neden bu kadar çok parantez var?
Clojure, tüm Lisp'ler gibi kodu, her parantez çiftinin içinde önce fonksiyon adı gelen iç içe listeler olarak yazar. Bu tek biçimli yapı sözdizimini çok küçük tutar ve makroların kodu veri gibi ele almasını sağlar; editörler de parantezleri otomatik dengeler.
Clojure fonksiyonel bir dil mi?
Evet. Clojure saf fonksiyonları ve değiştirilemez veriyi teşvik eder ve fonksiyonları değer olarak ele alır; ancak pragmatiktir: yan etkilere izin verir ve atomlar gibi durumu değiştirmenin yönetilen yollarını sunar.
Clojure ile ClojureScript arasındaki fark nedir?
Aynı dilin farklı platformları hedeflemesidir. Clojure JVM üzerinde çalışır ve Java kütüphanelerini kullanır; ClojureScript ise JavaScript'e derlenir ve tarayıcılarda ya da Node.js'te çalışır.
İlgili sayfalar
- Fonksiyonel programlamaProgramlamanın Temelleri, s. 21Fonksiyonel programlama, paylaşılan verileri değiştirmeyen saf fonksiyonlarla yazılım kurma stilidir; kodu daha öngörülebilir ve test etmesi kolay yapar.
- DeğişmezlikProgramlamanın Temelleri, s. 11Değişmezlik, bir değerin oluşturulduktan sonra değiştirilememesi demektir; her güncelleme, orijinali yerinde değiştirmek yerine yeni bir değer üretir.
- JavaProgramlama Dilleri, s. 15Java, Java Sanal Makinesi için bayt koda derlenen, statik tipli ve nesne yönelimli bir programlama dilidir; programlar birçok platformda çalışabilir.
- ScalaProgramlama Dilleri, s. 30Scala, nesne yönelimli ve fonksiyonel programlamayı birleştiren, statik tipli bir JVM dilidir; veri mühendisliğinde ve arka uç sistemlerinde yaygın kullanılır.
- Lambda fonksiyonuProgramlamanın Temelleri, s. 36Lambda fonksiyonu, adı olmadan satır içinde yazılan küçük fonksiyondur; genellikle sıralama ya da filtreleme yapan başka bir fonksiyona doğrudan aktarılır.
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- JVMProgramlama Dilleri, s. 17JVM, Java bytecode'unu çalıştırır; böylece derlenmiş bir program her işletim sisteminde çalışır. Kotlin, Scala ve Clojure da bu bytecode'a derlenir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin