Memahami Elixir — Bagian 1: Dasar-Dasar Elixir

Steven Alexander Wen
SkyshiDigital
Published in
11 min readJul 24, 2023

Apa yang Akan Kita Bahas

Selamat datang di seri blog saya yang membahas tentang bahasa pemrograman Elixir! Dalam seri kali ini, saya akan membahas beberapa poin penting terkait dengan dasar-dasar Elixir, yaitu:

  1. Apa Itu Elixir?
  2. Cara Menginstall Elixir
  3. Dasar Elixir
  4. Latihan Penutup

1. Apa Itu Elixir?

Elixir merupakan sebuah bahasa pemrograman yang bersifat fungsional dan dinamis. Bahasa ini dibuat oleh José Valim dan dirilis pada tahun 2012. Elixir dibuat sedemikian rupa sehingga kompatibel dengan Erlang, yaitu sebuah bahasa pemrograman yang diciptakan untuk membangun aplikasi berskala besar.

Elixir juga menawarkan banyak sekali konsep-konsep yang menarik seperti konsep fault tolerance, high availability, dan banyak lagi lainnya yang membuat orang-orang ingin mempelajari bahasa pemrograman Elixir ini. Tidak hanya itu, meskipun pada saat ini Elixir belum sepopuler bahasa lainnya, permintaan akan pengembang Elixir terus meningkat karena banyak perusahaan teknologi yang menggunakan Elixir dalam pembangunan infrastrukturnya. Apabila kamu tertarik dalam mengetahui berapa gaji dari pengembang Elixir, anda dapat mengeceknya pada tautan ini

2. Cara Menginstall Elixir

Menginstall Elixir pada perangkat kamu sangatlah mudah. Kamu cukup mengikuti petunjuk penginstallan yang tertera pada dokumentasi resmi Elixir pada tautan ini. Namun, apabila kamu belum berniat untuk melakukan instalasi Elixir, kamu tidak perlu khawatir karena kamu dapat menggunakan online editor pada tautan ini.

Khusus bagi yang benar-benar baru dalam dunia pemrograman, sangat disarankan untuk menginstall Elixir pada perangkat kamu sehigga kamu dapat mengikuti apa yang saya lakukan secara step by step mengingat cara penulisan kode pada editor online bisa sedikit berbeda dengan yang akan saya gunakan di blog kali ini. Pada blog kali ini, saya berniat menggunakan IEX atau sering juga disebut sebagai Interactive Elixir Shell.

Setelah kamu berhasil melakukan instalasi Elixir, silahkan buka terminal anda lalu ketikkan iex. Setelah itu, akan muncul shell interaktif seperti berikut ini.

Sekarang, mari kita coba untuk mengeksekusi kode berikut ini dengan cara mengetikkannya pada shell lalu menekan enter.

iex> IO.puts "Hello World!"

Hasilnya akan terlihat seperti ini

Selamat! Kamu baru saja berhasil menjalankan kode Elixir pertama kamu.

3. Dasar Elixir

Selanjutnya, kita akan mempelajari dasar-dasar dari Elixir, khususnya bagian tipe data dan juga struktur data bawaan.

3.1. Tipe Data

Pada Elixir, tipe data terbagi menjadi integer, float, boolean, atom, dan string.

iex> 1        # integer
iex> 1.0 # float
iex> true # boolean
iex> :atom # atom
iex> "elixir" # string

3.1.1. String

String merupakan sebuah kumpulan karakter yang diapit oleh tanda kutip.

Pada IEX, silahkan ketikkan kode berikut ini

Apa yang barusan terjadi?

Pertama-tama, kita membuat variabel bernama “var” yang kemudian kita isi dengan kumpulan karakter (string) yang membentuk “Bahasa Elixir”. Setelah itu, “var” yang berisi “Bahasa Elixir” ini kita outputkan ke layar dengan menggunakan perintah IO.puts yang merupakan sebuah fungsi bawaan dari Elixir untuk mengoutputkan sesuatu pada layar.

Perlu diperhatikan bahwa variabel ini dapat digunakan untuk menyimpan tipe data apa pun.

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Kita ketahui bahwa perintah IO.puts merupakan sebuah perintah untuk mengoutputkan sesuatu pada layar dan sudah jelas bahwa kode tersebut bertujuan untuk mengoutputkan sebuah string pada layar. Namun, apakah #{var} pada kode tersebut? Di dalam Elixir, #{} biasanya digunakan ketika kita ingin memasukkan isi dari sebuah variabel ke dalam sebuah string. Dalam hal ini, kita memasukkan isi dari variabel “var” yaitu “Bahasa Elixir” ke dalam string “Saya sedang mempelajari “ sehingga dihasilkanlah “Saya sedang mempelajari Bahasa Elixir”. Proses ini disebut juga dengan interpolasi string atau string interpolation.

