楽屋裏 - Else If

楽 屋 裏
e-Gadget


思い込みとは怖いものだ。

Ifにまつわる話です。

これまで、Basic言語一般で使える記法 ElseIf が、CasioBasic には無いので、Else If は可読性が悪くなって使えないものとばかり思っていたのですが、思い込みだと言うことが分かりました。

Else If は結構使えます!


何のことかと言えば...

変数Eが、0、1、2、3 と異なる値になるとき、Eの値に応じて処理を切り替える...これは、Else If と言う記法を使えば、見やすいプログラムが書けるのですが、それが出来ないと思っていたばっかりに、確かめもせずに、If 文の入れ子構造が複雑になって使えず、不便だなぁ、と...

Else If の入力方法は、単に ELSE を入力し、続けて If を入力するだけです。

Else If を使えば、以下のように可読性を犠牲にせず、スッキリと書けます。

If E=3:Then
[処理3]
Else If E=2:Then
[処理2]
Else If E=1:Then
[処理1]
Else If E=0:Then
[処理0]
IfEnd
IfEnd
IfEnd
IfEnd


但し、If と同数の IfEnd を最後にまとめて書きます。


このように便利な Else If は使えないと思っていたので、Goto / Lbl を使って同じ構文を作って使っていました。Goto を使うのは出来れば避けたいところですが、正しく使えば役に立つ事例として、私は考えていました。

E=3⇒Goto 3
E=2⇒Goto 2
E=1⇒Goto 1
E=0⇒Goto 0
Goto Z

Lbl 3
[処理3]

Goto Z

Lbl 2
[処理2]

Goto Z

Lbl 1
[処理1]

Goto Z

Lbl 0
[処理0]

Goto Z

Lbl Z



一時の恥は一生の得 ということで、これからは Else If を必ず検討しようと思います。

懺悔にも近いこんなことを書いたのは、少し前 藤堂様 とのやりとりで、Goto は用法・用量を守って正しく使えば良い、と私の主張をし、その効用の1例として、上の複数条件分岐を例として挙げたのです。

それを、キチンと訂正したいと思ったので、別エントリーに書くことにしました。

藤堂様、失礼しました。


但し、一言だけ言い訳をしますと、

switch(E) {
    case 3:
       
[処理3]
        break;
    case 2:
        [処理2]
        break;
    case 1:
        [処理1]
    case 0:    
        [処理0]
}


といった、C言語の処理は、Else If では出来ないのです。

case 3:case 2: では、break; がありますが、case1:case 0: では break; が省略されています。
break; によって siwtch( )文を抜けます。

Eが3や2、そして0 の時は、それぞれ対応する処理を行います。

ところが、Eが1の時は [処理1] に続いて [処理0] を行います。[処理1] の後に break; が無いためです。

私が作った構文では、Goto Zbreark; に相当するので、C言語と同等の柔軟性がありますが、Else If の記法 にはそのような柔軟性が有りません。

このように break; を省略するのを fall through (フォールスルー) と言われます。個人的には柔軟性があって良いと感じていますが、プログラミングスタイルとしてフォールスルーを推奨しないことが多いと聞いています。break; が本来入るところを例外的に入れないと、他人がソースを見たとき、あるいは時間が経って身分でソースを見直すとき、必要なのに入れ忘れたのか、不要だから入れないのかが明確に分かりません。つまりバグの温床になるからです。

つまり、goto を使った複数条件分岐の記法は、フォールスルー処理ができる柔軟性に利点がある、という主張は危険な発想だと告白しておきます。





(言い訳終わり) (^^;)


...と言うことで、CasioBasicコマンドリファレンスIf 文 の項目も修正しました。

但し、Goto は用法・用量を守って正しく使いましょう! は撤回せずにおきます。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-5800PCasioBasicElse If複数条件分岐プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR