人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

if (hoge != false)というコードを職場で見かけました。
なぜわざわざ否定で評価しているか意図がわかる人いますか?

●質問者: office55
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● きゃづみぃ

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

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


office55さんのコメント
なるほど。そういう見方もありましたね。

きゃづみぃさんのコメント
否定がイヤだという場合は if (hoge = false) else ・・・・ という書き方もしますね。 あえて 否定にしないで elseのほうだけ 記述するみたいな感じです。 これは 人によってだと思いますが。

2 ● うぃんど

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

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


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

3 ● suenaga3

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

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

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

つまり、

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

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


office55さんのコメント
0じゃないものという意味合いですね。

suenaga3さんのコメント
Cでのおはなしでしたが、同様の実装があるphpやperlでもfalseとの比較を推奨します。 phpの論理比較(名前違うかも == の事です)とかだとtrue使っても影響なさそうですが。 yossiy7さんのおっしゃるとおり、Cでは定数true/false定義は実装必須ではなさそうですね。 実装されてない環境を知らなかったので、、、まだまだ若造です。

4 ● 勇者よっしー

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年も前に定義されてたんだなぁ。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