if文

else ifを使ったら最後に必ずelseが必要だと思っていた。恥ずかしながら。

if (cond1) proc1();
else if (cond2) proc2();
else proc3();

みたいな。
ここで、もし、proc3で特に何もやることが無い場合、

else nop();  // nop()は何もしない関数

とか、

else { /* nop */ }

みたいに、気が進まないけども書いてしまうということを知人に言ったら、

if (cond1) proc1();
else if (cond2) proc2();
else proc3();

if (cond1) proc1();
else
{
  if(cond2) proc2();
  else proc3();
}

は同じだから、何もしないelseなんて書かなくても良いよ、と言われた。

あぁ、確かに!今頃気づくなんて!


そういえば、else ifを使わない場合、つまり

if (cond1) proc1();
else proc2();

でproc2が何もしない場合は、単に

if (cond1) proc1();

って書いてて、elseが無いことを気持ち悪いなんて意識したことは無いのにな。

if (cond1) proc1();
else if (cond2) proc2();
else if (cond3) proc3();
else proc4();

if (cond1) proc1();
else
{
  if (cond2) proc2();
  else
  {
    if (cond3) proc3();
    else proc4();
  }
}

として見るのって、

(foo bar baz qux)

(foo . (bar . (baz . (qux . ()))))

と見るのに似てるっぽい!?
枝が多い木だと思っていたら、実は深い2分木だったのね。


いまさら文法で再発見があるとは思わなかったので、非常に新鮮な気持ちだなぁー。