Clojure - Sintaks Dasar

Untuk memahami sintaks dasar Clojure, pertama-tama mari kita lihat program Hello World sederhana.

Hello World sebagai Program Lengkap

Tulis 'Halo Dunia' dalam program Clojure lengkap. Berikut adalah contohnya.

Contoh

(ns clojure.examples.hello
   (:gen-class))
(defn hello-world []
   (println "Hello World"))
(hello-world)

Hal-hal berikut perlu diperhatikan tentang program di atas.

  • Program tersebut akan ditulis dalam sebuah file bernama main.clj. Ekstensi 'clj' adalah nama ekstensi untuk file kode clojure. Dalam contoh di atas, nama file disebut main.clj.

  • Kata kunci 'defn' digunakan untuk mendefinisikan suatu fungsi. Kami akan melihat fungsi secara rinci di bab lain. Tapi untuk saat ini, ketahuilah bahwa kita sedang membuat fungsi yang disebut helloworld, yang akan memiliki kode Clojure utama kita.

  • Dalam kode Clojure kami, kami menggunakan pernyataan 'println' untuk mencetak "Hello World" ke output konsol.

  • Kami kemudian memanggil fungsi hello-world yang pada gilirannya menjalankan pernyataan 'println'.

Program di atas menghasilkan keluaran sebagai berikut.

Keluaran

Hello World

Bentuk Umum Pernyataan

Bentuk umum pernyataan apa pun perlu dievaluasi dalam tanda kurung kurawal seperti yang ditunjukkan pada contoh berikut.

(+ 1 2)

Dalam contoh di atas, seluruh ekspresi diapit oleh tanda kurung. Output dari pernyataan di atas adalah 3. Operator + bertindak seperti fungsi di Clojure, yang digunakan untuk penambahan angka. Nilai 1 dan 2 dikenal sebagai parameters to the function.

Mari kita perhatikan contoh lain. Dalam contoh ini, 'str' adalah operator yang digunakan untuk menggabungkan dua string. String "Halo" dan "Dunia" digunakan sebagai parameter.

(str "Hello" "World")

Contoh

Jika kita menggabungkan dua pernyataan di atas dan menulis sebuah program, maka akan terlihat seperti berikut.

(ns clojure.examples.hello
   (:gen-class))
(defn Example []
   (println (str "Hello World"))
   (println (+ 1 2)))
(Example)

Keluaran

Program di atas menghasilkan keluaran sebagai berikut.

Hello World
3

Namespaces

Namespace digunakan untuk menentukan batas logis antara modul yang ditentukan di Clojure.

Namespace Saat Ini

Ini mendefinisikan namespace saat ini di mana kode Clojure berada.

Sintaksis

*ns*

Contoh

Di jendela perintah REPL jalankan perintah berikut.

*ns*

Keluaran

Ketika kita menjalankan perintah di atas, output akan berubah tergantung pada namespace saat ini. Berikut adalah contoh output. Namespace dari kode Clojure adalah -

clojure.examples.hello

(ns clojure.examples.hello
   (:gen-class))
(defn Example []
   (println (str "Hello World"))
   (println (+ 1 2)))
(Example)

Memerlukan Pernyataan dalam Clojure

Kode Clojure dikemas dalam perpustakaan. Setiap pustaka Clojure termasuk dalam namespace, yang serupa dengan paket Java. Anda dapat memuat perpustakaan Clojure dengan pernyataan 'Membutuhkan'.

Sintaksis

(require quoted-namespace-symbol)

Contoh

Berikut adalah contoh penggunaan pernyataan ini.

(ns clojure.examples.hello
   (:gen-class))
(require ‘clojure.java.io’)
(defn Example []
   (.exists (file "Example.txt")))
(Example)

Pada kode di atas, kami menggunakan kata kunci 'require' untuk mengimpor namespace clojure.java.io yang memiliki semua fungsi yang diperlukan untuk fungsionalitas input / output. Karena kami tidak memiliki pustaka yang diperlukan, kami dapat menggunakan fungsi 'file' dalam kode di atas.

