先日、インストラクターのネタ帳で以下の記事が公開された。
これに対し、エクセル セミナー 講師の山岡さんから、If文の条件が重複しているとのツッコミが。
Twitterで若干議論したのですが、
条件の重複は、絶対にダメなんです。
そこは初心者に分かりやすいとかという問題ではないんです。
それは現実社会とプログラムの世界を別としてとらえているからなんです。
If tmp < 50... http://t.co/TU8qgPHW0E
— エクセル セミナー研修すごい改善 山岡 (@yamaoka_ss) 2015, 2月 27
話題になっているのは以下のコード。
If tmp < 50 Then ElseIf 50 <= tmp And tmp < 70 Then ElseIf 70 <= tmp And tmp < 85 Then ElseIf 85 <= tmp Then Else End If
山岡さんはおそらく「50 <= tmp」を「50 < tmp」と書き換えてしまうリスクを懸念されているのではないかと思う。
私も業務で色々とマクロを書いてきたので、条件の重複は思わぬバグを生むという点は納得できる。
さて、この後のインストラクターのネタ帳で、反駁記事が公開された。
該当箇所はこちら
マクロ初心者の中に、
If tmp < 70 Then
ElseIf tmp < 85 Then
のElseIfが、AND条件になっていることを納得し辛いという方が、やっぱりいらっしゃいます。そんな場合に、より文章に近い、
ElseIf 70 <= tmp And tmp < 85 Then
と書くことを、頭ごなしに否定すべきではないと考えています。
これはこれで確かに納得できる部分がある。
VBAを始めたばかりの初心者の方が、ネットで調べて目の前の業務をなんとかやっつけるというシチュエーションであれば、まずコードが動いた瞬間の喜びを味わって欲しいと思う。
その前提に立つと、この書き方はダメで、こうすべき、なぜなら~というのは、本当の初心者にとっては些細なことで、もう少しVBAが使えるようになってから覚えれば良いのではないか。
バグが出たら出たで、なぜそうなったのか考える材料になるのでそれも良いんじゃないかと思う。
また、IfからElseIfまでが一画面に収まらないようなケースでは、あえて書くことでメンテナンス性が良くなるとの意見も書かれている。なるほど!それのメリットは思いつかなかった。すごい。
ただ、ネットのサンプルを盲信してコピペ&微修正だけでプログラムを組み立てるケースもあり、クリティカルな作業にバグを混入させることもあるので、将来大きいプログラムを作ることになる人に向けて予防線があれば良かったのかもしれない。山岡さんの指摘を受けて伊藤さんがきちんと中~上級者へ向けて説明記事を書いているので、良い議論だと思う。
ここから先の議論は(あるとすれば)平行線をたどると思うので、何が正解というのは読んだ人が考えれば良いんじゃないかな。
考えるキッカケを与えてくれたお二人に感謝。