本当は怖いHPC

HPC屋の趣味&実益ブログ

if not と unless の使い分け

周辺で話題になったので書いておく。if notとunlessをどう使い分けるか。

検索してみると、青木さんのRubyCodingStyleや、前田さんのRubyコーディング規約などが目に付く。どうやら、世間での標準は、「使えるところではなるべく unless を使い、if not は使わない」ということらしい。

が、僕の場合はちょっと違うので書いておく。他にもこういう人はいるだろうか?

正常処理の分岐にはif not、異常処理にunless

使い分けは簡単明瞭(だと思う)。正常処理の分岐にはif not、異常処理(例外処理)にはunlessを使うというもの。また、if文を使って正常と異常を分岐する場合は、どんなときでも if <正常> else <異常> end となるようにしている。notが入ろうが入るまいが。

このようにする理由はいくつかある。上から順に大きな因子。下に行くほど、いわゆる"消極的な理由"だ。

  1. このように使い分けることで、処理の内容と例外処理の箇所が明瞭になる。
  2. エラー処理の場合、常に(どんなに複雑な条件式であろうが)、unless <正常状態> then raise エラー end という風に統一して書くことが出来る。assert に似てるかも。
  3. unless 文に or や and が入ると、理解しづらい。and や or が入った時点で if に切り替える、という意見も聞いたが、だったら最初から if で書く。
  4. 「〜でない場合〜」というほうが、思考的に自然。ワタシニホンジン、エイゴワカラナイ(誰
  5. unless 文に else が付くとわかりづらい
  6. unless のほうが簡潔、という意見も聞くが、文字数は一緒。
  7. 「機能があるからなるべく使う」というのは好きではない。if not を unless にする積極的な理由があまりない。
  8. 青木さんは if と unless どっちを使うか。 unless が使えるときは積極的に使う。 else も入ってきたら重要なほうが前に来るように使いわける。と書かれているが、節の順番は if not と unless の選択には関係ない
  9. if notを使ってると馬鹿っぽい、という意見も聞くが、そんなの関係ねぇ
【広告】