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)

 なぜなら:

  1. 短いから見やすい
  2. 5行読まないと把握できない奴と1行読めばそれで済む奴だから...
  3. 条件分岐が少ないのでコストが安い
  4. ここで言う「コスト」は実行時間やプログラムの長さを言う
  5. 短いので書くのも楽だし、間違いようがない
  6. (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]