ピッケル本を読む(5)第6章 さらにメソッドについて

メモ

以下のコードで疑問だったのが、何で return に達したときに一発でメソッドを抜けてしまわないかということ。

def meth_three
  100.times do |num|
    square = num*num
    return num, square if square > 1000
  end
end
p meth_three    #=>    [32, 1024]


試しに、if を無くしてみると…

def meth_three
  100.times do |num|
    square = num*num
    return num
  end
end
p meth_three    #=>    0


return の第2引数を nil にしてみると…

def meth_three
  100.times do |num|
    square = num*num
    return num, nil
  end
end
p meth_three    #=>    [0, nil]


if をずっと nil にしてみると…

def meth_three
  100.times do |num|
    square = num*num
    return num, square if nil
  end
end
# 何で99じゃないの?というより、return は何も返せないんじゃないかな?
p meth_three    #=>    100


うーん、よくわからん。要は、return に与えた全ての式が評価されなければ return しないってことかな?if修飾子を与えたときは、if修飾子の左辺の式が評価されたときに return が作動するのかな。とりあえずあまり気にしないで先に進む。

  • Rubyの慣習では、文字列の代わりにシンボルを使うことが普通らしい
  • シンボルを使ったほうが、何かの名前を参照しているのだということが明確になる
# 文字列を使った例
list.create_search('short jazz songs',
  'genre'              => 'jazz',
  'duretion_less_than' => 270)

# シンボルを使った例
list.create_search('short jazz songs',
  :genre              => :jazz,
  :duretion_less_than => 270)

まとめ

メソッドの少し細かい話について学んだ。p71 の「ブロックをもっと動的にする」という項が面白かった。ブロックをうまく使えば、きれいに読みやすいプログラムがつくれそう。