Elixir - Modul
Di Elixir, kami mengelompokkan beberapa fungsi ke dalam modul. Kami telah menggunakan modul yang berbeda di bab-bab sebelumnya seperti modul String, modul Bitwise, modul Tuple, dll.
Untuk membuat modul kami sendiri di Elixir, kami menggunakan defmodulemakro. Kami menggunakandef makro untuk menentukan fungsi dalam modul itu -
defmodule Math do
def sum(a, b) do
a + b
end
end
Pada bagian berikut, contoh kita akan menjadi lebih panjang ukurannya, dan mungkin sulit untuk mengetik semuanya di shell. Kita perlu belajar bagaimana mengkompilasi kode Elixir dan juga bagaimana menjalankan skrip Elixir.
Kompilasi
Selalu mudah untuk menulis modul ke dalam file sehingga dapat dikompilasi dan digunakan kembali. Mari kita asumsikan kita memiliki file bernama math.ex dengan konten berikut -
defmodule Math do
def sum(a, b) do
a + b
end
end
Kita dapat mengkompilasi file menggunakan perintah -elixirc :
$ elixirc math.ex
Ini akan menghasilkan file bernama Elixir.Math.beamberisi bytecode untuk modul yang ditentukan. Jika kita mulaiiexsekali lagi, definisi modul kami akan tersedia (asalkan iex dimulai di direktori yang sama dengan file bytecode). Sebagai contoh,
IO.puts(Math.sum(1, 2))
Program di atas akan menghasilkan hasil sebagai berikut -
3
Mode Skrip
Selain ekstensi file Elixir .ex, Elixir juga mendukung .exsfile untuk pembuatan skrip. Elixir memperlakukan kedua file dengan cara yang persis sama, satu-satunya perbedaan adalah pada tujuannya..ex file dimaksudkan untuk dikompilasi sementara file .exs digunakan untuk scripting. Ketika dijalankan, kedua ekstensi mengkompilasi dan memuat modul mereka ke dalam memori, meskipun hanya.ex file menulis bytecode mereka ke disk dalam format file .beam.
Misalnya, jika kita ingin menjalankan file Math.sum di file yang sama, kita dapat menggunakan .exs dengan cara berikut -
Math.exs
defmodule Math do
def sum(a, b) do
a + b
end
end
IO.puts(Math.sum(1, 2))
Kita dapat menjalankannya menggunakan perintah Elixir -
$ elixir math.exs
Program di atas akan menghasilkan hasil sebagai berikut -
3
File akan dikompilasi dalam memori dan dieksekusi, mencetak "3" sebagai hasilnya. Tidak ada file bytecode yang akan dibuat.
Module Nesting
Modul dapat disarangkan di Elixir. Fitur bahasa ini membantu kami mengatur kode kami dengan cara yang lebih baik. Untuk membuat modul bersarang, kami menggunakan sintaks berikut -
defmodule Foo do
#Foo module code here
defmodule Bar do
#Bar module code here
end
end
Contoh yang diberikan di atas akan mendefinisikan dua modul: Foo dan Foo.Bar. Yang kedua dapat diakses sebagaiBar dalam Fooselama mereka berada dalam lingkup leksikal yang sama. Jika, nanti, fileBar modul dipindahkan di luar definisi modul Foo, itu harus direferensikan dengan nama lengkapnya (Foo.Bar) atau sebuah alias harus diatur menggunakan direktif alias yang dibahas dalam bab alias.
Note- Di Elixir, tidak perlu mendefinisikan modul Foo untuk mendefinisikan modul Foo.Bar, karena bahasa menerjemahkan semua nama modul menjadi atom. Anda dapat menentukan modul yang disinkronkan dengan arbitrase tanpa menentukan modul apa pun dalam rantai. Misalnya, Anda dapat mendefinisikanFoo.Bar.Baz tanpa mendefinisikan Foo atau Foo.Bar.