トップページ⇒prog
45コメント14KB

TrueとFalse

■ このスレッドは過去ログ倉庫に格納されています
0001新入り NGNG
上司(と言うか会社のボス)に
「おまえの書いたコードだけ処理成功時の戻り値がTrueだ。直せ」
と言われたので、
「どうして処理失敗時の戻り値がTrueなんですか? 理由を教えてください」
と聞き返したら、
「C言語的に考えたら正はFalseだろ?」
と言われたので、
「単語の意味的に逆でしょ?」
と突っ込み返したら、返事に困ったのか、
「お前だけそれじゃあ困る。結果的に不具合が出ないコードを書ければいい」
と説教気味にまとめられました。
どこの教科書にそんな風に乗ってんですか? と聞きたかったのですが、
立場上怖かったので聞くのやめました。
MSDN見たってエラーはゼロ(False)だってのに・・・。
TrueとFalseが逆なら逆でそのルールに従うけども、理由が説明できないと
言うのは如何なものかと思いました。
他の所ではどうなっているか知りたいので教えてください。
気にしたら駄目なんでしょうか? それとも金が絡むとTrueもFalseになるんでしょうか?
0002名無しさん@1周年 NGNG
>「C言語的に考えたら正はFalseだろ?」

こ、これが意味不明だ… >1の上司
0003Akat NGNG
Win32APIエラーコードのERROR_SUCCESSや
NTSTATUSのSTATUS_SUCCESSが0で定義されている事から、
成功時はFalse論が出たんじゃないでしょうか?
0004名無しさん@1周年 NGNG
バカな上司の下で働くのって本当に頭来る事が多いです
自分の上司も、ちょっとおバカさんです
今日もヤツの気まぐれで2時間かけて本社に出社して
すぐに1時間かけて客先へレビューにいきました

自分の作った設計書なのに「説明は俺がするから、俺のわからないところだけ
補足説明してくれ」
いざレビューが始まったら自分の書いた設計書をただ棒読みしてるだけ。
しかも心の中で一人読んで納得して「あれが、こうなって、これが、ああなります」
なんて全然わかりません。
レビュー終了後、客先のマシン室で作業が出来るのでやろうと思ったら
「おまえは本社へ帰れ」と言われた。
どう考えても1時間かけて本社へ帰るよりもこのまま作業を続けたほうが
効率イイのに。。。
ほんっと あったまわりーなー
00054 NGNG
すみません 愚痴でした。
0006>4 NGNG
いや、いいんだ。
わかるぞ。
0007名無しさん@1周年 NGNG
成功は0でさ失敗の時はエラーコード返すんじゃないの?
1でも2でも3でもtrueじゃん

違ってる?>おれ
指摘してえらい人
0008。>7 NGNG
そういうことなんだろうけど、
TRUEとFALSEを逆に使ったら訳わからなくなる。

>1
>「お前だけそれじゃあ困る。結果的に不具合が出ないコードを書ければいい」
それなら、何でそろえる必要があるんだと聞き返したくなるよなぁ。

こういう使い方するなら、TRUE、FALSEは使わずに、
0をOKなりSUCCESSなりで定義して使うのがまっとうだと思うけど。
0009新入り NGNG
>7
間違ってません。Boolean型以外では。
エラーが複数ある場合は、ゼロが成功で、他の値がエラーコードになるけど、
Boolean型って「成功・失敗」の二択じゃないですか。
補足っぽいですが、指摘されたコードは、戻り値がすべてBoolean型でした。
整数型ならゼロ=成功だけど、ブール型は考え方がちょっと変わると思います。

