プログラミング言語III講義資料/メソッド
国島丈生(t.kunishi@gmail.com)
Rubyのメソッドについて、ここで整理をしておこう。
Rubyでメソッドを呼び出すときには次のようにするのであった。
1.to_s
"string".split(//)
この例では、1や "string" といったデータに対して、to_s や split といったメソッドを適用している。メソッドを適用するデータのことをレシーバという。この例では、1や "string" がレシーバである。
メソッド呼び出しは、以下のような形式になる。
レシーバ.メソッド名(引数リスト)
レシーバ.メソッド名 引数リスト # 引数リストをくくるカッコは省略可能
Rubyの場合、どのようなメソッド呼び出しでも必ずレシーバが存在する。printf や p のように一見レシーバを持たないメソッド呼び出しでは、デフォルトのレシーバ self が省略されているとみなされる。(self の意味は後述する)
メソッド呼び出しを行うと、必ず何らかの値が返ってくる。これをメソッドの戻り値(または返り値)という。1.to_s の戻り値は "1", "string".split(//) の戻り値は ["s", "t", "r", "i", "n", "g"] である。
メソッドの戻り値をレシーバにして、さらにメソッドを呼ぶことも可能である。この場合、. 演算子は左結合なので、左から順に計算が行われることになる。13456.to_s.split(//) #=> ["1", "3", "4", "5", "6"]
メソッド定義の構文は次の通りである。
def メソッド名(引数リスト)
メソッドの本体 # 複数の式を並べて書く
end
def sum(x, y)
x + y
end
def diff x, y
x - y
end
sum(1, 2) #=> 3
diff(2, 1) #=> 1
メソッド呼び出しのときにはそれらが順次実行され、最後に実行された式の値がメソッドの戻り値になる。上の例では、式 x + y の評価値がメソッド sum の戻り値になる。戻り値として配列やハッシュを返すことももちろん可能である。
メソッドの途中で本体の実行を終了したい場合など、明示的にメソッドの戻り値を指定したい場合は return 式を用いる。
def foo
yield "bar"
end
foo {|item| puts item} #=> barと出力
ユークリッドの互除法に基づいて2数x, yの最大公約数を求めるメソッド gcd(x, y) を書け。