fugafuga.write

日々のログ

Ruby 2.x.x 入門 - メソッドを扱う -

メソッド、それは振る舞い。



単純なメソッド

num = "100".to_i

"100"という文字列オブジェクトに対して、to_i というメソッドを指定しています。
文字列を数値に変換するわけです。

オブジェクト指向言語では、ここで言う"100"オブジェクトはレシーバーとも呼ばれます。
receiver (受け取る者) 。

じゃあ何を受け取っているのかというと、to_i というメッセージを受け取っています。
receiver に対してmessage を送って仕事をしてもらうというイメージです。

ブロック付きメソッド

3.times do |i|
  p "#{i}回目"
end

do ~ end までがブロックです。
上の例は、ブロック内に書かれた処理を3回こなします。

また、|i| のような変数は、ブロック変数といいます。
ブロック変数は、ブロック内の処理が実行されるときに値がメソッドから渡されます。
上記の場合、0, 1, 2という数値がブロック変数 i に設定されていきます。

渡される値については、メソッドによってまちまちです。

演算子形式のメソッド

+ , - , [ ] などの演算子もメソッドになります。
このへんは、C++でもあった演算子のオーバーロードっぽい。

c = a + b

a が receiver。
+ がメソッド。
b が 引数になるイメージ?
そして戻り値で演算結果。

メソッドの種類

  • インスタンスメソッド
  • クラスメソッド
  • 関数的メソッド

インスタンスメソッド

其の名のとおり、インスタンスがreceiverとなるメソッド

3.times do |i|
  p "#{i}回目"
end

3 がインスタンス。
times が インスタンスメソッド。

クラスメソッド

f = File.open("hogefile")

File が クラス。
open がクラスメソッド。

関数的メソッド

こりゃなんじゃーと思ったけども、

puts "Hello"

これが関数的メソッドらしい。
receiver を持たないメソッド。
というか、receiver が省略されている。

receiver の状態によってメソッドの振る舞い方が変わんないよ!
ってなメソッドは関数的メソッドになる。

まとめ

オブジェクト指向を知らないと何言ってんだこいつ状態だと思う。
Javaのオブジェクト指向をエヴァで例えると超わかりやすい : IT速報
↑ これがわかりやすいかもしれない。

定義の仕方などは、長くなるので次回としますん。




たのしいRuby 第4版

たのしいRuby 第4版

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版