- ベストアンサー
else if文の順序を変えることに意味がありますか?
- else if文の順序を変えることで、条件判定の結果が異なる場合があります。
- (2)の部分が実行されない原因は、条件判定の順序が逆であるためです。
- (1)と(2)の順序を変えることで正しく実行されるようになりました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if A ~ else if B~ else if C~.... は先頭から順番に評価しますから、とうぜん、順番に意味があります。 また、条件式には書かないことが多いですが、「直前までのifの条件が不成立で、かつ」という 条件が付いてます。 上の例なら else if B → if !A and B else if C → if !A and !B and C です。順番が変われば条件も変わってくることが解ると思います。 それをふまえてこのスクリプトを見ると A: _root.get_tabaco == false B: _root.get_tabaco == true C: _root.state_tabaco == 2 です。 ここで、A,Bに注目すると、通常、 a != false ⇔ a==true です。 つまり、 Aが成り立たなければ、必ずBが成り立ちます。 A→B→Cの順番で評価したら、 AかBかでどちらかが必ず成立つので、Cまで進むことはありません。 A→C→Bの順番で評価したら、 Bを評価する前にCを評価するので、Cの条件での判定ができます。 ついでにいうと、「○全て実行されます。」の方の最後の「else if(_root.get_tabaco ==true)」は条件が成立つことが明かなので、 else だけで十分です。
その他の回答 (3)
- JaneDue
- ベストアンサー率75% (263/350)
もちろん大きな意味があります。 else if(~) は 「それ以外で、もし~なら」ですよね。 _root.get_tabaco は true か false で判定すれば、そのどちらかしかないわけですから、 2の場合はもちろんtrue なので、else if(A==2){ に行く前に else if(A==true) で該当してしまいます。 ■ダメな場合 if( A == false){ //falseの場合ここで処理されて終わり。 }else if(A==true){ //trueの場合ここで処理されて終わり。2もここで該当。 //※結局、どんな値でもtrueかfalseに該当するので、これ以降に進むことはない。 }else if(A==2){ //それ以外で 2 の場合、だが 2はtrueですでに上で該当済み } ■うまくいった場合 if( A == false){ //falseの場合ここで処理されて終わり。trueの場合は下へ続く }else if(A==2){ //trueでも 2 の場合のみココで処理される }else if(A==true){ //それ以外で…つまり 2 以外で trueの場合はココヘ来る。 }
お礼
丁寧な説明をしていただき、ありがとうございました。 よく分かりました。
- D-Matsu
- ベストアンサー率45% (1080/2394)
あー、順序の話ですが(そっちが主題なのに忘れていた)、ifの判定は「書かれている順」です。 ですから、このケースでは順序を変えるだけで意図通りに動くようになった訳です。
お礼
どうもありがとうございました。
- D-Matsu
- ベストアンサー率45% (1080/2394)
_root.get_tabacoはfalseでなければtrueに決まっているので、前者では最初の判定(==false)か次の判定(==true)のいずれかに必ずヒットしてしまいます。 ifの分岐はどれか一つに当たった時点で終わりなので、このときに最後の判定に入ることは絶対にありません。
お礼
ありがとうございます。よく分かりました。 詳細な説明をしていただき非常に分かりやすかったです。 お世話になりました。