Komentar di Clojure

Komentar digunakan untuk mendokumentasikan kode Anda. Komentar baris tunggal diidentifikasi dengan menggunakan ;; di posisi manapun dalam antrean. Berikut adalah contohnya.

Contoh

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println "Hello World"))
(Example)

Pembatas

Dalam Clojure, pernyataan dapat dipisahkan atau dibatasi dengan menggunakan kurung kurawal atau kurung siku.

Contoh

Berikut adalah dua contoh.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println (+ 1 2 3)))
(Example)

Keluaran

Program di atas menghasilkan keluaran sebagai berikut.

6

Contoh

Berikut adalah contoh lainnya.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println [+ 1 2 3]))
(Example)

Keluaran

Program di atas menghasilkan keluaran sebagai berikut.

[#object[clojure.core$_PLUS_ 0x10f163b "clojure.core$_PLUS_@10f163b"] 1 2 3]

Spasi putih

Spasi putih dapat digunakan di Clojure untuk memisahkan berbagai komponen pernyataan untuk kejelasan yang lebih baik. Ini dapat dilakukan dengan bantuan operator koma (,).

Misalnya, dua pernyataan berikut adalah setara dan output dari kedua pernyataan tersebut adalah 15.

(+ 1 2 3 4 5)
(+ 1, 2, 3, 4, 5)

Meskipun Clojure mengabaikan koma, terkadang ia menggunakannya untuk mempermudah pemrogram membaca.

Misalnya, jika Anda memiliki peta hash seperti berikut (def a-map {: a 1: b 2: c 3}) dan menanyakan nilainya di jendela REPL, Clojure akan mencetak keluaran sebagai {: a 1, : b 2,: c 3}.

Hasilnya lebih mudah dibaca, terutama jika Anda melihat data dalam jumlah besar.

Simbol

Di Clojure, simbol setara dengan pengidentifikasi dalam bahasa pemrograman lain. Tetapi tidak seperti bahasa pemrograman lainnya, compiler melihat simbol sebagai nilai string yang sebenarnya. Karena simbol adalah nilai, simbol dapat disimpan dalam koleksi, diteruskan sebagai argumen ke suatu fungsi, dll., Sama seperti objek lainnya.

Simbol hanya boleh berisi karakter alfanumerik dan '* +! /. : - _? ' tetapi tidak boleh dimulai dengan angka atau titik dua.

Berikut adalah contoh simbol yang valid.

tutorial-point!
TUTORIAL
+tutorial+

Struktur Proyek Clojure

Akhirnya mari kita bicara tentang struktur proyek tipikal untuk proyek Clojure. Karena kode Clojure berjalan pada mesin virtual Java, sebagian besar struktur proyek dalam Clojure mirip dengan yang Anda temukan dalam proyek java. Berikut adalah snapshot dari contoh struktur proyek di Eclipse untuk proyek Clojure.

Berikut hal-hal penting yang perlu diperhatikan tentang struktur program di atas.

  • demo_1 - Ini adalah paket tempat file kode Clojure ditempatkan.

  • core.clj - Ini adalah file kode Clojure utama, yang akan berisi kode untuk aplikasi Clojure.

  • Folder Leiningen berisi file seperti clojure-1.6.0.jar yang diperlukan untuk menjalankan aplikasi berbasis Clojure.

  • File pom.properties akan berisi informasi seperti groupId, artifactId dan versi proyek Clojure.

  • File project.clj berisi informasi tentang aplikasi Clojure itu sendiri. Berikut adalah contoh konten file proyek.

(defproject demo-1 "0.1.0-SNAPSHOT"
   :description "FIXME: write description"
   :url "http://example.com/FIXME"
   :license {
      :name "Eclipse Public License"
      :url "http://www.eclipse.org/legal/epl-v10.html"
   }
   :dependencies [[org.clojure/clojure "1.6.0"]])