プログラミングRuby第2版言語編第2章

Rubyオブジェクト指向です^^

値なども、それに対応するクラスのメソッドを呼べちゃう

irb(main):001:0> "mageres".size
=> 7
irb(main):002:0> -2501.abs
=> 2501

値もオブジェクトってことでいいですか川平さん!

  • 「値」はすべて「オブジェクト」と呼ぶ
  • 「オブジェクト」の「メソッド」を呼べる。「オブジェクト」は「メソッド」が呼ばれると自分に合わせた処理を行う。
  • 「オブジェクト」は「クラス」に所属する。
  • 「オブジェクト」が持つ「メソッド」は(原則的に)その所属する「クラス」で決まる。
http://www.rubyist.net/~matz/20030729.html

い い ん で す

メッセージ・メソッド・レシーバ

method = あるクラスのオブジェクトがどのように振る舞うかをクラスに記述したもの
message = メソッドをオブジェクトの外側から呼び出すためのメッセージ
receiver = メッセージを受け取るオブジェクトのこと

http://sound.jp/supako/x/ooponsc.html

文字列リテラル

シングルとダブル
  • シングルクオーテーションを使った場合
    • 特にどうということはない、そのまま解釈
  • ダブルクオーテーションを使った場合
    • バックスラッシュで始まる置換シークエンス云々
    • 要するに改行なら「\n」を解釈する
irb(main):003:0> puts "絶対に\n許さないよ!"
絶対に
許さないよ!
irb(main):004:0> puts '絶対に\n許さないよ!!'
絶対に\n許さないよ!!
    • 式の展開なども行う #{変数}
irb(main):005:0> justice = "正義"
irb(main):006:0> puts "それが俺の#{justice}"
それが俺の正義

いろいろしたけりゃダブルクオーテーション使えと。

文修飾子

if 文や while 文の中が1行なら文修飾子が使える

irb(main):001:0> yuuko = "isako"
irb(main):002:0> puts yuuko.crypt("4423") if yuuko != "yasako"
44lHH1gPKNKa2

これは良いな。

コードブロック

「これは非常に面白く重要な機能」らしい
2種類のデリミタがある、がデリミタってなんぞ。

「delimiter」は「区切り文字」の意味です。

http://www.intel.co.jp/jp/business/glossary/5783614.htm

ブレース(中かっこ)か do...end で囲む。使い分けとしては特に決められてはいないが、中身が1行であればブレース、複数行なら do...end、とするのが Ruby での習慣らしい。

手順
  1. メソッドの呼び出しにブロックを関連づける
  2. メソッド内で yield 文を実行すると、関連づけられたブロックが実行される
その他
  • yield で何回でも呼び出せる
  • yield にパラメータを指定するとブロックに渡される
irb(main):001:0> def hokkahoka
irb(main):002:1>   yield(1, 2)
irb(main):003:1> end
irb(main):004:0> hokkahoka{|former, latter| puts former + latter}
3