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分木だったのね。
いまさら文法で再発見があるとは思わなかったので、非常に新鮮な気持ちだなぁー。