Short cut: [Prev] [Up] [Next] [Return to Top]
見やすい、分かりやすいコーディング? (1996.Oct.30)
プログラミングを考える。ということで暫くの間、不定期に連載します。必ずしも正しいことばかりでなく、妙なことを書くかもしれません。その場合はどんどん意見をmailして下さい(歓迎します)。
さて。先ずこのコーディングをごらんあれ。
If IsNull(sFlag) Then
bTmp = True
Else
bTmp = False
End If
どう思います?(スクロールさせる前にちょっと考えて欲しい)
私なら多分こう書く。
bTmp = IsNull(sFlag) '---(1)
なぜなら:
- 短いから見やすい
5行読まないと把握できない奴と1行読めばそれで済む奴だから...
- 条件分岐が少ないのでコストが安い
ここで言う「コスト」は実行時間やプログラムの長さを言う
- 短いので書くのも楽だし、間違いようがない
(1)のコーディングだと「bTmp」が1度しか出てこないので、それだけタイプミス、変更ミスが入る可能性が低くなる。
ではこれはどうでしょう。
If iTst = 0 Then
bFlg = True
Else
bFlg = False
End If
(1)と同様に書き換えると:
bFlg = (iTst = 0) '---(2)
文法的にも動作的にも何も問題はない。「iTst」が0の時は(0 = 0)が評価されてTrue、つまりbFlgには-1が代入される事になる。
同様に、
bFlg2 = (iTst > iMin)
もできるし、
bFlg = iTst = 0 '---(3)
でも同じこと。
だがしかし。(3)の書き方には問題がある。VBでは確かに「iTst」と0が比較された結果の値、TrueかFalseが「bFlg」に代入される。でもC言語では「bFlg」と「iTst」の値は共に0となる。
つまりC言語の経験者が(3)を見た時に
bFlg = (iTst = 0)
だと思わず、
bFlg = 0: iTst = 0
という代入だと勘違いしてしまう可能性があるのだ。
よって、個人的には(1)の書き方は推奨する。(3)は認めない。(2)は「分からない」と、書いておく。決めるのはこれを見た、「あなた」である。
Short cut: [Prev] [Up] [Next] [Return to Top]