İksir - Türler
Elixir, dinamik olarak yazılmış bir dildir, bu nedenle Elixir'deki tüm türler çalışma zamanına göre çıkarılır. Bununla birlikte, Elixir için kullanılan bir gösterim olan tür özellikleriyle birlikte gelir.declaring custom data types and declaring typed function signatures (specifications).
İşlev Özellikleri (özellikler)
Elixir varsayılan olarak tamsayı veya pid gibi bazı temel türleri ve ayrıca karmaşık türleri sağlar: örneğin, roundbir kayan noktayı en yakın tam sayıya yuvarlayan işlev, bir sayıyı bağımsız değişken olarak (bir tam sayı veya bir yüzer sayı) alır ve bir tamsayı döndürür. İlgili dokümantasyonda yuvarlak tip imza şu şekilde yazılmıştır:
round(number) :: integer
Yukarıdaki açıklama, soldaki fonksiyonun parantez içinde belirtileni bağımsız değişken olarak aldığını ve :: 'nin sağında olanı, yani Tamsayı döndürdüğünü ima eder. Fonksiyon özellikleri ile yazılır@specyönerge, işlev tanımının hemen önüne yerleştirilir. Yuvarlak işlevi şu şekilde yazılabilir -
@spec round(number) :: integer
def round(number), do: # Function implementation
...
Tür belirtimleri karmaşık türleri de destekler; örneğin, tam sayıların bir listesini döndürmek istiyorsanız, [Integer]
Özel Tipler
Elixir birçok yararlı dahili tür sağlarken, uygun olduğunda özel türleri tanımlamak uygundur. Bu, @type yönergesi aracılığıyla modülleri tanımlarken yapılabilir. Aynısını anlamak için bir örnek ele alalım -
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)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
30
You need a calculator to do that?
NOTE - @type aracılığıyla tanımlanan özel türler dışa aktarılır ve içinde tanımlandıkları modülün dışında kullanılabilir. Özel bir türü özel tutmak istiyorsanız, @typep yerine yönerge @type.