11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ElixirAdvent Calendar 2015

Day 1

Elixirとは

Last updated at Posted at 2015-12-01

Elixirについて語る時に「Ruby風な」といった言葉が使われるのをそこかしこで見てきました。
「Ruby風な」という謳い文句は、Rubyの熱狂的なファンたちの注意を引きます。それ自体が悪いことだとは思いませんが、Rubyist達が「ElixirはRubyではなかった」と落胆している様子は見るに堪えません。

Eixirを形容する言葉としてそれが適しているかについて、考える余地がありそうです。

一見するとRubyとElixirのコードは似ています。

greet.rb
def greet(name)
  "Hello, #{name}"
end
greet.ex
def greet(name) do
  "Hello, #{name}"
end

とは言え、いくら関数定義の字面が似ていても、そもそもRubyとElixirはプログラミング言語のパラダイムが異なります。
両者の違いは書けば書くほど身に染みるのですが、以下の例を見ればその違いが一目瞭然です。

map.rb
["john", "tom"].map {|name| name.uppercase }
elixir.ex
Enum.map(["john", "tom"], fn(name) -> String.uppercase(name) end)

Rubyはオブジェクトのクラスを見て、Array#mapというインスタンスメソッドを呼び出しています。
言うまでもなくこのカラクリはElixirにはありません。metaprogrammingでもしない限り、「Ruby風に」記述することはできません。
(逆に言えば、metaprogrammingさえすればRubyっぽく書けると思う)

僕は「ElixirにとってRubyは取るに足らないものだ」と言いたいのではありません。
作者であるJose valimはRailsやrackのコミッターですし、 ElixirがRubyから受けた影響が少なくないのは明白です。
ElixirがErlangの単なる方言ではないことを証明するのに必要なものの多くも、Rubyのエコシステムに由来するものだと見て取れます。

ただ、もしこれからElixirを始める人がいるのなら、「Ruby風な」という言葉について今一度考えてみて欲しいのです。
Erlangと、Rubyを含むこれまでのあらゆる巨人の肩の上に立っているのがElixirなのであって、「単なるRuby風な関数型言語」でもなければ「単なるErlangの方言」でもありません。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?