Skip to content

Commit 0747d7c

Browse files
committed
Elixir 0.4.0dev ベースのコードに書き換え
1 parent 3fd5b7a commit 0747d7c

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

source/_posts/2012-03-12-why-rubyists-should-try-elixir.markdown

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,26 @@ Elixir が持つ Ruby から来た *method missing* や *module eval* のよう
4949

5050
``` elixir
5151
[first, second] = [1,2]
52-
first % => 1
53-
second % => 2
52+
first # => 1
53+
second # => 2
5454
```
5555

5656
Ruby の代入演算子を使用して全く同じように書くことができるが、パターンマッチングの利点はメソッドのシグネチャの中で利用できることで、もしメソッドのシグネチャがある特定のパターンに一致しない場合は次のメソッドが試される。
5757

5858
例えば、文字列のリストを反復処理しそれらを出力する方法は次のとおりだ:
5959

6060
``` elixir
61-
module Printer
62-
% これは少なくとも一つの要素が存在するリストにマッチするパターンだ
63-
% 最初の要素が head に割り当てられ、残りは tail に割り当てられる
64-
def print([head|tail])
61+
defmodule Printer do
62+
# これは少なくとも一つの要素が存在するリストにマッチするパターンだ
63+
# 最初の要素が head に割り当てられ、残りは tail に割り当てられる
64+
def print([head|tail]) do
6565
IO.puts head
66-
print(tail) % 再帰的に tail と引数として print が呼び出される
66+
print(tail) # 再帰的に tail と引数として print が呼び出される
6767
end
6868

69-
% リストが空になったとき上のメソッドではマッチぜず、かわりにこれがマッチする
70-
def print([])
71-
% 何もしない。すべての出力は完了している。
69+
# リストが空になったとき上のメソッドではマッチぜず、かわりにこれがマッチする
70+
def print([]) do
71+
# 何もしない。すべての出力は完了している。
7272
end
7373
end
7474

@@ -78,29 +78,29 @@ Printer.print ["foo", "bar", "baz"]
7878
また別のクールな例はリストが別のリストの接頭辞であるかどうかを確認する再帰的なメソッドだ:
7979

8080
``` elixir
81-
module Prefix
82-
% 両方のリストを反復する。もし最初の要素が等しかったら自分自身を再び呼び出す。
83-
% もし最初の要素(i)が等しくなかったら、このメソッドにはマッチしない。
84-
def is?([i|prefix], [i|list]) is?(prefix, list); end
81+
defmodule Prefix do
82+
# 両方のリストを反復する。もし最初の要素が等しかったら自分自身を再び呼び出す。
83+
# もし最初の要素(i)が等しくなかったら、このメソッドにはマッチしない。
84+
def is?([i|prefix], [i|list]) do is?(prefix, list) end
8585

86-
% もし接頭辞が空だったらこのメソッドにマッチし true を返す。
87-
def is?([], _list) true; end
86+
# もし接頭辞が空だったらこのメソッドにマッチし true を返す。
87+
def is?([], _list) do true end
8888

89-
% それ意外なら、false を返す。
90-
def is?(_prefix, _list); false; end
89+
# それ意外なら、false を返す。
90+
def is?(_prefix, _list) do false end
9191
end
9292

93-
Prefix.is?([1,2,3], [1,2,3,4,5]) % => true
94-
Prefix.is?([0,1,2], [1,2,3,4,5]) % => false
93+
Prefix.is?([1,2,3], [1,2,3,4,5]) # => true
94+
Prefix.is?([0,1,2], [1,2,3,4,5]) # => false
9595
```
9696

9797
最後に、パターンマッチングは Ruby 2.0 で計画されている機能の一つであるキーワード引数を可能にする。
98-
この例は Elixir のコードそのものだ(Elixir のシンボルはコロンではなくシングルクォートでることに注意):
98+
この例は Elixir のコードそのものだ<del>(Elixir のシンボルはコロンではなくシングルクォートでることに注意)</del>
9999

100100
``` elixir
101-
module Record
102-
def retrieve(name, 'from: file)
103-
% ここに実装を書く ...
101+
defmodule Record do
102+
def retrieve(name, from: file) do
103+
# ここに実装を書く ...
104104
end
105105
end
106106
```
@@ -148,9 +148,9 @@ def create
148148
post1 = post0.set(:published, false)
149149
post2 = post1.save
150150

151-
if post2.persisted?
151+
if post2.persisted? do
152152
redirect_to post2
153-
else
153+
else:
154154
render :new
155155
end
156156
end

0 commit comments

Comments
 (0)