Elixir - Structs
Struktur adalah ekstensi yang dibangun di atas peta yang menyediakan pemeriksaan waktu kompilasi dan nilai default.
Mendefinisikan Struktur
Untuk mendefinisikan struct, konstruksi defstruct digunakan -
defmodule User do
defstruct name: "John", age: 27
end
Daftar kata kunci yang digunakan dengan defstruct menentukan bidang apa yang akan dimiliki struct beserta nilai defaultnya. Structs mengambil nama modul yang mereka definisikan. Dalam contoh yang diberikan di atas, kami mendefinisikan sebuah struct bernama User. Sekarang kita dapat membuat User struct dengan menggunakan sintaks yang mirip dengan yang digunakan untuk membuat peta -
new_john = %User{})
ayush = %User{name: "Ayush", age: 20}
megan = %User{name: "Megan"})
Kode di atas akan menghasilkan tiga struct berbeda dengan nilai -
%User{age: 27, name: "John"}
%User{age: 20, name: "Ayush"}
%User{age: 27, name: "Megan"}
Structs memberikan jaminan waktu kompilasi bahwa hanya kolom (dan semuanya) yang ditentukan melalui defstruct yang akan diizinkan untuk ada di struct. Jadi, Anda tidak dapat menentukan kolom Anda sendiri setelah Anda membuat struct di modul.
Mengakses dan Memperbarui Struktur
Saat kami membahas peta, kami menunjukkan bagaimana kami dapat mengakses dan memperbarui bidang peta. Teknik yang sama (dan sintaks yang sama) juga berlaku untuk struct. Misalnya, jika kita ingin memperbarui pengguna yang kita buat di contoh sebelumnya, maka -
defmodule User do
defstruct name: "John", age: 27
end
john = %User{}
#john right now is: %User{age: 27, name: "John"}
#To access name and age of John,
IO.puts(john.name)
IO.puts(john.age)
Ketika program di atas dijalankan, menghasilkan hasil sebagai berikut -
John
27
Untuk memperbarui nilai dalam sebuah struct, kami akan kembali menggunakan prosedur yang sama yang kami gunakan di bab peta,
meg = %{john | name: "Meg"}
Struktur juga dapat digunakan dalam pencocokan pola, baik untuk pencocokan nilai kunci tertentu maupun untuk memastikan bahwa nilai yang cocok adalah struktur dengan jenis yang sama dengan nilai yang cocok.