Clojure - Java Arayüzü

Bildiğimiz gibi Clojure kodu sonunda Java sanal ortamında çalışır. Bu nedenle Clojure'un Java'nın tüm işlevlerini kullanabilmesi mantıklıdır. Bu bölümde Clojure ve Java arasındaki ilişkiyi tartışalım.

Java Yöntemlerini Çağırma

Java yöntemleri nokta notasyonu kullanılarak çağrılabilir. Bir örnek dizelerdir. Clojure'daki tüm dizeler zaten Java dizgeleri olduğundan, dizeler üzerinde normal Java yöntemlerini çağırabilirsiniz.

Aşağıdaki programda bunun nasıl yapıldığına dair bir örnek gösterilmektedir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (println (.toUpperCase "Hello World")))
(Example)

Yukarıdaki program aşağıdaki çıktıyı üretir. Koddan, herhangi bir dize yöntemi için sadece nokta gösterimini çağırırsanız, Clojure'da da çalışacağını görebilirsiniz.

Çıktı

HELLO WORLD

Java Yöntemlerini Parametrelerle Çağırma

Java yöntemlerini parametrelerle de çağırabilirsiniz. Aşağıdaki programda bunun nasıl yapıldığına dair bir örnek gösterilmektedir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (println (.indexOf "Hello World","e")))
(Example)

Yukarıdaki program aşağıdaki çıktıyı üretir. Yukarıdaki koddan "e" parametresini indexOf metoduna geçirdiğimizi görebilirsiniz. Yukarıdaki program aşağıdaki çıktıyı üretir.

Çıktı

1

Java Nesneleri Oluşturma

Clojure'da, Java'da yapılana benzer şekilde 'new' anahtar kelimesi kullanılarak nesneler oluşturulabilir.

Aşağıdaki programda bunun nasıl yapıldığına dair bir örnek gösterilmektedir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (def str1 (new String "Hello"))
   (println str1))
(Example)

Yukarıdaki program aşağıdaki çıktıyı üretir. Java'daki mevcut String sınıfından yeni bir nesne oluşturmak için 'new' anahtar kelimesini kullanabileceğimizi yukarıdaki koddan görebilirsiniz. Java'da yaptığımız gibi, nesneyi oluştururken değeri aktarabiliriz. Yukarıdaki program aşağıdaki çıktıyı üretir.

Çıktı

Hello

Aşağıda, Integer sınıfının bir nesnesini nasıl yaratabileceğimizi ve bunları normal Clojure komutlarında nasıl kullanabileceğimizi gösteren başka bir örnek verilmiştir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (def my-int(new Integer 1))
   (println (+ 2 my-int)))
(Example)

Yukarıdaki program aşağıdaki çıktıyı üretir.

Çıktı

3

İçe Aktar Komutu

Java kitaplıklarını ad alanına dahil etmek için import komutunu da kullanabiliriz, böylece sınıflara ve yöntemlere kolayca erişilebilir.

Aşağıdaki örnek, import komutunu nasıl kullanabileceğimizi göstermektedir. Örnekte, sınıfları içe aktarmak için import komutunu kullanıyoruz.java.util.stackkütüphane. Daha sonra stack sınıfının push ve pop yöntemini olduğu gibi kullanabiliriz.

Misal

(ns Project
   (:gen-class))
(import java.util.Stack)
(defn Example []
   (let [stack (Stack.)]
   (.push stack "First Element")
   (.push stack "Second Element")
   (println (first stack))))
(Example)

Yukarıdaki program aşağıdaki çıktıyı üretir.

Çıktı

First Element

Java Komutunu Kullanarak Kod Çalıştırma

Clojure kodu Java komutu kullanılarak çalıştırılabilir. Bunun nasıl yapılacağına dair sözdizimi aşağıdadır.

java -jar clojure-1.2.0.jar -i main.clj

Tüm Clojure tabanlı sınıfların JVM'ye yüklenebilmesi için Clojure jar dosyasını belirtmelisiniz. 'Main.clj' dosyası, yürütülmesi gereken Clojure kod dosyasıdır.

Yerleşik Java İşlevleri

Clojure, Java'nın yerleşik işlevlerinin çoğunu kullanabilir. Bazıları -

Math PI function- Clojure, Math yöntemini PI değerine kadar kullanabilir. Aşağıda örnek bir kod verilmiştir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (println (. Math PI)))
(Example)

Yukarıdaki kod aşağıdaki çıktıyı üretir.

Çıktı

3.141592653589793

System Properties- Clojure, sistem özelliklerini de sorgulayabilir. Aşağıda örnek bir kod verilmiştir.

Misal

(ns Project
   (:gen-class))
(defn Example []
   (println (.. System getProperties (get "java.version"))))
(Example)

Sistemdeki Java sürümüne bağlı olarak, karşılık gelen değer görüntülenecektir. Aşağıda örnek bir çıktı verilmiştir.

Çıktı

1.8.0_45