[H8-ML(4733)] Re: if文の書き方
From: FUJIHARA Keiichi <keiichi@xxxxxxxxxxxxx>
Date: 2004年05月10日(月)12時45分11秒
藤原と申します。

This message is reply to Mitani Hiroshi - san
(Subject was : [H8-ML(4730)] if文の書き方)

Message-ID: <409EE5AA.2090902@xxxxxxxxxxxxxxxx>
in Mon, 10 May 2004 11:15:06 +0900 ...

普通は、Aの方がよいです。
それは、Bのような、if...if のネストは、すぐにわかりにくくなるから

> ・プログラムA
> if(エラー条件1)
>     エラー処理1
> else
>     if(エラー条件2)
>         エラー処理2
>     else
>         正常処理
>     endif
> endif

この場合、C言語だとしたら、字下げは

 if(エラー条件1)
    エラー処理1
 else  if(エラー条件2)
    エラー処理2
 else
    正常処理

とかいたほうがわかりやすくなります。
そうすれば、エラー条件が増えても、見かけ上の複雑さは増加しませんから。
これが、Aのタイプの長所ですね。

if (エラー条件1) エラー処理A
else if (エラー条件2) エラー処理B
else if (エラー条件3) エラー処理C
else if (エラー条件4) エラー処理D
else if (エラー条件5) エラー処理E
else 正常処理

でも平気です。
また、それぞれのエラー条件が実は独立していると言うこともすぐにわかります。

※そういうわけで、endif を要求する言語だと、大抵、 elseif という
(else と if ではなくて)キーワードを持っていますね。

逆に、Bの場合は、if ... if というネストがあるので、条件が増えると、
かなり理解に苦しむことになります。

if (! エラー条件1)
  if ( ! エラー条件2)
    if (! エラー条件3)
      if (! エラー条件4)
         if (!エラー条件5)
            エラー処理A
         else
            エラー処理B
      else 
         エラー処理C
    else 
      エラー処理D
  else
     エラー処理E
else
  正常処理


if...if の連鎖は、(実質的には関係なくても)ひとつ上のレベルの
条件を覚えておく必要があるので、理解が大変になります。
また、いかにも、相互のエラー条件が依存関係にあるように見えませんか?

エラー処理Dが実行される条件は?

-- 
_/ -- Last  2294 hours until ATHENS 2004 Olympic Games -----------------
_/ FUJIHARA Keiichi
_/ E-Mail : keiichi@xxxxxxxxxxxxx <or> nagi@xxxxxxxxxxxxxxx
_/ URL    : http://www.keiichi.fujihara.name/
----------------------------------------------+----- Luna Phase 20.78 --
PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178  C348 CD65 7F08 D68F 69F6


スレッド概略
[4730(R)](起点)
 └[表示中]
   └[4734(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]