Elixir - Jenis-jenis
Elixir adalah bahasa yang diketik secara dinamis, jadi semua jenis di Elixir disimpulkan oleh runtime. Meskipun demikian, Elixir hadir dengan typepecs, yang merupakan notasi yang digunakan untukdeclaring custom data types and declaring typed function signatures (specifications).
Spesifikasi Fungsi (spesifikasi)
Secara default, Elixir menyediakan beberapa tipe dasar, seperti integer atau pid, dan juga tipe kompleks: misalnya, file roundfunction, yang membulatkan float ke integer terdekatnya, menggunakan angka sebagai argumen (integer atau float) dan mengembalikan integer. Dalam dokumentasi terkait , tanda tangan yang diketik bulat ditulis sebagai -
round(number) :: integer
Deskripsi di atas menyiratkan bahwa fungsi di sebelah kiri mengambil argumen apa yang ditentukan dalam tanda kurung dan mengembalikan apa yang ada di sebelah kanan ::, yaitu, Integer. Spesifikasi fungsi ditulis dengan@specdirektif, ditempatkan tepat sebelum definisi fungsi. Fungsi bulat dapat ditulis sebagai -
@spec round(number) :: integer
def round(number), do: # Function implementation
...
Jenispec juga mendukung jenis yang kompleks, misalnya, jika Anda ingin mengembalikan daftar bilangan bulat, Anda dapat menggunakan [Integer]
Jenis Kustom
Meskipun Elixir menyediakan banyak tipe bawaan yang berguna, akan lebih mudah untuk menentukan tipe khusus jika perlu. Ini dapat dilakukan saat mendefinisikan modul melalui direktif @type. Mari kita pertimbangkan contoh untuk memahami hal yang sama -
defmodule FunnyCalculator do
@type number_with_joke :: {number, String.t}
@spec add(number, number) :: number_with_joke
def add(x, y), do: {x + y, "You need a calculator to do that?"}
@spec multiply(number, number) :: number_with_joke
def multiply(x, y), do: {x * y, "It is like addition on steroids."}
end
{result, comment} = FunnyCalculator.add(10, 20)
IO.puts(result)
IO.puts(comment)
Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -
30
You need a calculator to do that?
NOTE - Jenis kustom yang ditentukan melalui @type diekspor dan tersedia di luar modul tempat mereka didefinisikan. Jika Anda ingin menjaga jenis kustom tetap pribadi, Anda dapat menggunakan @typep direktif, bukan @type.