先週Letを書いたあと、あることに気付きました。
「自分がCでif ((fp = fopen(…)) == NULL)の形を好きに思わないのは、BASICでそういう風に書けないということが影響しているに違いない」
周りには上のような形で書く人が多いのですが、いつも私はそれを避けてこんな感じにしています。
//その1 FILE* fp = fopen(...); if (fp == NULL) //その2 if (FILE* fp = fopen(...)) //C++限定 |
その2ではfpがNULLでないときに真となります。その1と真偽が逆になっていることに注意してください(2008年2月21日追記)。
私が嫌う条件は、条件文内の比較式の片方が代入になっているというパターンに当てはまるときです。
int ch; while ((ch = getchar()) != EOF) { //…… } |
上のようなコードも書籍ではよく見かける気がしますが、私ならこう書きます。
for (;;) { int ch = getchar(); if (ch == EOF) break; //…… } |
もっとも、BASICでif ((fp = fopen(…)) == NULL)相当の書き方が可能だったとして、私がこの形を好まぬようにならなかったという保証もありませんけどね。
スポンサード リンク |
私もこの書き方はあまり好きではないです、言われてみれば確かに「BASICでそういう風に書けないということが影響している」かもしれませんね。でも最近は、Objective-Cの初期化のコードで、あまりにもif ( (self = [super init]) =! nil )で形が決まりすぎているので、この書き方にも慣れてきたりしています。
意外と多いのですかね、好きでない人。実は僕もだったり;)
if ((foo = bar()) != baz) みたいに書く人って、
assert((foo = bar()) == baz) でリリースビルドで引っかかったりしないのですかね?(普通はしないか orz)