shizuto on languages

言語好きの組込みプログラマが言語から言語じゃないものまで語ります。On y va!

好きなメソッドは zero? nonzero?

!مرحبا
今年はじめた言語はアラビア語です、しずとです。

さて、Ruby界隈では好きなメソッドを聞くのがお決まりのようです。

前回のRuby勉強会@関西のフリートークセッションでも自己紹介のポイントに「好きなメソッド」が挙げられていました。配列操作の map, inject とかが人気ありますね。Railsの影響もあってメタプログラミングがだいぶ使われるようになって、 method_missing とか instance_eval とかもよく登場します。それで僕の好きなメソッドは、はてなんだろうと考えてみました。

  • Numeric#zero?
  • Numeric#nonzero?

さて、これを使ってリファクタリングみよう。まずは元のコード。

# Before
do_something if a == 0
do_something if a != 0

あと。

# After
do_something if a.zero?
do_something if a.nonzero?

大概の人は比較演算子のほうがなじみがあると思うし、僕もそう。そして zero? とかに変えて動作が変わるわけでもない。(いじわるなコード書かない限りね) でも、このメソッドは標準に入っているわけで。

まあ、何が言いたいかというと、コードというのはただコンピュータに仕事をさせるだけでなく、意図を書けというのを教えてくれたメソッドだということです。意図が a == 0 なのか a.zero? なのか問いかけるわけです。その結果、好きなメソッドではあるけどそんなに使うことはないのです。