İksir - Yapılar
Yapılar, derleme zamanı kontrolleri ve varsayılan değerler sağlayan, haritaların üzerine inşa edilmiş uzantılardır.
Yapıları Tanımlama
Bir yapıyı tanımlamak için defstruct yapısı kullanılır -
defmodule User do
defstruct name: "John", age: 27
end
Defstruct ile kullanılan anahtar kelime listesi, yapının varsayılan değerleriyle birlikte hangi alanlara sahip olacağını tanımlar. Yapılar, tanımlandıkları modülün adını alırlar. Yukarıdaki örnekte, Kullanıcı adında bir yapı tanımladık. Artık harita oluşturmak için kullanılana benzer bir sözdizimi kullanarak Kullanıcı yapıları oluşturabiliriz -
new_john = %User{})
ayush = %User{name: "Ayush", age: 20}
megan = %User{name: "Megan"})
Yukarıdaki kod, değerleri olan üç farklı yapı oluşturacaktır -
%User{age: 27, name: "John"}
%User{age: 20, name: "Ayush"}
%User{age: 27, name: "Megan"}
Yapılar, yalnızca defstruct aracılığıyla tanımlanan alanların (ve hepsinin) bir yapı içinde var olacağına dair derleme zamanı garantileri sağlar. Dolayısıyla modülde yapıyı oluşturduktan sonra kendi alanlarınızı tanımlayamazsınız.
Yapılara Erişim ve Güncelleme
Haritaları tartıştığımızda, bir haritanın alanlarına nasıl erişip bu alanları güncelleyebileceğimizi gösterdik. Aynı teknikler (ve aynı sözdizimi) yapılar için de geçerlidir. Örneğin, önceki örnekte oluşturduğumuz kullanıcıyı güncellemek istiyorsak, o zaman -
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)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
John
27
Bir yapıdaki bir değeri güncellemek için, harita bölümünde kullandığımız prosedürün aynısını tekrar kullanacağız,
meg = %{john | name: "Meg"}
Yapılar, hem belirli anahtarların değeri üzerinde eşleşme için hem de eşleşen değerin eşleşen değerle aynı tipte bir yapı olmasını sağlamak için model eşleştirmede de kullanılabilir.