• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:else if文の順序を変えることに意味がありますか?)

else if文の順序を変えることに意味がありますか?

このQ&Aのポイント
  • else if文の順序を変えることで、条件判定の結果が異なる場合があります。
  • (2)の部分が実行されない原因は、条件判定の順序が逆であるためです。
  • (1)と(2)の順序を変えることで正しく実行されるようになりました。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

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 だけで十分です。

sutty
質問者

お礼

ありがとうございます。よく分かりました。 詳細な説明をしていただき非常に分かりやすかったです。 お世話になりました。

その他の回答 (3)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.4

もちろん大きな意味があります。 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の場合はココヘ来る。 }

sutty
質問者

お礼

丁寧な説明をしていただき、ありがとうございました。 よく分かりました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

あー、順序の話ですが(そっちが主題なのに忘れていた)、ifの判定は「書かれている順」です。 ですから、このケースでは順序を変えるだけで意図通りに動くようになった訳です。

sutty
質問者

お礼

どうもありがとうございました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

_root.get_tabacoはfalseでなければtrueに決まっているので、前者では最初の判定(==false)か次の判定(==true)のいずれかに必ずヒットしてしまいます。 ifの分岐はどれか一つに当たった時点で終わりなので、このときに最後の判定に入ることは絶対にありません。

関連するQ&A