||=での初期化

あんまり初歩的な話を書くのも恥ずかしいのですが。

なーに、いつかすごいプログラマと呼ばれた頃には、「あのもぎゃさんにもこんな頃があったのね!」って感動される材料になるのさ♪


while true
foo ||= 0; foo += 1; puts foo; break if foo > 99
end



foo ||= 0 ってなに?そんな演算子はないよね?



…そうすると、これがパーサー(仮想マシン?Rubyの中の人^^;)からどう見えるかというと、たぶん、まず||が評価される。



fooは未定義なので、ここでのfooはfalse。orだから、falseだったら次を評価するはずで。

つぎって、”=0″。 orで評価している途中ですが、そこに0を代入。どこに代入???



と思ってリファレンスマニュアルをみていたら、書いてあった。

Rubyリファレンスマニュアル – 演算子式

foo += 12       # foo = foo + 12
a ||= 1         # a が偽か未定義ならば1を代入。初期化時のイディオムの一種。



ああ。なるほど。

つまり、foo ||= 0は

foo = foo || 0

こう評価されて、fooが未定義の場合、評価したらfalseだから、後ろが評価された0をfooに代入する。次にループで回ってきたときはfooが定義されているから、foo=fooとなって、実質何もしない。結果として変数の初期化ができる、と。



おお。ナルホド。勉強になりました。

携帯電話専門TV局Qlick.TV

携帯電話専門TV局Qlick.TV(クリック ドット ティービー)さんの取材を受けてきました。
SANY0039.JPG
取材といいつつ、ケータイ向けストリーミング放送の制作会社に行く機会なんてそうそうないので、僕らはその内部に興味津々。
「ページビューは?」などとこっちから質問しまくりでした(笑)
来週火曜日からケータイ魂で見られるそうですので、ドコモ携帯持っている方は、ぜひぜひ見てくださいませ。