Anonymous Functions (Elixir) & Lambdas (Ruby)

Dalam tulisan yang lalu tentang tipe data pada Elixir (http://absyah.com/blog/tipe-data-pada-elixir/) disebutkan bahwa pada Elixir terdapat tipe data yang bernama Anonymous Function. Sebagai Rubyist saya coba mencari sebanyak mungkin kemiripan antara Ruby (yang hampir 5 tahun ini saya gunakan) dengan Elixir sehingga learning curve dalam mempelajari Elixir ini dapat dipersingkat.

Ruby dapat dikatakan multi paradigma, tetapi karena segala sesuatunya adalah object maka secara umum Ruby adalah object oriented. Pada tulisan ini saya akan coba melakukan komparasi sisi functional dari Ruby dengan Elixir yang merupakan bahasa murni functional, yaitu Lambda pada Ruby dan Anonymous Function pada Elixir.

# Pendefinisian Anonymous Function pada Elixir
iex(1)> me = fn() -> IO.puts "Absyah" end
iex(2)> me.()
Absyah
:ok
# Pendefinisian Lambda pada Ruby
2.3.1 :001 > me = -> { puts "Absyah" }
2.3.1 :002 > me.()
Absyah
=> nil

Pada contoh code pendefinisian diatas terdapat kemiripan syntax antara lambda dengan anonymous function.

Anonymous function pada Elixir merupakan first class citizen seperti kebanyakan bahasa pemrogramman functional lainnya sehingga anonymous function ini dapat diassign dalam variabel, dapat dijadikan sebagai argument pada function lain, dan juga sebagai return dalam function lain.

Contoh anonymous function yang dijadikan argument pada function lain:

defmodule Example do

  def call(func) do
    func.()
  end

end
iex(1)> Example.call fn() -> IO.puts "Absyah" end
Absyah
:ok

Kita coba komparasi dengan lambda pada Ruby, dengan menjadikan lambda tersebut sebagai argument:

class Example

  def self.call(func)
    func.()
  end

end
2.3.1 :001 > Example.call -> { puts "Absyah" }
Absyah
=> nil

Lambda pada Ruby juga dapat dijadikan argument pada sebuah method, dan jika diamati keduanya terlihat mirip antara syntax anonymous function pada Elixir dengan syntax lambda pada Ruby.

Kita coba menjadikan function sebagai return, pada Elixir sebagai berikut:

defmodule Example do

  def return do
    fn() -> IO.puts "Absyah" end
  end

end
iex(1)> say = Example.return
iex(2)> say.()
Absyah
:ok

Sedangkan lambda pada Ruby sebagai berikut:

class Example

  def self.return
    -> { puts "Absyah" }
  end
end
2.3.1 :001 > say = Example.return
2.3.1 :002 > say.()
Absyah
=> nil

Cukup jelas terlihat kemiripan syntax antara Ruby dengan Elixir dalam studi kasus ini. Sehingga dapat kita simpulkan Anonymous function pada Elixir adalah Lambda pada Ruby.

Semoga bermanfaat. (:

Jika menyukai tulisan ini silakan untuk subscribe agar memperoleh info tulisan terbaru lainnya seputar programming yang tidak kalah menarik.




absyah