仮にも一企業のボス、しかも現場で指揮を取っている人間が「俺がルールだ」的な
考えでいいのか? と思わされました。
0010名無しさん@1周年 NGNG
むかし
enum {
 TRUE@`
 FALSE
};
と、やられて困った;_;
0011。>9 NGNG
Boolean型でTrue@`False逆の意味で使ってるんですか。
それはまた・・・・・
実は、その上司は、True@`Falseの意味を知らなかったのでは?
0012名無しさん@1周年 NGNG
7です
怒られるかもしれないけどさ、聞くね
booleanってintじゃないの?
0013名無しさん@1周年 NGNG
>新入り
Boolean型でFalse == 「成功」、True == 「失敗」でいけない理由は何ですか?
0014名無しさん@1周年 NGNG
False == 「成功」、True == 「失敗」
って思うから単語の意味的におかしいって思うんでしょ
False == 「問題なし」、True == 「問題あり」
って思えば気持ちも晴れる

君も今日からは仲間達とコード規約も同じになれる
0015>9 NGNG
強いてその上司に好意的に解釈するなら
エラーの有無をBooleanで返すことを期待した。
(私は賛成しないが)
理由は前出のエラーコードをintで返す関数とあわせるため。
(ま、ちょっとだけ気持ちは分かる)
が、その説明をはしょりすぎた。「正はfalseだろ」=「負はtrue」。
すなわちその上司の頭には
0=正常
-1=なんかのエラー
-2=別のエラー
というモデルが念頭にあった。
「単語の意味が逆でしょ」との意見に、こいつは「エラーの有無でなく、
成功の可否をBooleanで返すモデルを考えているのだな」と感じた。
ただし他の関数が一貫して「エラーの有無を返す」使用になっているので
「おまえ(の関数だけ)それ(異なる仕様)じゃ困る。結果的に(他のプロ
グラマが混乱して不具合を起こしているので、他と統一して)不具合が
でなくなればよい」
ってとこかな?
0016名無しさん@1周年 NGNG
納期直前に、Booleanの関数は成功の可否を返すべきか、エラーの有無を
返すべきか、という議論は確かに避けたい気もする。

答えが出る議題でしかもそれが製品の役に立つなら議論する価値はあるが、
おそらく答えは出ないし、直接は製品に役に立たないから。

間接的には議論することで技術やお互いの考え方に対する理解が深まる
メリットはあるので、それは比較的ひまなときにやるのがよろしいかと。
0017新入り NGNG
的を得たたくさんの意見、ありがとうございます。
16の「成功の可否」か、「エラーの有無」かの2つの考え方で双方の考えが
食い違っていたために起きた問題ですね。
True=真(正しい)、False=偽(正しくない)的な考えだけで自分はものを
考えていたので・・・。

吐き出してみてすっきりしました(勉強にもなった)。
また納得がいかないことがあったら、愚痴りに来ます。んでは。
0018名無しさん@1周年 NGNG
終わった時でスマンが、「エラーかどうかを返す」
と言われたら「エラーなら真」だと思うが・・・・
正常かどうか と エラーかどうかは反対じゃないの?
0019名無しさん@1周年 NGNG
UNIX絡みでエラーレベルを返すから成功は0って話の出たスレッド、
どこだったっけ?
0020名無しさん@1周年 NGNG
実行環境に返す値は慣例的にそうだね。 >成功でゼロ

プログラム内では、
単に成功/失敗だけを返すなら「C言語的に考えたら」成功は非ゼロ(true)だね。
0021名無しさん@1周年 NGNG
>プログラム内では、
私も賛成だが、それを根拠を挙げて説明せよ、と言われると妙案が
思いつかない。。
0022名無しさん@1周年 NGNG
1の上司は真偽と成否をごっちゃにしてるね。
さらにいえば成否と正否もごっちゃにしてるね。
0023名無しさん@1周年 NGNG
>>21

確かK&Rに「ダメを表すのに0使うよ」みたいなこと書いてあったと思うが。
まあ、読み返してないので保証はせんが。

ifも0で不成立だしね。
0024名無しさん@1周年 NGNG
UNIXのシステムコールなら、0が成功で-1が失敗ってことが
多いよなぁ。エラーコードはerrnoに入ってる。
0025名無しさん@そうだ選挙にいこう NGNG
1が成功
-1が失敗
0は不定

厨房の煽りです、つっこんでネ♪
0026名無しさん@1周年 NGNG
true/falseで、エラーとか正常終了をあらわすのが間違ってると思うが。

intで返す場合はエラーコードって慣習的に0が成功のような気がする。
あ〜、でもNULLポインタ(=0?)は失敗を表すなぁ..。
0027名無しさん@1周年 NGNG
WindowsAPIのエラーコードでもNO_ERROR@` ERROR_SUCCESSは0Lだ。

いずれにしてもマジックナンバーである数値での比較は駄目。
表意定数にすべき。
0028名無しさん NGNG
VC++で作った関数(戻り値 true/false)を
C++から呼んで使っていた分には問題がなかったけど、
その関数をVBから呼ばせたらうまく動かない。
よく考えたら、CとVBではTRUEの値が違うんだな。
そもそも、result == TRUE なんて判定するなぁ。
result == FALSE か result != FALSE で判定しろって。
0029名無しさん@1周年 NGNG
それはVBが(以下略)
0030名無しさんZ80 NGNG
(前略)糞だからです
0031名無しさん@1周年 NGNG
VBに限らず、BASICは(以下略)
0032名無しさん@1周年 NGNG
>>25
0は未完成モジュールの返り値とすれば良い。
0033名無しさん@1周年 NGNG
>30
umai!
0034名無しさん@1周年 NGNG
>1
なんか、処理のエラーを返す関数と、True/Falseを返すBoolean関数を
混同して考えてない?
上司が言ってるのは前者の方で、True/Falseウンヌンは単に
1とか0とかの数字の事を表現したかったのだな。
0035汗ぶら NGNG
>処理成功時の戻り値がTrueだ。直せ」

>1が成功
>-1が失敗
>0は不定

どれにしたって
プロジェクトの崩壊が瞼に浮かぶ
かわいそうに。
0036名無しさん@1周年 NGNG
C++で例外機構使ってない人って結構多いの?

なんか使っちゃまずいことってあるんでしょうか?
トレードオフが大きすぎ?
0037名無しさん@1周年 NGNG
>36
(More)Effective C++読め!(信者)
003836 NGNG
>37
いや、そりゃそうなんだけどさ。

巷で例外使ってないC++のプログラムって
なんか違うでしょ?
0039名無しさん@1周年 NGNG
>36
もちろん例外使ってるよ。
でもコンパイラによっては細かなバグもあるから注意。
Tryブロックの中で、スタックにインスタンス作らない方が安全かも。
004025 NGNG
>>35
ツッコミさんきゅー。
ブラジャー外したいなら浮気すりゃええんとちがう?(笑)
0041名無しさん@1周年 NGNG
>35
そうとは思えないぞ。

>>1が成功
>>-1が失敗
>>0は不定

UIでよくあること。
1=成功
0=キャンセル
-1=失敗
0042名無しさん@1周年 NGNG
どっちみち「失敗」と「キャンセル」で大小比較できるような設計はダメだろ。

if( status > 0 ) MessageBox("成功しました" );

新人(仮定)がやりそうじゃん?
0043名無しさん@1周年 NGNG
そういえば最近、クラス仕様書のメンバ関数の説明に、エラーの場合
は例外を投げることをはっきり書いたのに、コアダンプするってバグ
レポートが来たっけなぁ…
0044名無しさん@1周年 NGNG
>42
状況に応じた処理が可能になるのだよ。

キャンセルか成功で処理が進められる場合は(status >= 0)
キャンセルも失敗に含める場合は(status <= 0)
004542 NGNG
オイオイ、んなこた判ってんの>>44=41
status==0 || status == 1
と書くべきだっつってんの。
大小比較したいなら戻り値を「ステータス」じゃなくて「成功率」にしなさい。
■ このスレッドは過去ログ倉庫に格納されています