『Git が、おもしろいほどわかる 基本の使い方33』

曇。
朝からいきなり Ruby の話なのですが、変数が定義されている(nil or false でない)とき、その変数の評価をしたい場合がありますよね。例えば

puts a if a > 0

とかです。これは a が定義されていない(nil or false の)場合、当然比較はできないのでエラー(NoMethodError)になります。これを回避したければ、比較の or (あるいは ||)をするとき、or の左側が true ならば右側が評価されないことが使えます。ちょっとわかりにくくなってしまいますが、上の例なら、a > 0 を否定し、!a (a の否定)と or にして、if の代わりに unless にします。これで a が比較できるときだけ、a > 0 が評価されます。

puts a unless !a or !(a > 0)

かなり技巧的ですが、Ruby には unless があるのでまだマシに書けます。unless がない言語だと、if !(!a or !(a > 0)) みたいに何だかわけのわからない書き方になってしまいます。
 困るのは、a == true の場合なのですよね。これも a は比較できないので、さらに技巧的だが

puts a unless (a == true) or !a or !(a > 0)

とすれば一括して処理できます。しかしここまでくるとわかりにくいですね。

図書館から借りてきた、『Git が、おもしろいほどわかる 基本の使い方33』にざっと目を通す。Git はよく知らなかったので、なかなか有用だった。ただ、本書は Bitbucket を使っていて GitHub でないので、GitHub 用の本もあるといいな。それから、本書は Linux を対象にしていないね(まあそりゃそうか)。市図書館の新着としてはいい方かな。


Python のスライスを Ruby で実装(その2) - Camera Obscura
Python のスライスを Ruby で実装するに、モジュールの Mix-in を使って Array だけでなく、String にも同様に実行できるようにしました。これがいわゆる「ダック・タイピング」の例ですね。Array と String が同じ名前のインスタンス・メッソドをもっていることを使っています。Mix-in は Ruby での多重継承です。(AM2:06)