• ベストアンサー

この書き方はマズイんですか?

将棋やオセロのように、2人で対戦して必ず一方が勝者、他方が敗者になるゲームがあるとします(引き分けはありません)。これをプログラミングする場合、駒を打つなどプレイヤーの動作1つ1つが完了するごとに勝敗を判定するプログラムが動きます。とある本にそのプログラムが以下のように載っていたのですが↓ 例1: if (駒を打つ場所があるか == false){ 状態:ゲーム終了; return; } 状態:ゲーム続行; ↑この「状態:ゲーム続行;」の部分を以下のようにif文のelse以下に書いてはいけないのでしょうか?↓ 例2: if (駒を打つ場所があるか == false){ 状態:ゲーム終了; return; }else{ 状態:ゲーム続行; } ↑どちらにしろプレイヤーのステップが終わるごとにif文は通るので、処理の数に違いはないと思うのですが、かなりレベルの高い内容を扱った本だったので、例1のような書き方をしていたのも何らかの理由があるのかなと考えてます。両者のプログラムは実行時、なんらかの違いが発生するのでしょうか?

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

  • ベストアンサー
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.1

特にこだわりでもない限り、この様な場合はどちらでも同じ結果が得られるため、どちらで書いてもいいと思います。 個人的には例1のほうを使いますかね。 理由は、else{}を打つのが面倒くさいし、戻り値が必要な関数だった場合、returnがいちばん外側にひとつはないと落ち着かないから。あと、より「駒を打つ場所がない場合に限ってゲームを終了する」という意思表示がコード内に現れるような記述方法だから。 処理速度に関しても例1のほうが単純なため、若干速いような気もしますが、コンパイラによる最適化や現代のCPUの処理速度、また、それによる処理速度の変化の割合から考えて、気にするようなところでもないと思います。(処理速度に関しては、実際に問題になるまで気にしないほうがよろしいかと。)

その他の回答 (1)

  • Quux
  • ベストアンサー率57% (16/28)
回答No.2

ネストを深くしない、というのがプログラムの見通しを良くするコツだと思います。