İksir - Modüller
Elixir'de birkaç işlevi modüller halinde gruplandırıyoruz. Önceki bölümlerde String modülü, Bitwise modülü, Tuple modülü gibi farklı modülleri zaten kullandık.
Elixir'de kendi modüllerimizi oluşturmak için, defmodulemakro. Kullanıyoruzdef bu modüldeki işlevleri tanımlamak için makro -
defmodule Math do
def sum(a, b) do
a + b
end
end
Aşağıdaki bölümlerde, örneklerimizin boyutu uzayacak ve hepsini kabukta yazmak zor olabilir. Elixir kodunu nasıl derleyeceğimizi ve ayrıca Elixir komut dosyalarını nasıl çalıştıracağımızı öğrenmemiz gerekiyor.
Derleme
Modülleri, derlenebilmeleri ve yeniden kullanılabilmeleri için dosyalara yazmak her zaman uygundur. Aşağıdaki içeriğe sahip math.ex adında bir dosyamız olduğunu varsayalım -
defmodule Math do
def sum(a, b) do
a + b
end
end
Dosyaları şu komutu kullanarak derleyebiliriz -elixirc :
$ elixirc math.ex
Bu, adlı bir dosya oluşturacaktır. Elixir.Math.beamtanımlı modül için bayt kodunu içerir. Başlarsakiexyine, modül tanımımız mevcut olacaktır (iex'in bayt kodu dosyasının bulunduğu dizinde başlatılması koşuluyla). Örneğin,
IO.puts(Math.sum(1, 2))
Yukarıdaki program aşağıdaki sonucu üretecektir -
3
Komut Dosyası Modu
Elixir dosya uzantısına ek olarak .exElixir ayrıca şunları da destekler: .exskomut dosyası oluşturma dosyaları. Elixir her iki dosyayı da tamamen aynı şekilde ele alır, tek fark amaçtır..ex .exs dosyaları için kullanılırken dosyaların derlenmesi amaçlanmıştır scripting. Yürütüldüğünde, her iki uzantı da modüllerini derler ve belleğe yükler..ex dosyalar bayt kodlarını diske .beam dosyaları biçiminde yazar.
Örneğin, Math.sum aynı dosyada .ex'leri şu şekilde kullanabiliriz -
Math.exs
defmodule Math do
def sum(a, b) do
a + b
end
end
IO.puts(Math.sum(1, 2))
Elixir komutunu kullanarak çalıştırabiliriz -
$ elixir math.exs
Yukarıdaki program aşağıdaki sonucu üretecektir -
3
Dosya bellekte derlenecek ve sonuç olarak “3” yazdırılarak yürütülecektir. Bayt kodu dosyası oluşturulmayacaktır.
Modül Yerleştirme
Modüller Elixir'e yerleştirilebilir. Dilin bu özelliği, kodumuzu daha iyi bir şekilde düzenlememize yardımcı olur. İç içe modüller oluşturmak için aşağıdaki sözdizimini kullanıyoruz -
defmodule Foo do
#Foo module code here
defmodule Bar do
#Bar module code here
end
end
Yukarıda verilen örnek iki modülü tanımlayacaktır: Foo ve Foo.Bar. İkincisine şu şekilde erişilebilir:Bar içeride Fooaynı sözlü kapsamda oldukları sürece. Daha sonraBar modül, Foo modül tanımının dışına taşınırsa, tam adıyla (Foo.Bar) başvurulmalıdır veya takma ad bölümünde açıklanan takma ad yönergesi kullanılarak bir takma ad ayarlanmalıdır.
Note- Elixir'de, dil tüm modül adlarını atomlara çevirdiğinden, Foo.Bar modülünü tanımlamak için Foo modülünü tanımlamaya gerek yoktur. Zincirde herhangi bir modül tanımlamadan arbitrarilynested modülleri tanımlayabilirsiniz. Örneğin, tanımlayabilirsinizFoo.Bar.Baz tanımlamadan Foo veya Foo.Bar.