fetus Diary

2007/10/19(金) - 可読性

元ネタ

[問題] a ≠ b なら true, さもなくば false を引数として関数 int f(bool) を呼び、結果を c にセットしなさい。

まあ、良くある感じ。

私ならこうかな…。

c = f(a != b);

題意そのまま。バグの可能性なし、トリッキーなコードなし。C++ ならね。

比較演算子の戻り値が bool 型ではない(たとえば int 型)の場合は三項演算子で f( (a != b) ? true : false );。WINAPI みたいに引数が bool 型ではない(BOOL 型は int)場合は同様に f( (a != b) ? TRUE : FALSE );

大本までたどって @IT の掲示板

■の部分はif分の変化形なのでしょうか?

if(user != null){ loggedIn = user; }

って意味ですか?

user = logic.login(role, true);
■loggedIn = user != null;
if (!loggedIn) {
addError("Could not log in with these credentials");
}

優先順位と bool 型の問題みたい。比較演算子のほうが代入演算子より優先順位は高いので、loggedIn = (user != null); と等価だぁね。優先順位の高い比較演算子が実行された結果、bool 型の値になって、それが loggedIn 変数に代入される、と。

まあ、私は「この程度平気で読むけどやらない」人かな。足し算と掛け算の式で、掛け算のほうが優先順位が高いのはわかっているけどぱっと見の理解を助ける意味で括弧をつけることは良くある。あとは、たまに優先順位を間違って悲惨なことになる(ビットシフト演算子とか…)から予防のために。

コメント

コメントはありません。

名前
メール
コメント

※HTML タグは使えません。HTTP URL には自動リンクが張られます。

Captcha
画像から読み取れる文字を入力: