Muzhawir Amri

Back

Memulai Dan Menulis Ekspresi Di IEx#

IEx (Interactive Elixir) adalah REPL bawaan Elixir yang memungkinkan kita menjalankan kode secara langsung di terminal. Lewat IEx, kita bisa mengeksplorasi fitur bahasa, membaca dokumentasi, melakukan debugging, dan banyak lagi, semuanya dalam sesi yang interaktif. Karena sudah menjadi bagian dari Elixir, kita tidak perlu menginstal apa pun untuk mulai menggunakannya.

Memulai Sesi IEx dan Mengevaluasi Ekspresi#

Untuk memulai sesi, cukup jalankan perintah iex di terminal:

$ iex Erlang/OTP 26 [erts-14.0] [source] [64-bit] [smp:20:20] [ds:20:20:10]

Interactive Elixir (1.15.0) - press Ctrl+C to exit (type h() ENTER for help)

iex(1)> Di sinilah kita mengetikkan ekspresi Elixir
elixir

Saat IEx berjalan, ia menampilkan versi runtime dari Erlang dan Elixir. Setelah itu, muncul prompt iex(1)>, tempat kita mengetikkan ekspresi. Angka di dalam tanda kurung menunjukkan urutan evaluasi.

Mari kita coba ekspresi pertama:

iex(1)> 1 + 1
2
elixir

Penjelasan:

  • ❶ Kita menuliskan ekspresi 1 + 1
  • ❷ IEx mengevaluasi dan mencetak hasilnya, yaitu 2

Di Elixir, hampir semua hal adalah ekspresi yang menghasilkan nilai, termasuk function, if, dan case.

Ekspresi Multi Baris#

IEx juga mendukung penulisan ekspresi dalam beberapa baris:

iex(1)> 2 * (      ❶
...(1)>   3 + 1
...(1)> ) / 4
2.0
elixir

Penjelasan:

  • ❶ Kita mulai menulis ekspresi, tapi belum lengkap karena kurung belum ditutup
  • ❷ Prompt ...(1)> menandakan ekspresi masih berlanjut ke baris berikutnya
  • ❸ Setelah ekspresi lengkap, tekan Enter sekali lagi untuk mengeksekusinya
  • ❹ IEx mengevaluasi dan mencetak hasilnya, yaitu 2.0

Selama ekspresi belum utuh, IEx akan terus menunggu input berikutnya. Ini sangat membantu saat kita ingin menulis ekspresi panjang dengan lebih rapi dan mudah dibaca.

Membaca Dokumentasi#

IEx menyediakan fitur bantuan yang memungkinkan kita membaca dokumentasi langsung dari dalam shell. Untuk memulainya, kita bisa mengetikkan h:

iex(2)> h

                                  IEx.Helpers

Welcome to Interactive Elixir. You are currently seeing the documentation for
the module IEx.Helpers which provides many helpers to make Elixir's shell more
joyful to work with.

This message was triggered by invoking the helper h(), usually referred to as
h/0 (since it expects 0 arguments).

...... (Dan seterusnya)
elixir

Perintah ini menampilkan dokumentasi module IEx.Helpers, yang berisi berbagai helper untuk mempermudah eksplorasi di shell Elixir.

Jika kita ingin melihat dokumentasi function tertentu, misalnya IO.puts, kita bisa menggunakan perintah h diikuti dengan nama module dan function:

iex(3)> h IO.puts

                        def puts(device \\ :stdio, item)

  @spec puts(device(), chardata() | String.Chars.t()) :: :ok

Writes item to the given device, similar to write/2, but adds a newline at the
end.

By default, the device is the standard output. It returns :ok if it succeeds.

## Examples

    IO.puts("Hello World!")
    #=> Hello World!

...... (Dan seterusnya)
elixir

Dari sini kita bisa melihat spesifikasi function, penjelasan singkat, nilai yang dikembalikan, dan contoh penggunaannya.

Cara Debug#

Untuk melakukan debug di IEx, salah satu caranya adalah dengan menggunakan function dbg(). Function ini mencetak ekspresi yang sedang dievaluasi beserta hasilnya, yang ditampilkan di sebelah kanan simbol #=>. Ini memudahkan kita menelusuri bagaimana data diproses di setiap langkah.

Berikut contoh sederhananya:

iex(14)> dbg(200 + 20.22)
[iex:14: (file)]
200 + 20.22 #=> 220.22

220.22
elixir

Pada contoh di atas, dbg() mencetak ekspresi 200 + 20.22 beserta hasilnya, yaitu 220.22. Dengan ini, kita bisa langsung melihat evaluasi nilai tersebut.

Fitur ini sangat membantu saat bekerja dengan kode yang lebih panjang, terutama saat menggunakan pipeline, yaitu cara Elixir untuk mengalirkan nilai melalui rangkaian pemanggilan function dengan pipe operator |>. Kita akan membahas pipeline lebih lanjut di bagian tersendiri. Untuk saat ini, kita cukup memahami cara kerja function dbg():

iex(16)> -100 |> div(4) |> abs() |> to_string() |> dbg() ❶
[iex:16: (file)]          ❷
100 #=> -100              ❷
|> div(4) #=> -25         ❷
|> abs #=> 25             ❷
|> to_string() #=> "25"   ❷

"25"
elixir

Penjelasannya:

  • ❶ Kita mulai dengan menulis sebuah function pipeline. Nilai awalnya adalah -100, yang dialirkan ke function berikutnya melalui pipe operator |>. Langkah-langkahnya adalah:
    • -100 dialirkan ke function div(4), menghasilkan -25
    • -25 dialirkan ke function abs(), menghasilkan 25
    • 25 dialirkan ke function to_string(), menghasilkan "25"
    • Terakhir, function dbg() mencetak hasil di setiap tahap
  • ❷ Ini adalah output dari dbg(), yang menunjukkan hasil evaluasi pada setiap langkah dalam pipeline
  • ❸ Nilai akhir dari seluruh ekspresi adalah "25"

Dengan dbg(), kita bisa memantau jalannya eksekusi secara rinci tanpa perlu menambahkan print manual di setiap langkah.

Keluar Dari Sesi IEx Atau Menampilkan Opsi Lainnya#

Cara tercepat untuk keluar dari sesi IEx adalah dengan menekan tombol CTRL+C dua kali. Jika kita hanya menekannya sekali, IEx akan masuk ke kondisi BREAK dan menampilkan sejumlah opsi berikut:

$ iex
Erlang/OTP 27 [erts-15.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads
:1] [jit:ns]

Interactive Elixir (1.17.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo
       (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution
elixir

Penjelasan:

  • Saat IEx memasuki kondisi BREAK, ia menunggu perintah dari kita.
  • Beberapa opsi yang paling umum digunakan:
    • (a)bort: Keluar dari sesi IEx.
    • (A)bort with dump: Keluar dari sesi IEx sambil menghasilkan dump untuk analisis lebih lanjut.
    • (c)ontinue: Melanjutkan sesi IEx yang sedang berhenti.

Untuk keluar dari IEx, kita bisa menekan CTRL+C dua kali, atau menekan a saat berada di kondisi BREAK.


Karena IEx akan sering kita gunakan selama proses pengembangan, memahami cara mengelola sesi ini dengan lancar adalah langkah awal yang penting untuk meningkatkan produktivitas.

Referensi#