たのしいRuby 第19章 演算子

ちと,Vimで遊びすぎてしまった・・・反省。

最近、はてなの情報量に驚きます。googleで情報が無い!!と思ったら、はてな以下のページを探るとゴリゴリ出てきます。はてなは、プログラマの巣窟っすね。移転してきて良かったぁ。

さて、今日は演算子に入ります。プログラミング言語の教科書でこんなに最後の方に演算子の説明があるのも珍しい。Ruby演算子は案外複雑なので、混乱を招きそうです。

論理演算子

練習問題の解答で、

dir = ARGV[0] || "."

というテクニックが多用されてました。引数が指定されていなければ、初期値を代入する。

if文で書くと、

if ARGV[0] != nil
  dir = ARGV[0]
else
  dir = "."
end

条件演算子で書くと、

dir = ARGV[0] ? ARGV[0] : "."

論理演算子を使った方がスッキリしますね。

配列が定義されていたら、最初の値ををitemに代入

item = nil
item = array && array[0]

これもよく使うらしいです。

普通はitemにtrueとかfalseが入るのですが、Rubyの場合値が入っちゃいます。不思議です。難解です。

自己代入

foo = foo || "bar"

なら、

foo ||= "bar"

ナルホド。

Rubyには++,--演算子が無い。実装してほしい・・・

本当に++演算子は無いのか!?

本当に++演算子が無いのか!?と思って、Rubyソースコードを眺めてみた。Rubyソースコードは本当に読みやすい。順を追っていけば、目的地に辿り着く。

Ruby構文解析にはyaccを利用している。6000行もあるが、結構読みやすい。字句解析はゴリゴリ、yylex()でやっている様子。非常に上手くまとまっていて、ハックしやすそう。

で、++を調べる・・・フムフム・・・yylex()のcase '+'を見る。+,+=しか評価していない。Rubyには++演算子は無いみたい。

僕にできることは、概要を理解する程度だけど、本物のソースコードを読むのは楽しい。

...(続く

追記

どうやら、Lispからの流れらしい。nil,false以外は全て真。&&,||は最後に評価したときの値を返す。

Lispっぽいです。