2011年10月24日月曜日

Ruby のプログラムをほとんど書いたことが無いもので

Ruby の初歩的な文法やイディオムを知りません。

Rubyベストプラクティスを読んでいても「何だ、これ?」なことがたくさんあります。
この前書いた inject もそうでしたが、そのうち何回も出会いそうなので記録を残しておきます。

クラスのインスタンス変数

2章にこんなコードが出てきます:
class SortedList
  def initialize
    @data = []
  end
end
この時の @data のように冒頭に @ が一つついたものはインスタンス変数です。
Ruby でもこの用語でいいのかな?公式リファレンスに載ってた)

ちなみに

変数名の冒頭に @@ でクラス変数、 $ でグローバル変数、何もつけないのがローカル変数になります。
これで変数のスコープがおおよそ決まりますが、(特にローカル変数に関して)関数定義やコードブロックなどもう少し細かくスコープの区切りがある模様です。

変数の初期化

3章にこんなコードが出てきました:
@hidden_methods ||= {}
展開すると、意味が透けて見えてきます:
@hidden_methods = @hidden_methods || {}
Ruby の評価規則では、
  • 二項演算子 || は
    • 第一項を評価した値が nil または false の場合、第二項を評価し、その評価した値を返す
    • 第一項を評価した値が nil または false 以外の場合、第一項を評価した値を返す
  • 条件文を評価する際、nil または false 以外の値はすべて true と同等とみなす
となります。たぶん
なので、@hidden_methods が未定義である = nil である場合は、第二項の {} で初期化されます。たぶん

0 件のコメント:

コメントを投稿