PETROOM大改造
【萌え萌えキャラクターズと遊ぼー。】

if,elsif,elseの関係を理解しよう

よく頂くご質問の中に、if,elsif,elseの関係があります。
また、これが原因でエラーが出ている方も、結構いらっしゃいます。

ということで、ここで一発、if,elsif,elseの関係を理解してしまいましょう!
(…おいらの文章による説明を理解する方が難しいかもしれませんが(^^;)



まず、一番簡単な使い方。

    if (条件) { 処理 }                              

もし条件が揃ったら、処理を行う、という意味ですね。
処理が一つの時はカギカッコは省略できますが、
分かりづらくなるので、とにかく付けるようにしましょう。



次にここで、elseを使ってみます。

    if (条件) { 処理A }                            
    else      { 処理B }                            

もし条件が揃ったら、処理Aを行い、
揃わなかったら、処理Bを行う、という意味です。
elseより前に必ずifが必要です。

ifだけの時は、処理が行われるときと行われないときがありますが、
elseが付くと、処理Aか、処理B、どちらかが必ず行われます。
これは、大丈夫ですよね、きっと。



ではいよいよ、elsifを使ってみましょう。
と、その前に、こちらをご覧下さい。

    if     (条件A) { 処理A }                      
    if    (条件B){ 処理B }                      
    if    (条件C){ 処理C }                      
    else            { 処理D }                      

    処理E

まず、条件Aが揃っているか調べ、揃っていたら処理Aを行う。
次に、条件Bが揃っているか調べ、揃っていたら処理Bを行う。
次に、条件Cが揃っているか調べ、揃っていたら処理Cを行う。
(条件Cが揃っていなかったら処理Dを行う。)
処理Eへ移行する。

となります、これは大丈夫、ですよね?
上から順番に条件が揃っているかどうか、調べていくのですが、

処理Aは、条件Aが揃ったときだけ行い、
処理Bは、条件Bが揃ったときだけ行い、
処理CとDは、条件Cにより、どちらかが必ず行われます。

つまり、1行目と、2行目と、3/4行目で、3つのブロックが別れているというか、
それぞれ別のグループなんです…。

このうち、真ん中2つをelsifに変えてみますと…、

    if     (条件A) { 処理A }                      
    elsif (条件B){ 処理B }                      
    elsif (条件C){ 処理C }                      
    else            { 処理D }                      

    処理E

まず、条件Aが揃っているか調べ、揃っていたら処理Aを行い、処理Eへ移行する。
条件Aが揃っていなかったら、次に条件Bが揃っているか調べ、揃っていたら処理Bを行い、処理Eへ移行する。
条件A、Bが揃っていなかったら、次に条件Cが揃っているか調べ、揃っていたら処理Cを行い、処理Eへ移行する。
条件A、B、Cが揃っていなかったら処理Dを行い、処理Eへ移行する。

と、ガラッと意味が変わってしまうのです。
ちなみにelsifも、else同様、前に必ずifが必要です。

処理Aは、条件Aが揃ったときに行い、
処理Bは、条件Aが揃ってなくて、さらに条件Bが揃ったときに行い、
処理Cは、条件AとBが揃ってなくて、さらに条件Cが揃ったときに行い、
処理Dは、条件AとBとCが揃っていなかったら行われます。

つまり、elsifをはさんで、ifからelseまでが、1つのグループになるのです。



分かりましたでしょうか?(^^;;;
もう、本当にごめんなさい、どうして上手く説明できないんだろう…。
ちなみに、elseは、必ず必要なわけではありません。
全ての条件が揃わなかったら、何もしないで、素通りするだけになります。






ではでは、練習問題(?)といきましょうか。

    if     (条件A) { 処理A }                      
    if     (条件B) { 処理B }                      
    elsif (条件C){ 処理C }                      
    if     (条件D) { 処理D }                      
    else            { 処理E }                      
    if     (条件F) { 処理F }                      
    elsif (条件G){ 処理G }                      
    elsif (条件H){ 処理H }                      
    else            { 処理I }                      
    if     (条件J) { 処理J }                      
    elsif (条件K){ 処理K }                      

うわぁ…楽しそうですねっ(爆)

ここで、条件Cと、条件Fと、条件Hだけが揃っているとします。
さて、行われる処理は、どれでしょう?



正解は、

処理C、処理E、処理F、処理K、です。

分かりましたか?

これを分かりやすく、グループ分けしてみますと、


    if     (条件A) { 処理A } 第1グループ        


    if     (条件B) { 処理B }  第2グループ        
    elsif (条件C){ 処理C }                      


    if     (条件D) { 処理D }  第3グループ        
    else            { 処理E }                      


    if     (条件F) { 処理F }  第4グループ        
    elsif (条件G){ 処理G }                      
    elsif (条件H){ 処理H }                      
    else            { 処理I }                      


    if     (条件J) { 処理J }  第5グループ        
    else            { 処理K }                      

第1グループは、条件Aが揃っていないので、素通り。

第2グループは、条件Bが揃っていなくて、条件Cが揃っているので、処理C。

第3グループは、条件Dが揃っていないので、処理E。

第4グループは、条件Fが揃っているので、処理Fを行い、あとは素通り、条件G、Hは無視。

第5グループは、条件Jが揃っていないので、処理K。



スクリプトを書くときは、こんな風に間を開けたり、
段落を付けたりして、自分でグループがよく分かるようにしておきましょう。






おまけですが、これはエラーになりますので、注意。

エラー例

    if     (条件A) { 処理A }                      
    else            { 処理B }                      
    elsif (条件C){ 処理C }                      

elsifに対応するifがない(上のifはelseとの対応)





    if     (条件A) { 処理A }                      
    else            { 処理B }                      
    else            { 処理C }                      

下のelseに対応するifがない(上のifは上のelseとの対応)



うーん、分かりました?(^^;