Pemrograman Elixir
Panduan komprehensif tentang pemrograman fungsional dan konkuren menggunakan Elixir. Mencakup transisi dari pemikiran berbasis objek ke pemikiran fungsional, pencocokan pola, imutabilitas, model aktor untuk konkurensi, serta membangun sistem terdistribusi yang andal dengan OTP.
Pelajaran
Gambaran Umum Kursus
📚 Ringkasan Konten
Panduan komprehensif tentang pemrograman fungsional dan konkuren menggunakan Elixir. Ini mencakup transisi dari pemikiran berbasis objek ke pemikiran fungsional, pemodelan pola, imutabilitas, model aktor untuk konkurensi, serta pembangunan sistem terdistribusi yang tangguh dengan OTP.
Kuasai seni membangun sistem konkuren yang tahan banting melalui keindahan pemrograman fungsional.
Penulis: Dave Thomas
Ucapan Terima Kasih: José Valim, Corey Haines, Bruce Tate, Jessica Kerr, Anthony Eden, Chad Fowler, Kim Shrier, Candace Cunningham, dan Potomac Indexing.
🎯 Tujuan Pembelajaran
- Membandingkan model transformasi data Elixir dengan pemrograman berbasis status konvensional.
- Mengonfigurasi shell interaktif Elixir (IEx) dan mengeksekusi kode Elixir melalui skrip serta kompilasi.
- Menerapkan operator pencocokan (
=), operator pin (^), dan wildcard (_) untuk mendekomposisi dan memvalidasi data. - Menjelaskan implikasi teoretis dan praktis dari imutabilitas terhadap kinerja dan manajemen memori.
- Mengidentifikasi dan menggunakan tipe bawaan Elixir, termasuk tipe Nilai, Sistem, dan Koleksi.
- Menerapkan aturan lingkup variabel dan ekspresi
withuntuk mengelola transformasi data kompleks. - Membuat dan memanggil fungsi anonim menggunakan notasi standar maupun notasi tangkap (
&). - Menerapkan fungsi bernama dalam modul menggunakan pemodelan pola dan rekursi untuk menangani logika kompleks.
- Menerapkan klausa penjaga dan parameter default untuk mengendalikan alur eksekusi fungsi.
- Mendekomposisi dan Membangun Daftar: Gunakan pola pencocokan kepala/tail untuk menjelajah dan membangun struktur daftar rekursif.
🔹 Pelajaran 1: Pengantar Elixir dan Pencocokan Pola
Gambaran Umum: Pelajaran ini memperkenalkan Elixir sebagai bahasa fungsional yang berpusat pada transformasi data, bukan mutasi status. Siswa akan belajar menavigasi lingkungan Elixir (IEx), mengompilasi dan menjalankan skrip, serta menguasai Pencocokan Pola—mekanisme dasar yang digunakan Elixir untuk pengikatan variabel dan alur kontrol.
Hasil Pembelajaran:
- Membandingkan model transformasi data Elixir dengan pemrograman berbasis status konvensional.
- Mengonfigurasi shell interaktif Elixir (IEx) dan mengeksekusi kode Elixir melalui skrip serta kompilasi.
- Menerapkan operator pencocokan (
=), operator pin (^), dan wildcard (_) untuk mendekomposisi dan memvalidasi data.
🔹 Pelajaran 2: Imutabilitas dan Dasar-Dasar Elixir
Gambaran Umum: Pelajaran ini mengeksplorasi filosofi dasar Elixir: imutabilitas. Siswa akan belajar bagaimana Elixir menangani data sebagai entitas yang tidak dapat diubah, manfaat kinerja dari pendekatan ini, serta berbagai tipe bawaan—mulai dari tipe nilai sederhana seperti atom dan rentang hingga koleksi kompleks seperti peta dan biner. Pelajaran berakhir dengan pembahasan mendalam tentang lingkup variabel dan ekspresi with yang kuat.
Hasil Pembelajaran:
- Menjelaskan implikasi teoretis dan praktis dari imutabilitas terhadap kinerja dan manajemen memori.
- Mengidentifikasi dan menggunakan tipe bawaan Elixir, termasuk tipe Nilai, Sistem, dan Koleksi.
- Menerapkan aturan lingkup variabel dan ekspresi
withuntuk mengelola transformasi data kompleks.
🔹 Pelajaran 3: Fungsi, Modul, dan Operator Pipa
Gambaran Umum: Pelajaran ini mengeksplorasi inti pemrograman Elixir: transformasi fungsional. Ini mencakup transisi dari fungsi anonim dan closure ke modul terstruktur dan fungsi bernama. Siswa akan belajar memanfaatkan pencocokan pola, rekursi, dan operator pipa untuk membuat kode yang ringkas, mudah dibaca, dan mudah dipelihara, sambil berinteraksi dengan VM Erlang di bawahnya.
Hasil Pembelajaran:
- Membuat dan memanggil fungsi anonim menggunakan notasi standar maupun notasi tangkap (
&). - Menerapkan fungsi bernama dalam modul menggunakan pencocokan pola dan rekursi untuk menangani logika kompleks.
- Menerapkan klausa penjaga dan parameter default untuk mengendalikan alur eksekusi fungsi.
🔹 Pelajaran 4: Daftar Rekursif dan Struktur Data
Gambaran Umum: Pelajaran ini membahas mekanisme dasar daftar Elixir melalui rekursi, khususnya fokus pada pola "Kepala dan Ekor" untuk memproses dan membangun data. Ini berlanjut ke struktur data kompleks—Map, Struct, dan Daftar Kunci—memberikan kerangka keputusan untuk memilih struktur yang tepat serta teknik lanjutan untuk memanipulasi data bersarang menggunakan modul Access dan teori sistem tipe Elixir.
Hasil Pembelajaran:
- Mendekomposisi dan Membangun Daftar: Gunakan pencocokan pola kepala/ekor untuk menjelajah dan membangun struktur daftar rekursif.
- Implementasikan Pola Tingkat Lanjut: Buat fungsi
mapdanreducekustom untuk mengubah atau mengagregasi data daftar. - Pilih Struktur Data yang Tepat: Bedakan antara Map, Struct, dan Daftar Kunci berdasarkan kebutuhan kinerja, urutan, dan integritas data.
🔹 Pelajaran 5: Enumerables, Streams, dan Pemrosesan String
Gambaran Umum: Pelajaran ini mengeksplorasi pendekatan ganda dalam pemrosesan koleksi di Elixir: modul Enum yang serakah dan modul Stream yang lambat dan komposibel. Ini juga memberikan pembahasan mendalam tentang transformasi data melalui komprehensi serta mekanisme internal string Elixir, membedakan antara daftar karakter (dengan kutip tunggal) dan biner (dengan kutip ganda). Siswa akan belajar memproses struktur data kompleks, menangani data tak hingga, serta melakukan ekstraksi bit tingkat rendah.
Hasil Pembelajaran:
- Membedakan antara evaluasi serakah dan lambat saat memproses koleksi.
- Menggunakan komprehensi daftar dengan generator dan filter ganda untuk mengubah data dan mengekstrak informasi tingkat bit.
- Membedakan antara string dengan kutip tunggal (daftar karakter) dan kutip ganda (biner), serta menerapkan modul yang sesuai (List vs. String) untuk manipulasi.
🔹 Pelajaran 6: Alur Kendali, Proyek Mix, dan Alat Profesional
Gambaran Umum: Pelajaran ini membimbing pengembang dari menulis fungsi Elixir terisolasi menuju membangun, menguji, dan memantau aplikasi profesional berkualitas tinggi. Ini mencakup struktur kendali lanjutan (case, cond), siklus hidup proyek Mix (dari struktur direktori hingga eksekutable CLI), serta kumpulan alat profesional untuk debugging, pengujian berbasis properti, dan pemantauan server.
Hasil Pembelajaran:
- Menerapkan logika percabangan kompleks menggunakan
case,cond, dan penanganan ekspektasi. - Mengatur proyek Elixir menggunakan
Mix, mengelola dependensi eksternal sepertiHTTPoisondanPoison, serta mengkonfigurasi lingkungan aplikasi. - Mengembangkan suite pengujian yang kuat menggunakan
ExUnit,DocTest, dan pengujian berbasis properti denganStreamData.
🔹 Pelajaran 7: Konkurensi dan Node Terdistribusi
Gambaran Umum: Pelajaran ini mengeksplorasi transisi dari aplikasi Elixir satu proses menjadi sistem terdistribusi. Ini mencakup mekanisme penanganan pesan, persistensi proses melalui loop rekursif ekor, serta manajemen robust siklus hidup proses melalui link dan monitor. Akhirnya, pelajaran memperkenalkan model distribusi VM Erlang, mengajarkan cara menghubungkan node, mengamankannya dengan cookie, serta menangani I/O lintas jaringan.
Hasil Pembelajaran:
- Menerapkan proses berstatus dan persisten menggunakan rekursi ekor dan timeout pesan.
- Membangun pohon proses tahan gangguan menggunakan link (
spawn_link) dan monitor (spawn_monitor). - Mengonfigurasi dan menghubungkan node terdistribusi menggunakan konvensi penamaan, cookie keamanan, dan pendaftaran proses global.
🔹 Pelajaran 8: Dasar-Dasar OTP: Server dan Supervisor
Gambaran Umum: Pelajaran ini memperkenalkan kerangka kerja Open Telecom Platform (OTP) dalam ekosistem Elixir, khususnya fokus pada perilaku GenServer dan pola Supervisor. Siswa akan belajar membangun proses server yang tangguh dan berstatus, membedakan antara komunikasi sinkron dan asinkron, serta menerapkan pohon supervisi tahan gangguan yang secara otomatis mengelola siklus hidup proses.
Hasil Pembelajaran:
- Mendefinisikan komponen utama OTP dan menerapkan siklus hidup callback
GenServerstandar. - Membedakan dan menerapkan pola pesan sinkron (call) dan asinkron (cast).
- Mengonfigurasi dan menerapkan Supervisor untuk memantau proses pekerja dan menjaga keandalan sistem selama kegagalan.
🔹 Pelajaran 9: Arsitektur OTP Kompleks dan Manajemen Status
Gambaran Umum: Pelajaran ini beralih dari GenServer individu ke desain dan penerapan aplikasi OTP kompleks multi-komponen. Ini mencakup desain arsitektur pencari file duplikat bernama "Duper", mekanisme spesifikasi aplikasi OTP, serta teknik penerapan lanjutan termasuk pembaruan panas menggunakan Distillery. Selain itu, pelajaran mengeksplorasi alternatif manajemen status yang disederhanakan seperti Tasks dan Agents, memberikan kerangka untuk memilih alat yang tepat sesuai kebutuhan konkurensi tertentu.
Hasil Pembelajaran:
- Menganalisis kebutuhan aplikasi menggunakan kerangka lima pertanyaan untuk mengidentifikasi titik fokus dan karakteristik runtime.
- Membangun aplikasi OTP multi-server (Duper) yang menggunakan server khusus (Results, PathFinder, Gatherer) dan Dynamic Supervisors.
- Melakukan rilis kode dan pembaruan panas menggunakan Distillery, termasuk migrasi status melalui callback
code_change.
🔹 Pelajaran 10: Metaprogramming, Protokol, dan Keamanan Tipe
Gambaran Umum: Pelajaran ini mengeksplorasi ekstensibilitas lanjutan Elixir, fokus pada cara memanipulasi kode sebagai data melalui metaprogramming dan makro. Siswa akan belajar mencapai polimorfisme menggunakan Protokol dan Behaviours, mengatur sistem skala besar dengan proyek Umbrella, serta menerapkan penanganan kesalahan yang kuat. Akhirnya, pelajaran membahas menambahkan lapisan analisis statis menggunakan sistem tipe Elixir dan Dialyzer untuk memastikan kebenaran kode.
Hasil Pembelajaran:
- Menguasai penggunaan
quotedanunquoteuntuk menyuntikkan dan memanipulasi blok kode dalam makro. - Menerapkan Protokol dan Behaviours kustom untuk menciptakan struktur kode polimorfik dan dapat digunakan kembali.
- Membangun proyek Umbrella multi-aplikasi dan menerapkan Spesifikasi Tipe formal pada kode Elixir dinamis.