Elixir-機能

関数は、特定のタスクを実行するために一緒に編成されたステートメントのセットです。プログラミングの関数は、ほとんど数学の関数と同じように機能します。関数にいくつかの入力を与えると、提供された入力に基づいて出力が生成されます。

Elixirには2種類の機能があります-

匿名関数

を使用して定義された関数 fn..end construct匿名関数です。これらの関数は、ラムダと呼ばれることもあります。それらは変数名に割り当てることによって使用されます。

名前付き関数

を使用して定義された関数 def keyword名前付き関数です。これらは、Elixirで提供されるネイティブ関数です。

匿名関数

名前が示すように、無名関数には名前がありません。これらは頻繁に他の関数に渡されます。Elixirで無名関数を定義するには、fn そして endキーワード。これらの中で、で区切られた任意の数のパラメーターと関数本体を定義できます。->。例えば、

sum = fn (a, b) -> a + b end
IO.puts(sum.(1, 5))

上記のプログラムを実行すると、実行すると、次の結果が生成されます-

6

これらの関数は、名前付き関数のように呼び出されないことに注意してください。私たちは 'を持っています.'関数名とその引数の間。

キャプチャ演算子の使用

キャプチャ演算子を使用してこれらの関数を定義することもできます。これは、関数を作成するためのより簡単な方法です。ここで、キャプチャ演算子を使用して上記の合計関数を定義します。

sum = &(&1 + &2) 
IO.puts(sum.(1, 2))

上記のプログラムを実行すると、次の結果が生成されます-

3

短縮バージョンでは、パラメーターに名前は付けられていませんが、&1、&2、&3などとして使用できます。

パターンマッチング機能

パターンマッチングは、変数やデータ構造だけに限定されません。パターンマッチングを使用して、関数を多形にすることができます。たとえば、1つまたは2つの入力(タプル内)を受け取り、それらをコンソールに出力できる関数を宣言します。

handle_result = fn
   {var1} -> IO.puts("#{var1} found in a tuple!")
   {var_2, var_3} -> IO.puts("#{var_2} and #{var_3} found!")
end
handle_result.({"Hey people"})
handle_result.({"Hello", "World"})

上記のプログラムを実行すると、次の結果が生成されます-

Hey people found in a tuple!
Hello and World found!

名前付き関数

後で簡単に参照できるように、名前を使用して関数を定義できます。名前付き関数は、defキーワードを使用してモジュール内で定義されます。名前付き関数は常にモジュールで定義されます。名前付き関数を呼び出すには、モジュール名を使用してそれらを参照する必要があります。

名前付き関数の構文は次のとおりです-

def function_name(argument_1, argument_2) do
   #code to be executed when function is called
end

ここで、Mathモジュール内で名前付き関数の合計を定義しましょう。

defmodule Math do
   def sum(a, b) do
      a + b
   end
end

IO.puts(Math.sum(5, 6))

上記のプログラムを実行すると、次の結果が生成されます-

11

1ライナー関数の場合、これらの関数を定義するための省略表記があります。 do:。例-

defmodule Math do
   def sum(a, b), do: a + b
end
IO.puts(Math.sum(5, 6))

上記のプログラムを実行すると、次の結果が生成されます-

11

プライベート関数

Elixirは、それらが定義されているモジュール内からアクセスできるプライベート関数を定義する機能を提供します。プライベート関数を定義するには、defp の代わりに def。例えば、

defmodule Greeter do
   def hello(name), do: phrase <> name
   defp phrase, do: "Hello "
end

Greeter.hello("world")

上記のプログラムを実行すると、次の結果が生成されます-

Hello world

しかし、フレーズ関数を明示的に呼び出そうとすると、 Greeter.phrase() 関数、それはエラーを発生させます。

デフォルトの引数

引数のデフォルト値が必要な場合は、 argument \\ value 構文-

defmodule Greeter do
   def hello(name, country \\ "en") do
      phrase(country) <> name
   end

   defp phrase("en"), do: "Hello, "
   defp phrase("es"), do: "Hola, "
end

Greeter.hello("Ayush", "en")
Greeter.hello("Ayush")
Greeter.hello("Ayush", "es")

上記のプログラムを実行すると、次の結果が生成されます-

Hello, Ayush
Hello, Ayush
Hola, Ayush