Selain interpolasi string, terdapat banyak operasi lain yang dapat anda gunakan pada tipe data string. Untuk mengetahui apa saja yang dapat dilakukan pada string secara lanjut, kamu dapat membaca dokumentasi resmi elixir pada tautan ini atau kamu juga dapat mengeksekusi kode di bawah ini untuk membaca seputar string pada IEX.

iex> h(String)

3.1.2. Numerik (Integer dan Float)

Tipe numerik terbagi menjadi dua, yaitu bilangan bulat (integer) dan bilangan desimal (float).

Pada IEX, silahkan ketikkan kode berikut ini

Apa yang barusan terjadi?

Kita berhasil membuat 2 buah variabel bernama “usia” yang berisi integer dengan nilai 25 dan “tinggi_badan” yang berisi float dengan nilai 173,5.

Kuis Dadakan?!

Apakah kamu masih ingat mengenai string interpolation yang kita bahas sebelumnya yang berfungsi untuk memasukkan isi dari sebuah variabel ke dalam sebuah string? Sekarang, kamu akan diberikan sebuah tugas praktik untuk menghasilkan “Dia berusia 25 tahun dan memiliki tinggi badan 173.5 cm” dengan menggunakan string interpolation memanfaatkan variabel “usia” dan “tinggi_badan” yang telah kita buat sebelumnya.

Apakah kamu berhasil menyelesaikan tugas praktik yang diberikan dengan baik? Saya harap kamu berhasil. Namun, apabila kamu tidak berhasil, berikut adalah kode untuk menghasilkan “Dia berusia 25 tahun dan memiliki tinggi badan 173.5 cm” dengan menggunakan string interpolation memanfaatkan variabel “usia” dan “tinggi_badan” yang telah kita buat sebelumnya.

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Kita baru saja berhasil melakukan operasi aritmetika pada IEX. Untuk operasi penjumlahan, pengurangan, dan perkalian sama seperti melakukan operasi pada kalkulator saja. Namun, beda halnya untuk pembagian. Pada pembagian, digunakan div(10,5) yang berarti 10 dibagi 5 sehingga menghasilkan 2. Pada modulo, digunakan rem(10,3) yang berarti sisa bagi dari operasi 10 bagi 3 sehingga menghasilkan 1.

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Perlu diketahui bahwa variabel pada Elixir bersifat “immutable”, yang berarti nilainya tidak dapat berubah setelah ditetapkan.

Pertama-tama, kita menetapkan variabel “usia” bernilai 25. Selanjutnya kita mengeksekusi usia + 10. Elixir kemudian menghitung nilai dari usia + 10, tetapi tidak mengubah nilai usia tersebut. Hal ini dapat dilihat ketika kita mengeksekusi IO.puts usia. Kemudian, kita mengeksekusi usia = usia + 10. Pada saat ini, Elixir membuat variabel baru bernama “usia” dengan isi nilai dari variabel “usia” yang kita buat sebelumnya ditambah dengan 10.

Begitulah kira-kira, jadi Elixir tidak mengubah nilai dari variabel yang sudah ditetapkan sebelumnya, melainkan membuat variabel baru.

Untuk penjelasan lanjutan mengenai tipe numerik ini, kamu dapat membaca dokumentasi resmi Elixir mengenai aritmatika dasar pada tautan ini atau mengeksekusi kode berikut

iex> h(Integer)
iex> h(Float)

3.1.3. Boolean

Boolean merupakan suatu tipe data yang merepresentasikan benar atau salah.

Pada IEX, silahkan ketikkan kode berikut ini

Apa yang barusan terjadi?

Simbol “==” menyatakan “apakah sama” dan simbol “!=” menyatakan “apakah tidak sama”. Pada gambar, dapat dilihat bahwa 2 == 2 menghasilkan true karena benar bahwa 2 merupakan 2, 5 == 9 menghasilkan false karena 5 bukan merupakan 9, 3 != 27 menghasilkan true karena benar bahwa 3 bukanlah 27.

Berikut adalah beberapa simbol yang digunakan dalam operasi boolean

==   : sama dengan
!= : tidak sama dengan
> : lebih dari
< : kurang dari
>= : lebih dari atau sama dengan
<= : kurang dari atau sama dengan

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Pada bahasan sebelumnya, kita mengetahui bahwa hasil 2 == 2 merupakan true dan 5==9menghasilkan false. Namun, hal yang janggal dari kode yang kita eksekusi merupakan simbol “&&”. Simbol “&&” ini merupakan sebuah operator logika yang berarti “dan”. Dengan demikian, kode kita dapat dibaca menjadi true and false, sehingga menghasilkan false. Untuk penjelasan tentang cara kerja operator logika, kamu dapat membaca slide pada tautan ini pada halaman ke 5.

Berikut adalah beberapa simbol yang merupakan operator logika

