孤独プログラマー譚

孤独死が近い。

おまえのif文は間違っている

過激なタイトルだが…

以下のような if 文をよく見かける。

if has_white_skin && is_good_looking
  p 'まいやん' # 色白で美人なのが、まいやん
elsif has_white_skin && is_cute
  p 'さゆにゃん' # 色白で可愛いのが、さゆにゃん
end

ありがちだが、クソである。以下はもっとクソである。

if has_white_skin
  if is_good_looking
    p 'まいやん' # 色白で美人なのが、まいやん
  elsif is_cute
    p 'さゆにゃん' # 色白で可愛いのが、さゆにゃん
  end
end

今後、スパゲティコードとして成長していくことが目に浮かぶ


まず大切なのは、この処理には「白石麻衣」の場合と「井上小百合」の場合、その2通りの状態があること。

白石麻衣は「色白で美人」である。だが、どのような条件で「白石麻衣」と判断するか…それはどうでもいい。

大切なのは「白石麻衣」という状態が存在することだ。

状態を判断:色白で美人(どうでもいい)
↓
状態:白石麻衣(大切)
↓
処理:まいやん(ニックネーム。どうでもいい)


下の処理を見てみると、状態を判断(どうでもいい)と、処理(どうでもいい)だけしか書かれていない。

if has_white_skin && is_good_looking
  p 'まいやん' # 色白で美人なのが、まいやん

「状態が白石麻衣」であることは、どこにも書かれていない。
これを初めて読んだ人は「は?これ何について書かれているの?」となる。


以下の書き方が正解となる。

if has_white_skin && is_good_looking
  who = '白石麻衣'
elsif has_white_skin && is_cute
  who = '井上小百合'
end

if who == '白石麻衣'
  p 'まいやん'
elsif who == '井上小百合'
  p 'さゆにゃん'
end

「状態の判断」と「処理」が分離された。
状態として、「白石麻衣」と「井上小百合」の2パターンが存在することが見て分かる。