Daftar Isi
-
Paradigma Pemrograman Fungsional
- Imperative Programming
- Declarative Programming
- Object-Oriented Programming (OOP)
- Functional Programming (FP)
- Paradigma yang Digunakan Erlang dan Elixir
- Prinsip Dasar Pemrograman Fungsional
-
Platform Pengembangan Erlang
- Sistem Yang Selalu Tersedia
- Konkurensi Pada Erlang
- Platform Pengembangan Yang Lengkap
- Referensi
Paradigma Pemrograman Fungsional
Setiap bahasa pemrograman dibangun di atas satu atau lebih paradigma pemrograman, yaitu cara berpikir yang membentuk bagaimana kita menulis kode, mengelola data, dan menyusun solusi. Memahami paradigma ini membantu kita memilih pendekatan yang paling tepat untuk menyelesaikan suatu masalah.
Mari kita bahas beberapa paradigma yang paling umum digunakan.
Imperative Programming
Paradigma *imperative* adalah cara menulis program dengan memberikan instruksi langkah demi langkah kepada komputer tentang bagaimana suatu tugas harus diselesaikan. Dalam pendekatan ini, kita menentukan urutan tindakan yang harus dilakukan secara rinci dari awal hingga akhir.
Contohnya dalam kode Python:
total = 0
for i in range(5):
total += i
Kode ini menjumlahkan angka dari 0 sampai 4. Setiap langkah dijabarkan secara langsung: inisialisasi, perulangan, dan penjumlahan nilai. Bahasa seperti, Python, C, dan Java sangat mendukung pendekatan ini.
Declarative Programming
Paradigma *declarative* adalah cara menulis program dengan menyatakan apa yang ingin dicapai tanpa memikirkan bagaimana mencapainya. Kita cukup mendefinisikan tujuan, dan biarkan sistem yang mengurus detail implementasinya di belakang layar.
Contohnya seperti kode SQL berikut:
SELECT * FROM users WHERE is_active = 1;
Kita tidak perlu menjelaskan bagaimana data diambil atau disaring satu per satu, database engine akan menangani semuanya. Kita cukup menyatakan bahwa kita ingin semua pengguna yang aktif. Contoh lain dari pendekatan deklaratif bisa ditemukan pada HTML atau regex.
Object-Oriented Programming (OOP)
Paradigma *object-oriented* adalah cara menulis program dengan membagi aplikasi menjadi objek, yang masing-masing menyimpan data (state) dan menyediakan function–function (method) untuk memprosesnya. Objek-objek ini saling berinteraksi membentuk logika aplikasi.
Contohnya seperti kode Java berikut:
class Car {
String brand;
void moveForward() {
System.out.println("Moving Forward --->");
}
}
Car myCar = new Car();
myCar.moveForward();
Di sini kita mendefinisikan Car
sebagai class, lalu membuat objek myCar
yang bisa menjalankan function moveForward
. Pendekatan ini mempermudah pengorganisasian kode dengan membungkus data dan logika ke dalam satu entitas. Java, Python, dan JavaScript adalah contoh bahasa yang sangat mendukung paradigma ini.
Functional Programming (FP)
Paradigma *functional* adalah cara menulis program dengan membangun aplikasi dari banyak function kecil yang bisa saling dirangkai. Setiap function bertugas untuk mengolah data dan menghasilkan output, yang kemudian dapat diteruskan ke function lainnya untuk diproses lebih lanjut.
Contohnya dalam kode Elixir:
numbers = [1, 2, 3, 4, 5]
numbers
|> Enum.filter(fn x -> rem(x, 2) == 0 end)
|> Enum.map(fn x -> x * 2 end)
Cuplikan kode di atas menyaring angka genap dari daftar, lalu menggandakannya. Transformasi data mengalir dari satu function ke function berikutnya.
Pendekatan ini mendorong gaya pemrograman yang bersih, modular, dan mudah diuji. Bahasa seperti Erlang dan Elixir dirancang untuk bekerja dengan paradigma ini.
Paradigma yang Digunakan Erlang dan Elixir
Erlang dan Elixir menggabungkan dua paradigma utama:
- Declarative – Kita fokus menyatakan apa yang ingin dicapai, dan membiarkan runtime menentukan cara terbaik untuk mengeksekusinya.
- Functional – Program dibangun dari function–function kecil yang bisa dirangkai untuk membentuk logika aplikasi yang kompleks.
Kombinasi keduanya menghasilkan gaya penulisan kode yang ringkas, modular, dan mudah diuji. Pendekatan ini sangat cocok untuk membangun sistem berskala besar yang membutuhkan keandalan tinggi, seperti sistem telekomunikasi, layanan real-time, dan aplikasi yang berjalan terus-menerus tanpa henti.
Prinsip Dasar Pemrograman Fungsional
Berikut adalah beberapa prinsip dasar dalam pemrograman fungsional:
- Immutability – Dalam paradigma ini, data bersifat immutable, artinya tidak bisa diubah setelah dibuat. Jika kita ingin mengubah nilainya, sebenarnya kita membuat salinan baru dengan isi yang telah dimodifikasi. Pendekatan ini dikenal sebagai data transformation, bukan modification. Sifat immutability membantu kita menghindari banyak bug akibat perubahan data yang tak terduga, dan membuat alur data dalam program lebih mudah ditelusuri.
- Pure function – Pure function selalu menghasilkan output yang sama untuk input yang sama. Ia tidak bergantung pada data di luar dirinya, dan tidak mengubah apa pun di luar dirinya juga. function seperti ini tidak melakukan input/output, tidak mengakses variabel global, dan tidak menimbulkan efek samping. Karena sifatnya yang murni dan dapat diprediksi, pure function cenderung lebih mudah dipahami, diuji, dan dirawat.
- First-class function – Dalam pemrograman fungsional, function dianggap sebagai nilai biasa. Artinya, kita bisa memperlakukan function seperti data lainnya: menyimpannya ke dalam variabel, mengirimkannya sebagai argumen ke function lain, atau mengembalikannya sebagai hasil dari sebuah function. Dengan pendekatan ini, kita bisa membangun logika program dari potongan-potongan kecil yang fleksibel dan bisa disusun ulang. Hasilnya adalah kode yang lebih bersih, modular, dan mudah dikembangkan.
Platform Pengembangan Erlang
Sebelum mempelajari pemrograman Elixir, kita perlu memahami platform Erlang terlebih dahulu. Kenapa? Karena Elixir berjalan di atas Erlang, dan tanpa platform ini, Elixir tidak bisa berfungsi.
Erlang adalah platform pengembangan yang dikembangkan oleh Ericsson, perusahaan telekomunikasi asal Swedia, pada pertengahan 1980-an. Tujuan awalnya adalah untuk membangun sistem jaringan telepon yang dapat terus berjalan tanpa henti, bahkan dalam kondisi ekstrem seperti volume panggilan yang sangat tinggi, bug perangkat lunak yang tidak terduga, atau pembaruan perangkat keras dan perangkat lunak. Dengan kata lain, sistem harus tetap berfungsi meskipun menghadapi berbagai tantangan.
Nama “Erlang” berasal dari singkatan Ericsson Language, dan dikembangkan oleh tiga tokoh utama: Joe Armstrong, Robert Virding, dan Mike Williams. Meskipun awalnya hanya digunakan di dalam perusahaan, Erlang akhirnya dirilis sebagai perangkat lunak open source pada tahun 1998. Sejak itu, Erlang telah digunakan di berbagai industri, termasuk telekomunikasi, perbankan, pengembangan gim multiplayer, dan sistem real-time.
Keputusan desain yang mendasari Erlang menjadikannya platform yang sangat tangguh untuk membangun sistem yang selalu tersedia (highly available), mampu menangani ribuan hingga jutaan proses secara bersamaan (concurrent), dan menyediakan ekosistem pengembangan yang lengkap. Inilah yang menjadi dasar utama dari Elixir dan akan kita bahas lebih lanjut di bagian berikutnya.
Sistem Yang Selalu Tersedia
Joe Armstrong, salah satu pencipta Erlang, pernah menyatakan dalam sebuah wawancara dengan Rackspace pada tahun 2013 bahwa “Jika Java adalah tulis sekali, jalankan di mana saja, maka Erlang adalah tulis sekali, jalankan selamanya.” Pernyataan ini menggambarkan tujuan desain Erlang untuk menciptakan sistem yang dapat berjalan terus-menerus dan tetap tersedia meskipun menghadapi masalah yang tak terduga. Untuk mewujudkan tujuan ini, Joe Armstrong dan rekan-rekannya merancang Erlang dengan memenuhi beberapa kriteria berikut:
- Toleransi terhadap kesalahan (Fault Tolerant): Erlang dirancang untuk memastikan sistem tetap berjalan meskipun terjadi gangguan, seperti kegagalan perangkat lunak atau perangkat keras. Ketika kesalahan terjadi, sistem dapat pulih secara otomatis dan terus beroperasi tanpa memerlukan intervensi manual.
- Skalabilitas (Scalability): Erlang memungkinkan sistem untuk mengembangkan kapasitasnya tanpa perlu melakukan reboot. Ini memudahkan penyesuaian dengan peningkatan beban kerja tanpa mengganggu operasi yang sedang berjalan.
- Sistem Terdistribusi (Distributed System): Erlang mendukung distribusi operasi sistem ke berbagai mesin, sehingga mengurangi risiko single point of failure yang dapat menghentikan seluruh sistem jika salah satu komponennya gagal.
- Responsif (Responsiveness): Sistem Erlang dirancang untuk menangani beban berat dan permintaan yang tinggi dengan cepat, bahkan dalam situasi yang membutuhkan respons mendadak, seperti volume panggilan telepon yang besar dalam waktu singkat.
- Pembaruan secara langsung (Live Update): Erlang memungkinkan pembaruan sistem dilakukan tanpa mematikan server. Ini meminimalkan waktu henti dan memastikan layanan tetap tersedia selama proses pembaruan.
Konkurensi Pada Erlang
Erlang dirancang untuk menangani sistem dengan kebutuhan konkurensi yang sangat tinggi, seperti mengelola ribuan hingga jutaan proses secara bersamaan. Alih-alih menggunakan thread atau process dari sistem operasi, Erlang menggunakan konsep yang disebut Erlang Process. Proses ini sangat ringan dan efisien, memungkinkan skalabilitas tinggi tanpa membebani sistem. Semua proses dijalankan pada mesin virtual BEAM, yang memiliki penjadwalan internal untuk mendistribusikan proses secara optimal di berbagai core CPU.
Keunggulan utama dari Erlang Process adalah isolasi memori antar proses. Setiap proses berjalan secara independen, sehingga kegagalan pada satu proses tidak akan memengaruhi proses lainnya. Erlang juga dilengkapi dengan mekanisme deteksi dan pemulihan otomatis yang memastikan sistem tetap stabil dan dapat pulih dengan cepat ketika terjadi kesalahan.
Untuk komunikasi antar proses, Erlang menggunakan message passing secara asinkron. Metode ini menghindari kebutuhan untuk sinkronisasi kompleks antar proses, yang sering kali memperlambat kinerja. Dengan pendekatan ini, sistem dapat berjalan lebih efisien dan responsif.
Selain itu, Erlang memiliki manajemen input/output yang efisien dan sistem pengelolaan garbage collection terpisah untuk setiap proses. Hal ini memungkinkan sistem tetap responsif meskipun berada di bawah beban kerja yang tinggi.
Platform Pengembangan Yang Lengkap
Erlang lebih dari sekadar bahasa pemrograman; ia adalah platform pengembangan lengkap yang mencakup empat komponen utama:
- Bahasa Pemrograman Erlang: Erlang adalah bahasa pemrograman functional yang dirancang efisien untuk aplikasi dengan kebutuhan konkurensi tinggi. Kode Erlang dikompilasi menjadi bytecode yang berjalan di mesin virtual BEAM, memungkinkan aplikasi untuk berjalan di berbagai platform dengan kinerja yang konsisten.
- Mesin Virtual BEAM: BEAM adalah mesin virtual yang mengelola proses secara efisien dan terisolasi. Proses yang berjalan di BEAM tidak saling mengganggu dan dapat berkomunikasi satu sama lain secara cepat. BEAM juga mengatur beban kerja untuk memastikan responsivitas sistem tetap terjaga, bahkan di bawah beban tinggi.
- Kerangka Kerja Open Telecom Platform (OTP): OTP adalah kerangka kerja yang menyederhanakan pengembangan aplikasi dengan Erlang. Kerangka ini mencakup fitur-fitur penting seperti manajemen konkurensi, distribusi proses, deteksi kesalahan, dan pembaruan kode. OTP sering dianggap sebagai bagian tidak terpisahkan dari Erlang dan dikenal dengan nama Erlang/OTP.
- Alat Pengembangan: Erlang menyediakan berbagai alat untuk memudahkan proses pengembangan, seperti shell interaktif dan alat manajemen aplikasi yang terhubung langsung dengan instance BEAM. Alat-alat ini mendukung berbagai sistem operasi dan memungkinkan penerapan aplikasi Erlang secara fleksibel di berbagai platform.
Sebagai proyek open-source, Erlang tersedia secara bebas dan dapat diakses melalui situs resmi atau repositori GitHub Erlang/OTP. Ericsson, yang memegang peranan penting dalam pengembangan awal Erlang, terus berkontribusi dalam pengembangan dan merilis versi baru secara rutin.
Referensi
- IONOS Editorial Team. (2021, May 21). Imperative Programming. https://www.ionos.com/digitalguide/websites/web-development/imperative-programming
- Federico Pereiro. (n.d.). Declarative Programming: Is It A Real Thing? Diakses Mei 23, 2024, dari https://www.toptal.com/software/declarative-programming
- Saša Jurić. (2024). Elixir In Action (3rd ed.). Manning Publications.