and  : operator logika AND
or : operator logika OR
not : operator logika NOT
&& : operator logika AND
|| : operator logika OR
! : operator logika NOT

Kamu pasti bertanya tanya, apa beda operator logika yang menggunakan alfabet dengan simbol kan? Operator logika dengan alfabet pada Elixir merupakan operator logika yang tidak ketat, artinya, ketika output sudah jelas, Elixir tidak akan menelusuri operasi lainnya secara lebih lanjut lagi. Misalnya pada true or false. Kita ketahui ketika menggunakan or, kita cukup memiliki satu nilai true saja sehingga Elixir tidak akan mengevaluasi argumen kedua (dalam kasus ini false). Sedangkan pada operator logika dengan simbol merupakan operator logika yang ketat, artinya, tidak peduli sejelas apa hasilnya, Elixir tetap akan menelusuri seluruh argumen pada operasi boolean. Kita ambil contoh yang sama true or false. Elixir telah mengetahui bahwa ini merupakan operasi or sederhana dan argumen pertama merupakan true. Akan tetapi, Elixir tetap mengevaluasi argumen selanjutnya.

3.1.4. Atom

Atom merupakan sebuah tipe data yang hanya ada pada Elixir, dapat juga dibilang keunikan dari Elixir dibandingkan dengan bahasa yang lainnya. Atom merupakan sebuah konstanta yang nilainya adalah nama atom itu sendiri. Atom ditulis dengan awalan kolon(:).

Berikut adalah kode sederhana untuk mendeklarasikan atom

Di dalam contoh di atas, :atom, :error, dan :sukses merupakan atom yang masing-masing nilainya adalah nama atom itu sendiri. Untuk benar-benar memahami atom sendiri, dibutuhkan tingkat pemahaman lebih lanjut. Oleh karena itu, penjelasan lanjutan mengenai atom tidak akan di bahas pada Bagian 1: Dasar-Dasar Elixir.

3.2. Stuktur Data Bawaan

Pada Elixir, struktur data bawaan terbagi menjadi list, tuple, dan map. Akan tetapi, pada bagian ini, fokus utamanya adalah list dan map saja karena dalam praktiknya, tuple jarang digunakan pada Elixir. Namun, apabila kamu tertarik untuk mempelajari mengenai tuple, kamu bisa membaca penjelasan lanjutan mengenai tuple pada tautan berikut ini.

iex> [1, 2, 3, "elixir"] # List
iex> {1, 2, 3} # Tuple
iex> %{"satu" => 1, "dua" => 2, "tiga" => 3} # Map

3.2.1. List

List pada Elixir dibuat dengan menggunakan tanda kurung siku. List dapat menyimpan tipe data apa pun termasuk list lainnya.

iex> [1, "dua", :tiga, [4.0, 5.0]]

Pada IEX, silahkan ketikkan kode berikut ini

Apa yang barusan terjadi?

Pertama-tama, kita berhasil dalam membuat sebuah list berisi kumpulan string “I”, “am”, “Judy”, “Sepid”. Selanjutnya, kita berhasil menghapus string [“Judy”, “Sepid”] pada list tersebut dengan menggunakan simbol --. Setelahnya, kita berhasil menambahkan string [“Steven”] pada list tersebut dengan menggunakan simbol ++.

Kuis Dadakan?!

Buatlah sebuah variabel bernama nama_ku dengan isi list kosong. Selanjutnya, tambahkanlah list tersebut dengan nama kalian per kata lalu hapus nama kalian per kata.

Apakah kamu berhasil menyelesaikan tugas praktik yang diberikan dengan baik? Saya harap kamu berhasil. Namun, apabila kamu tidak berhasil, berikut adalah kode untuk membuat sebuah variabel bernama nama_ku dengan isi list kosong yang kemudian list tersebut ditambahkan dengan nama per kata lalu nama pada list tersebut akan dihapus per kata.

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Pertama-tama, kita berhasil dalam membuat list berisi nilai. Kemudian, kita mengeksekusi kode List.first(random). Kode ini menghasilkan nilai pertama dari sebuah list (dikatakan juga head, bisa juga diperoleh dengan mengeksekusi kode hd(random)). Kemudian, kita mengeksekusi kode List.last(random). Kode ini menghasilkan nilai terakhir dari sebuah list (dikatakan juga last). Kemudian, kita mengeksekusi kode tl(random). Kode ini menghasilkan sebuah list yang berisi list yang nilai pertamanya dikecualikan (dikatakan juga tail). Untuk memahami lebih lanjut dari konsep head dan tail, kita bisa melihat ilustrasi gambar di bawah ini.

Untuk penjelasan lanjutan mengenai list, kamu dapat membaca dokumentasi resmi Elixir mengenai list pada tautan ini atau mengeksekusi kode berikut.

