Muzhawir Amri

Back

Pada tulisan kali ini, kita akan belajar cara membuat variabel di Elixir. Karena Elixir adalah bahasa pemrograman fungsional, konsep variabelnya berbeda dari bahasa seperti C, terutama karena data di Elixir bersifat immutable. Di akhir tulisan, kita juga akan melihat bagaimana Elixir mengelola memori secara otomatis.

Binding - Membuat Variabel#

Elixir adalah bahasa dinamis. Artinya, kita tidak perlu menyebutkan tipe data secara eksplisit saat membuat variabel. Tipe data akan dikenali secara otomatis berdasarkan nilai yang kita berikan.

Proses memberi nilai ke variabel ini disebut binding, bukan assignment. Saat kita menulis monthly_salary = 5000000, kita sedang mengikat (bind) nama monthly_salary ke nilai 5000000. Nama variabel tersebut sekarang mereferensikan nilai itu. Contohnya:

iex> monthly_salary = 5000000
5000000

iex> monthly_salary  ❸
5000000
elixir

Penjelasan:

  • ❶ Mengikat (bind) nama monthly_salary ke nilai 5000000.
  • ❷ IEx menampilkan nilai 5000000 sebagai hasil dari operasi binding.
  • ❸ Mengecek isi variabel monthly_salary.
  • ❹ IEx mengembalikan nilai yang sudah diikat sebelumnya.

Setelah terikat, variabel bisa kita gunakan dalam ekspresi lain. Misalnya:

iex> monthly_salary * 12
60000000
elixir

Penamaan Variabel#

Nama variabel di Elixir harus diawali dengan huruf kecil (a–z) atau garis bawah (_). Setelah itu, kita bebas menambahkan huruf, angka (0–9), atau garis bawah:

# Contoh nama variabel yang valid:
valid_variable_name
also_valid_1
validButNotRecommended

# Contoh tidak valid:
NotValid
elixir

Selain itu, Elixir mendukung konvensi penamaan dengan tanda tanya (?) dan tanda seru (!). Tanda tanya biasa digunakan pada nama variabel yang mengembalikan nilai boolean, sedangkan tanda seru digunakan untuk menunjukkan bahwa variabel tersebut bisa memicu error (misalnya dengan melempar exception). Meskipun tidak wajib, konvensi ini sangat membantu pembacaan kode:

is_valid?
get_data!
elixir

Imutabilitas Data Di Elixir#

Karena Elixir adalah bahasa fungsional, semua data bersifat immutable, artinya tidak bisa diubah setelah dibuat. Jika kita ingin “mengubah” suatu nilai, sebenarnya kita membuat salinan baru dan menyimpannya di lokasi memori yang berbeda, sedangkan nilai lama tetap utuh dan tidak tersentuh.

Contoh paling umum dari immutability ini terlihat saat kita melakukan rebinding, yaitu mengikat variabel ke nilai baru tanpa mengubah nilai sebelumnya.

Rebinding - Memperbarui Nilai Variabel#

Rebinding adalah proses mengikat ulang sebuah variabel ke nilai baru tanpa mengubah nilai lama di memori. Contohnya:

iex> monthly_salary = 5000000
5000000

iex> monthly_salary ❷
5000000

iex> monthly_salary = 5123000
5123000

iex> monthly_salary ❹
5123000
elixir

Penjelasan:

  • ❶ Mengikat variabel monthly_salary ke nilai 5000000.
  • ❷ Memeriksa nilai yang telah diikat.
  • ❸ Melakukan rebind ke nilai 5123000.
  • ❹ Mengecek ulang nilai setelah rebind.

Saat kita melakukan rebind, nilai lama (5000000) tidak langsung dihapus. Ia tetap ada di memori, meskipun tidak ada lagi variabel yang mereferensikannya. Untuk mencegah sampah memori menumpuk, Elixir menggunakan manajemen memori otomatis.

Manajemen Memori Di Elixir#

Garbage collector (GC) adalah bagian dari runtime yang secara otomatis mendeteksi data yang sudah tidak lagi digunakan, seperti nilai 5000000 yang sudah tidak direferensikan setelah rebind. GC kemudian akan membebaskan memori yang ditempati data tersebut. Karena proses ini berjalan di balik layar, kita tidak perlu mengatur alokasi atau dealokasi memori secara manual. Hasilnya, penggunaan memori tetap efisien meskipun semua data di Elixir bersifat immutable.

Referensi#

  • Saša Jurić. (2024). Elixir In Action (3rd ed.). Manning Publications.