if (hoge != false)というコードを職場で見かけました。

なぜわざわざ否定で評価しているか意図がわかる人いますか?

回答の条件
  • 1人5回まで
  • 登録:2013/02/20 19:41:54
  • 終了:2013/02/27 19:45:03

回答(4件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982013/02/20 19:52:43

設計書に falseじゃなかったら という記載があったからだと思います。

素直に そのまま コーディングしたものと思われますね。

id:office55

なるほど。そういう見方もありましたね。

2013/02/21 08:12:06
id:taknt

否定がイヤだという場合は
if (hoge = false)
else
・・・・

という書き方もしますね。

あえて 否定にしないで elseのほうだけ 記述するみたいな感じです。
これは 人によってだと思いますが。

2013/02/21 09:37:36
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492013/02/20 20:25:35

phpの関数の多くは失敗した場合にfalseを返すようになっています。

つまりはhogeを得るために実行した関数そのものが実行に失敗していないかどうかを判定するためにhoge != falseとするわけです。

id:office55

つまり、
「よもや、失敗はしていないだろうね?」
という、スタンスなのですね。なるほど。

2013/02/21 08:13:21
id:suenaga3 No.3

suenaga3回答回数19ベストアンサー獲得回数52013/02/21 00:36:25

もちろんif(hoge){}でもいいのですが、hogeがbool型でなければbool型を
返すために比較したくなるのが心情です。
(多少主観的ではありますが)

ところで、C言語の仕様では、falseの値は「0」、trueの値は「0以外」と
定義されています。
したがって「変数」trueの実体は仕様上は0以外ならどんな値で実装しても
いいのです。

そんな事情があるのでC言語の職人方は比較の場合にはfalseとの比較を
作法としています。

つまり、

1) 明示的なboolを返したいから比較評価はしたい
2) でも変数trueとの比較はしたくない

という理由からこのような形になります。

id:office55

0じゃないものという意味合いですね。

2013/02/21 08:15:28
id:suenaga3

Cでのおはなしでしたが、同様の実装があるphpやperlでもfalseとの比較を推奨します。
phpの論理比較(名前違うかも == の事です)とかだとtrue使っても影響なさそうですが。

yossiy7さんのおっしゃるとおり、Cでは定数true/false定義は実装必須ではなさそうですね。
実装されてない環境を知らなかったので、、、まだまだ若造です。

2013/03/02 19:48:43
id:yossiy7 No.4

勇者よっしー回答回数778ベストアンサー獲得回数962013/02/22 00:12:24

falseが-1とか気が狂ったプロジェクトを前に見た(int型だったよ!)。
そういうプロジェクトに長く居た後しばらくはそんなコーディングする癖がついてた。
>suenaga3さん
C言語でtrue/false定義してたっけ?と思ったら
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%AA%E3%82%A2%E3%83%B3%E5%9E%8B
C99からか……もう15年も前に定義されてたんだなぁ。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません