Clojure adalah Lisp fungsional yang berjalan di atas JVM dan menjadikan data sebagai medium utama pemrogramannya. Jalur ini membahas bahasa tersebut secara berurutan, mulai dari bentuk bahasa dan abstraksi seq, pemrograman fungsional, pengelolaan state, interop Java, hingga aplikasi web berbasis Ring. Prasyaratnya berupa Java 21, Clojure CLI 1.12, dan terminal, dan seluruh contoh pada jalur ini dieksekusi pada lingkungan tersebut. Gaya kerja yang digunakan adalah rekayasa berbasis REPL, yaitu menumbuhkan kode dari eksperimen yang dievaluasi secara langsung.
Clojure
Jalur pemrograman Clojure dari REPL pertama hingga membangun layanan web nyata: data immutable, pemrograman fungsional, interop Java, dan pengelolaan state.
0/0 selesai
Modul pembuka: apa itu Clojure, penyiapan lingkungan kerja, dan filosofi pengembangan berbasis REPL.
- Apa itu Clojure?Mengenal Clojure sebagai Lisp fungsional di atas JVM yang berorientasi data dan bertipe dinamis.
- PenyiapanMenyiapkan Java 21, Clojure CLI dengan deps.edn, serta editor yang terhubung ke REPL.
- Filosofi REPL-firstMemahami REPL sebagai tempat utama menumbuhkan kode Clojure secara interaktif sejak hari pertama.
Modul bentuk bahasa: s-expression, skalar, koleksi inti, dan penamaan nilai dengan def serta let.
- S-expression dan EvaluasiMembaca s-expression, memahami aturan evaluasi Clojure, serta quoting kode sebagai data.
- Skalar dan KeywordMengenal angka, string, nil, boolean, dan keyword sebagai penanda enumerasi.
- Vector dan ListMemahami vector dan list sebagai koleksi berurutan beserta pemilihan penggunaannya.
- Map dan SetMenggunakan map dan set sebagai tulang punggung data Clojure, termasuk varian terurut.
- def, let, dan LocalMenamai nilai dengan def dan let, memahami lingkup leksikal dan shadowing.
Modul seq dan laziness: abstraksi sekuens, pipeline map-filter-reduce, dan perilaku evaluasi tunda.
- Abstraksi SeqMemahami abstraksi seq sebagai dasar kerja first dan rest atas sumber sekuensial apa pun.
- map, filter, reduceMenyusun pipeline transformasi data dengan map, filter, dan reduce sebagai gaya utama.
- Lazy SequenceMenggunakan lazy sequence seperti range, repeat, dan iterate yang direalisasikan tepat sebagaimana diminta.
- Jebakan LazinessMengenali jebakan laziness: menahan head, chunking, dan perilaku memori seq tak terbatas.
- into dan Saudara EagerMenggunakan into dan kolektor eager seperti mapv ketika evaluasi penuh lebih tepat.
Modul pola fungsional: destructuring, rekursi aman stack, komposisi orde tinggi, dan threading macro.
- DestructuringMengikat nilai secara sekuensial dan asosiatif dengan destructuring, :as, dan default :or.
- Rekursi di ClojureMenulis rekursi yang aman terhadap stack menggunakan recur dan loop.
- Komposisi Orde TinggiMenyusun fungsi dengan comp, partial, apply, dan kawan-kawannya.
- Kefasihan Threading MacroMenata aliran data dengan threading macro thread-first, thread-last, as->, dan some-> dalam praktik.
Modul kedalaman fungsional: transducer, fungsi variadik, closure, dan multi-method.
- TransducerMelepas kopling transformasi dari konteks koleksi dengan menyusun fungsi langkah.
- Fungsi VariadikMendefinisikan fungsi variadik dengan argumen rest dan dispatch multi-arity.
- Closure dan LingkupMemahami closure yang menangkap lingkungan leksikal melalui contoh klasik counter.
- Multi-methodMendispatch perilaku atas nilai dengan multi-method sebagai polimorfisme tanpa kelas.
Modul state dan konkurensi: model nilai versus identitas, atom, ref dengan STM, serta agent dan var.
- Model StateMemahami model nilai versus identitas serta waktu sebagai rangkaian nilai beruntun.
- AtomMengelola state independen sinkron dengan atom, swap!, dan validator.
- Ref dan STMMengoordinasikan perubahan state antar ref melalui transaksi STM dosync, alter, dan commute.
- Agent dan VarMenjalankan perubahan state asinkron dengan agent serta mengikat ulang var secara dinamis.
Modul interop Java: pemanggilan Java, implementasi interface, deftype dan defrecord, serta protocol.
- Memanggil JavaMemanggil metode, field, dan konstruktor Java dari Clojure dengan sintaks titik.
- Mengimplementasikan InterfaceMengimplementasikan interface Java secara anonim dengan proxy dan reify.
- deftype dan defrecordMembuat tipe host konkret dengan deftype dan record bernilai mirip map dengan defrecord.
- ProtocolMendispatch polimorfik atas tipe dengan protocol dan perluasan tanpa pewarisan.
Modul macro: kode sebagai data, penulisan macro dengan defmacro, dan pertimbangan kapan macro tidak perlu.
- Kode sebagai Data, Sekali LagiMemahami quoting, syntax-quote, unquote, dan unquote-splicing pada kode sebagai data.
- Menulis MacroMenulis macro dengan defmacro, membaca ekspansinya, dan menjaga higiene lewat gensym.
- Kapan Tidak Menulis MacroMenimbang kapan macro tidak diperlukan dan fungsi biasa menjadi pilihan yang lebih tepat.
Modul spec dan perkakas: spec.alpha, testing generatif, malli, serta perkakas proyek berbasis deps.edn.
- spec.alphaMendeskripsikan data dan fungsi dengan spec.alpha melalui conform, valid, dan explain.
- Testing GeneratifMenguji properti secara generatif dengan test.check yang menghasilkan data dari spec.
- Pengenalan MalliMengenal malli sebagai alternatif schema berbasis data yang berorientasi performa.
- Perkakas ProyekMengorganisasi proyek dengan deps.edn, tools.build, dan nREPL, dengan Leiningen sebagai konteks warisan.
Modul aplikasi web dan asinkron: Ring, reitit, http-kit, core.async, dan ClojureScript dengan shadow-cljs.
- Fundamental RingMemahami handler, request, response, dan middleware sebagai fundamental Ring.
- Routing dengan ReititMenyusun rute berbasis data dengan reitit, dari pohon rute hingga coercion.
- Server http-kitMenjalankan server http-kit dengan throughput tinggi dan mengenal dasar WebSocket.
- core.asyncMenggunakan channel dan go block core.async serta membedakan parking dan blocking.
- ClojureScript dengan shadow-cljsMengompilasi ClojureScript ke JavaScript dengan shadow-cljs, integrasi npm, dan hot reload.
Modul penutup: pemilihan proyek dan desain data-first sebagai bekal membangun aplikasi Clojure nyata.
- Pemilihan ProyekMemilih dan merumuskan proyek Clojure yang layak dikerjakan, dari antrean pekerjaan hingga dasbor analitik.
- Desain Data-firstMerancang schema, batasan, dan pilihan state sebelum menulis kode aplikasi.