ページ 1 / 1
ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 11:13
by jay
ゲームプログラミングにおいて
例えば”画像を描画するフラグ”をオンかオフかで管理する場合
int型を使って"0"か"1"かで判断する方法と
bool型を使って"true"か"false"かで判断する方法、どちらが一般的なのでしょうか?
僕はほぼ100%前者を使っていますが、これは正解でしょうか?
それともこれも「その時に使われているコーディングルールによる」が正解でしょうか?
オフトピック
なるべく一般的な書き方をしようとすればするほど、こういう細かい所が気になってしまいます
そもそも一般的な書き方とは何なのか…
手元の参考書曰く「書いてはいけない書き方、つまり「間違い」はあっても
プログラムの書き方に絶対の正解はない、らしいですが(それも僕がそう読み取っただけで、そうとハッキリ記述されていた訳でもないですけど)
Re: ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 11:22
by softya(ソフト屋)
正しいか等はそのチームなどのコーディングルールに左右されますが、一般認識としてなるべく誤動作や誤操作しない書き方が望まれます。
なのでintの0/1などそれ以外の値もあり得る書き方よりもboolのtrue/falseの2値しか無い書き方が誤動作や誤操作を産まない書き方と言えます。
ただ、C言語のC90規格にはboolがそもそも無いので知らない人もいる訳です。
C++を知っている前提であればboolで問題がないと言えるでしょう。
【補足】
常に最善のコーディングかを考えるのは良いことですが、それで先に進めなくなる状態なら強引にでも先に進めたほうが良いですよ。
最善のコーディングはプログラミングを続ける限り一生の課題です。
Re: ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 11:48
by jay
虫の知らせを受け取ったので来てみれば、まさか本当にもう回答が投稿されているとは…(汗)
流石softyaさん、その投稿スピード…尊敬します(尊敬するとこ違うだろう)
本題ですが
やはり基本は「コーディングルールによる」なのですね
そして特にルールが無ければC++で書く限りbool型で問題はなし、と
これで僕が知りたい答えは手に入れることが出来ました
毎度毎度ありがとうございます
オフトピック
あるかどうか分からない正解を求めるよりは、自分なりの正解でいいから先に進む、ですか
確かに先日のクラスの名前の問題やオブジェクト指向プログラミングの手法も然り、こういうのを気にしすぎて作業スピードが落ちているのは実感しています
今はあまり背伸をやり過ぎずに、まずは今作っているモノをシッカリと完成させる事を第一に考えることにします
最善を考えすぎて先に進めなくなる状態なら強引にでも先に進めたほうが良い
これはプログラミングの大先輩からの助言として心に留めておきます
時には「これでいいか」のレベルで妥協しないと完璧主義の罠に嵌まるっ、てどこかで聞いたことがありますしね(笑)
Re: ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 13:51
by Dixq (管理人)
私もboolが正解だと思います。
フラグに限らず、たとえば関数の返り値にint型が使われている場合、
0か1が返ってくるようなケースと、
エラーの時は-1、それ以外は0が返ってくるようなケースがありますが、
いちいち関数リファレンスを見ないと何をキャッチしていいのかわかりません。
何が正解かで困った時は「知らない人にソースコードを渡した時、どちらが早く理解してもらえるか」つまり可読性を基準にしたらいいかもしれません。
Re: ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 18:06
by ISLe
C言語でbool型が無い場合だったら、WindowsSDKのBOOLみたいに定義して使ったら良いと思います。
#Win32 APIでは破綻してますけどね。
そのまんまbool,true,falseを定義して使っていけない理由も無いですし。
Re: ゲームプログラミングにおけるフラグ
Posted: 2012年6月24日(日) 20:27
by jay
>Dixqさん
なるほど、そういう基準があるのですね…
場合によってはホントに人に見てもらうのもいいかもですねぇ、プログラマーの知り合いは一杯いますし(笑)
ここの方々だけじゃなくて、先生やクラスメートに意見を聞くことだってできますしね~
”可読性を基準”にする、覚えておきますね
ありがとうございます
>ISLeさん
ゲームプログラミングはC++が主流なので、少なくとも今はC言語の場合を考える必要はないかな、って思いましたが
無ければ定義して使う、そういう対処法を覚えておいて損はないですね
ありがとうございます