iex> h(List)

3.2.2. Map

Map merupakan sebuah struktur data yang memuat pasangan key-value. Jangan khawatir, penjelasan key-value akan dijelaskan pada penjelasan di bawah nanti, untuk saat ini, kita cukup tahu saja bahwa map ini berisi kumpulan dari key-value). Map dibuat dengan menggunakan kurung kurawal dengan diawali oleh simbol persen (%).

Map berfungsi untuk menyimpan data yang memerlukan akses cepat ke nilai tertentu berdasarkan key.

Pada IEX, silahkan ketikkan kode berikut ini

Apa yang barusan terjadi?

Pertama-tama, kita berhasil membuat sebuah map dengan isi “satu” => 1, “dua” => 2, “tiga” => 3. Sebelumnya, saya telah menyinggung mengenai key-value. Pada map yang kita buat ini, “satu”, “dua”, dan “tiga” adalah keys. Mereka digunakan untuk mengidentifikasi nilai-nilai pada Map. Nilai-nilai ini adalah value dari key. Mereka berkaitan, karena itulah cara tulisnya key-value, karena mereka berkaitan. key “satu” memiliki nilai 1, key “dua” memiliki nilai 2, dan key “tiga” memiliki nilai 3. Ketika kita mengeksekusi kode map1[“satu”] dan map1[“tiga”], kita mengakses value dari key yang kita tunjuk pada map tersebut. Ketika kita mengeksekusi Maps.key(map1), kita mengeluarkan semua key yang terdapat dalam map dalam bentuk sebuah list.

Selanjutnya, silahkan ketikkan kode berikut ini pada IEX

Apa yang barusan terjadi?

Pertama-tama, kita membuat map bernama “map1” dan “map2”. Selanjutnya, kita mengeksekusi kode Map.merge(map1, map2). Kode ini menggabungkan kedua buah map sehingga menghasilkan sebuah map yang berisi gabungan dari kedua map. Selanjutnya, kita mengeksekusi Map.put(map1, "lima", 5). Kode ini menambahkan “lima” => 5 ke dalam map 1. Selanjutnya, kita mengeksekusi Map.delete(map1, “satu”). Kode ini menghilangkan key-value dengan key “satu” pada map1.

Untuk penjelasan lanjutan mengenai map, kamu dapat membaca dokumentasi resmi Elixir mengenai map pada tautan ini atau mengeksekusi kode berikut.

iex> h(Map)

4. Latihan Penutup

Halo semuanya, tidak terasa, kita sudah berada pada bagian akhir dari seri blog “Memahami Elixir — Bagian 1” ini. Di akhir dari blog ini, saya telah menyiapkan sebuah latihan berupa soal tantangan menarik yang harapannya dapat meningkatkan pemahaman kamu mengenai Maps yang dibahas pada blog ini.

Pada latihan kali ini, kita akan membuat sebuah Map untuk memantau daftar belanjaan. Silahkan mengikuti alur yang saya berikan di bawah ini

  1. Pertama, kita akan memulai dengan membuat map kosong.
  2. Kemudian, kita mengisi map tersebut dengan key-value berupa pisang-5, apel-7, anggur-10, kecap-1, telur-20.
  3. Setelah mengisi map, kita kemudian memasuki toko pertama. Gunakan IO.puts untuk mencetak Memasuki Toko Pertama ataupun ketika memasuki toko lainnya.
  4. Di toko pertama, kita berhasil membeli 5 pisang dan 7 apel. Layaknya sebuah grocery tracker, karena kita telah memenuhi jumlah yang ingin kita beli pada pisang dan apel, kita akan menghapusnya dari daftar belanjaan kita.
  5. Selanjutnya, kita memasuki toko kedua. Di sini, kita berhasil membeli 10 anggur, 1 kecap, dan 12 telur. Karena kita telah memenuhi jumlah yang ingin kita beli pada anggur dan kecap, kita bisa menghapusnya dari daftar belanjaan kita. Namun, kita belum dapat menghapus telur dari daftar belanjaan kita karena jumlah telur yang dibeli belum memenuhi jumlah yang diinginkan.
  6. Selanjutnya, kita memasuki toko ketiga. Di sini, kita berhasil membeli 8 buah telur. Karena jumlah telur yang dibeli sudah memenuhi jumlah yang diinginkan, kita dapat menghapus telur dari daftar belanjaan.

Jawaban dari latihan penutup ini akan disajikan dalam blog bagian kedua yang akan segera hadir. Jadi, tetaplah terhubung dan pantau blog saya untuk mendapatkan jawabannya.

Kita telah mencapai akhir dari blog tutorial ini. Saya harap kamu menikmati tutorial mengenai dasar-dasar Elixir ini. Terima kasih telah mengikuti sampai akhir dan sampai jumpa di bagian berikutnya!

--

--