Elixir Püf Noktaları

Elixir programlama dili

Pipe Operatörü »

Merhaba.

Elixir'de modülleri birbirleri içinde kullanabiliyoruz. Yani modülleri birleştirebiliyoruz. Şimdilik iki iş yapan Drop ve Convert adında iki modülümüz var.

defmodule Drop do
  def fall_velocity(distance) do
    :math.sqrt(2 * 9.8 * distance)
  end
end

defmodule Convert do
  def mps_to_mph(mps) do
    2.23693629 * mps
  end

  def mps_to_kph(mps) do
    3.6 * mps
  end
end

Bu iki modülü compile edip ayrı ayrı kullanabiliriz.

iex(1)> c("drop.ex")
[Drop]
iex(2)> c("convert.ex")
[Convert]
iex(3)> Drop.fall_velocity(20)
19.79898987322333
iex(4)> Convert.mps_to_mph(Drop.fall_velocity(20))
44.289078952755766
iex(5)>

Fakat bu durum biraz garip. Çünkü bir modülün fonksiyonun sonucunu diğer modülün fonksiyonunda kullanmak istiyoruz. Bu durumda modülleri bir araya getirmek daha iyi olacaktır. Combined adında üçüncü bir modül oluşturalım.

defmodule Combined do
  def height_to_mph(meters) do
    Convert.mps_to_mph(Drop.fall_velocity(meters))
  end
end
iex(1)> c("combined.ex")
[Combined]
iex(2)> Combined.height_to_mph(20)
44.289078952755766
iex(3)>

Görüldüğü gibi üçüncü modülü compile ettikten sonra ayrı bir fonksiyon tanımlayıp, kullanabiliyoruz.

Elixir'de modülleri birleştirmenin daha güzel ve doğru bir yolu daha var. |> pipe operatörünü kullanarak modülleri birbirleri içinde çağırabiliyoruz. Birinci parametreyi, ikinci parametrede olan fonksiyonda kullanabilmek üzere atayabiliyoruz.

defmodule Combined do
  def height_to_mph(meters) do
    Drop.fall_velocity(meters) |> Convert.mps_to_mph
  end
end

Görüldüğü üzere pipe operatörünü kullanmak bize daha kolaylık sağlıyor ve okurken X goes into Y şeklinde okuyunca daha da açıklayıcı olabiliyor.

Sevgiler.

Yazan:
Ender Ahmet Yurt

Modüller »

Merhaba.

Elixir programlarını daha derli toplu yazmak ve çeşitli encapsulate işlerimlerini yapabilmek için modüllere ihtiyaç duyuyoruz. Modüller içerisinde fonksiyonlar tanımlayıp kullanabiliyor ayrıca modül içinde de modül tanımlayabiliyoruz.

Modüller .ex dosyasının içinde tanımlanıyor ve aynı Ruby'de olduğu gibi isimleri snake case ile yazılıyor. Örnek verecek olursak my_lovely_module.ex

defmodule Drop do
  def fall_velocity(distance) do
    :math.sqrt(2 * 9.8 * distance)
  end

  def mps_to_mph(mps) do
    2.23693629 * mps
  end

  def mps_to_kph(mps) do
    3.6 * mps
  end
end

Yukarıda görüldüğü gibi modül tanımına defmodule ile başlayıp, modül ismimizi büyük harfle yazarak başlıyoruz. Bir önceki yazıda anlattığımız anonim fonksiyonlar gibi burada metotları bir değere atamak zorunda değiliz. def do ... end arasına metotumuzun yapacağı işi yazıyoruz. defp ile private metot tanımlayabiliriz.

Şimdi gelelim modülü yazdığımız Elixir kodunu compile etmeye ve sonrasında kullanmaya. Önce iex ile bir Elixir shell açıyoruz ve c fonksiyonun içine modülümüzün adını yazıyoruz.

iex(1)> c("drop.ex")
[Drop]
iex(2)>

Modülün olduğu klasörü içine bakacak olursak bir adet `Elixir.Drop.beam adında bir compile edilmiş bir dosya görürüz. Bu dosya oluştuğuna göre artık modül içinde tanımladığım metotları kullanabiliriz.

iex(2)> Drop.fall_velocity(20)
19.79898987322333
iex(3)> Drop.mps_to_mph(Drop.fall_velocity(20))
44.289078952755766
iex(4)>

Elixir shell'e çıkıp, girsek bile tekrar tekrar compile edilmiş kodu kullanabiliriz. Bunun yanında her değişiklik yaptığımızda kodu tekrar compile edip, çalıştırmalıyız. Ancak bütün bunları yapmak istemiyorsak Elixir'in scripting versiyonu olan .exs de aynı şekilde kullanabiliriz.

Modülleri bu şekilde öğrenmiş olduk. Modülleri birbilerini içinde çağırabilir ve kullanabiliriz. Bu konuyu bir sonraki yazıda daha detaylı işleyeceğiz.

Sevgiler.

Yazan:
Ender Ahmet Yurt

Fonksiyonlar »

Merhaba.

Elixir, fonksiyonel bir programla dili olduğu için giriş kısmından sonra fonksiyonları anlamak daha iyi olur diye düşünüyorum. Dilin temel özelliklerine zaten konular detaylandıkça tek tek değinme fırsatımız olacak.

Yazan:
Ender Ahmet Yurt
fn

Kurulum ve İlk Program »

Merhaba.

Uzun bir Ruby macerasından sonra kendimi başka bir programlama diline atmak istiyordum. Aslında programla dilinden ziyade isteğim daha farklı bir disiplini barındıran bir dil olmasaydı.

Yazan:
Ender Ahmet Yurt

Merhaba dünya! »

Son dönemin heyecan verici programlama dillerinden Elixir ile ilgili ipuçları, püf noktarı artık geliştiriciyiz.biz ağında! Geçtiğimiz günlerde sevgili Ender Ahmet Yurt’un önerisiyle (ki ağırlıklı olarak kendisi bu siteyi besleyecek) bugün yayına geçtik!

Hepimiz heyecanla bekliyoruz!

Yazan:
Uğur Özyılmazel