IEx adalah REPL bawaan Elixir, yaitu lingkungan interaktif yang membaca ekspresi yang diketik, mengevaluasinya, lalu mencetak hasilnya. Topik ini menunjukkan cara kerja sesi IEx, dua helper bawaan untuk membaca dokumentasi dan memeriksa istilah, serta cara menjalankan skrip dari berkas .exs. Semua contohnya dapat diulang pada terminal yang sudah memiliki Elixir 1.20.
Membuka sesi IEx#
Sesi IEx dibuka dengan menjalankan perintah iex tanpa argumen. IEx menampilkan banner versi lalu prompt pertamanya, yaitu iex(1), dan angka pada prompt bertambah satu setiap ekspresi. Ekspresi yang dimasukkan langsung dievaluasi, dan nilainya dicetak pada baris di bawah prompt. Format pencetakannya menggunakan protokol Inspect, sehingga string ditampilkan bersama tanda kutipnya dan struktur data ditampilkan lengkap dengan pembungkusnya. Fungsi-fungsi modul Kernel juga dapat dipanggil tanpa nama modulnya karena sudah tersedia di lingkungan IEx.
Transkrip berikut adalah sesi nyata yang direkam dengan memberi dua ekspresi melalui pipe, yaitu 1 + 1 lalu "halo" <> " dunia". Karena masukannya dipipakan, baris prompt langsung diikuti nilai hasilnya tanpa pencetakan ulang ekspresi yang diketik.
# tidak-dijalankan
Erlang/OTP 29 [erts-17.1.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Interactive Elixir (1.20.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 2
iex(2)> "halo dunia"
Baris pertama memuat nilai 2 sebagai hasil dari 1 + 1. Baris kedua memuat "halo dunia" sebagai hasil dari operator <>, yaitu operator penggabungan dua string pada Elixir. Setelah sesi terbuka, keadaannya bertahan sampai sesi ditutup dengan Ctrl+C sesuai petunjuk banner. Variabel yang didefinisikan pada satu ekspresi tetap terpasang dan dapat digunakan pada ekspresi berikutnya.
Helper h dan i untuk eksplorasi#
IEx menyertakan helper untuk menjelajah tanpa membuka browser. Helper h menerima nama modul, fungsi, atau macro dan mencetak dokumentasinya yang ikut terpasang bersama Elixir. Helper i menerima istilah apa pun dan mencetak informasinya, misalnya tipe data, modul rujukan, dan protokol yang diimplementasikan. Keduanya bagian dari modul IEx.Helpers yang masih memuat banyak helper lain, misalnya open/1 untuk membuka kode sumber modul di editor dan runtime_info/0 untuk ringkasan mesin virtual. Daftar lengkapnya dapat dibuka dengan menjalankan h tanpa argumen.
Transkrip berikut memperlihatkan keduanya. Perintah h String mencetak dokumentasi modul String yang panjangnya beberapa layar, sehingga bagian tengahnya dipangkas pada transkrip ini. Perintah i 42 mencetak informasi istilah bilangan bulat 42.
# tidak-dijalankan
iex(1)>
String
Strings in Elixir are UTF-8 encoded binaries.
Strings in Elixir are a sequence of Unicode characters, typically written
between double quoted strings, such as `"hello"` and `"héllò"`.
In case a string must have a double-quote in itself, the double quotes must be
escaped with a backslash, for example: `"this is a string with \"double
quotes\""`.
You can concatenate two strings with the `<>/2` operator:
iex> "hello" <> " " <> "world"
"hello world"
# (bagian tengah dokumentasi modul String dipangkas agar ringkas)
iex(2)> Term
42
Data type
Integer
Reference modules
Integer
Implemented protocols
IEx.Info, Inspect, JSON.Encoder, List.Chars, String.Chars
Bagian akhir keluaran i selalu tersusun sama. Bagian Term memuat istilah yang diperiksa, Data type menyebut tipe datanya, Reference modules menunjuk modul yang menjadi rujukan tipe tersebut, dan Implemented protocols mendaftar protokol yang mengenali istilah itu. Protokol sendiri adalah kontrak yang mengizinkan satu fungsi bekerja pada banyak tipe data. Untuk fungsi tertentu, tuliskan nama dan aritasnya, misalnya h String.upcase/1, sehingga keluarannya jauh lebih ringkas daripada dokumentasi seluruh modul.
Menjalankan berkas .exs pertama#
Elixir membedakan dua ekstensi kode sumber. Berkas .ex adalah kode proyek yang dikompilasi oleh Mix ke direktori _build, sedangkan berkas .exs adalah skrip yang dievaluasi langsung tanpa artefak kompilasi. Pembagian ini membuat .exs tepat untuk skrip utilitas, konfigurasi, dan pengujian. Mix sendiri mengikuti konvensi <nama>_test.exs untuk berkas pengujian, karena pengujian tidak perlu dikompilasi sebelum dijalankan.
Berkas berikut adalah skrip .exs pertama. Dua baris terakhirnya memanggil IO.puts/1 untuk mencetak satu baris teks, dan teksnya menggunakan interpolasi, yaitu penyisipan nilai ke dalam string melalui tanda #{...}. Ekspresi apa pun di dalam tanda tersebut dievaluasi terlebih dahulu, lalu hasilnya diubah menjadi teks sebelum string digabungkan.
# salam.exs: skrip Elixir pertama
nama = "dunia"
IO.puts("Halo, #{nama}!")
IO.puts("6 dikalikan 7 sama dengan #{6 * 7}")Halo, dunia!
6 dikalikan 7 sama dengan 42Skrip dijalankan dengan perintah elixir diikuti nama berkasnya. Direktori kerja terminal harus sama dengan tempat berkasnya berada, karena jalur relatif dibaca dari direktori kerja saat itu.
# menjalankan skrip dari direktori tempat berkasnya berada
elixir salam.exsHalo, dunia!
6 dikalikan 7 sama dengan 42Untuk mengevaluasi satu ekspresi tanpa membuat berkas, perintah elixir menerima opsi -e diikuti ekspresinya. Bentuk ini berguna untuk memeriksa perilaku kecil sebelum ditulis ke berkas, misalnya mencoba keluaran fungsi pustaka standar.
# mengevaluasi satu ekspresi tanpa membuat berkas
elixir -e 'IO.puts(6 * 7)'42Kesalahan umum#
- Menyalin prompt
iex(1)>beserta isinya ke dalam berkas skrip. Prompt dan hasil cetak IEx bukan bagian kode, sehingga memasukkannya ke berkas memicu error sintaks. Perbaikannya dengan menyalin hanya ekspresinya, satu baris per ekspresi. - Menjalankan
elixir salam.exsdari direktori lain. Jalur relatif dibaca dari direktori kerja saat itu, sehingga elixir berhenti dengan pesanNo file named salam.exs. Perbaikannya dengan berpindah ke direktori berkasnya terlebih dahulu atau menuliskan jalurnya lengkap. - Menganggap ekstensi
.exdan.exssama saja. Perintah elixir sebenarnya mampu menjalankan keduanya, tetapi Mix hanya mengompilasi berkas.exsebagai bagian proyek, sedangkan.exsdievaluasi langsung. Menyimpan modul proyek sebagai.exsmembuat modul itu luput dari hasil kompilasi proyek.
Ringkasan#
- IEx mengevaluasi ekspresi satu per satu dengan nomor prompt yang bertambah, dan keadaan sesinya bertahan sampai sesi ditutup.
- Helper
hmencetak dokumentasi modul atau fungsi, sedangkan helperimencetak tipe data, modul rujukan, dan protokol sebuah istilah. - Berkas
.exsdievaluasi langsung denganelixir nama-berkas.exs, sedangkan.exadalah kode proyek yang dikompilasi Mix. - Opsi
-epada perintah elixir mengevaluasi satu ekspresi tanpa membuat berkas.
Referensi#
- IEx.Helpers — Hexdocs — Daftar lengkap helper IEx, termasuk h untuk dokumentasi dan i untuk informasi istilah.
- Introduction to Mix — Hexdocs — Perkenalan Mix yang juga menjelaskan pembagian peran berkas .ex dan .exs.