例えば
int f(int a) {
...
return a > 10;
}
それは許容できると見なされます(合法ではありません、つまり「良いコード」です)、または常にこのように条件付きである必要があります
int f(int a) {
...
if (a > 10)
return 1;
else
return 0;
}
例えば
int f(int a) {
...
return a > 10;
}
それは許容できると見なされます(合法ではありません、つまり「良いコード」です)、または常にこのように条件付きである必要があります
int f(int a) {
...
if (a > 10)
return 1;
else
return 0;
}
戻り値の型がboolの場合は許容されます。
これは絶対に受け入れられます!実際、Joel は最新の stackoverflow ポッドキャストでこれについて言及しています。彼は、Fog Creek で始まるほとんどすべてのプログラマーに見せなければならなかったのは、これだけだと言いました。
return a > 10 ? 1 : 0;
... boolではなくintを返すので、より理にかなっています。
最初のケースは完全に良好で、2 番目の IMHO よりもはるかに優れています。読みやすさの問題として、私は個人的にそうします
return (a > 10);
しかし、それは些細なことであり、誰もが同意するものではありません。
私はそれで何も悪いとは思いません。どちらかといえばより簡潔であり、中程度の経験を持つほとんどの開発者はそれを好むと思います。
最初の方がより簡潔なので、私にははるかに好ましいです。(そして、複数の返品を回避します:)
boolbool f(int);
としての最初の形式はboolean
、C++ の型です。本当に を返す必要がある場合は、次のint
ように書きます
int f(int) {
...
const int res = (i>42) ? 1 : 0;
return res;
}
なぜ人々が書くのか理解できなかった
if (expr == true)
mybool = true ;
else
mybool = false;
プレーンの代わりに
mybool = expr;
ブール代数は、開発者が直感的に扱えるツールです
さらに、一部のデバッガーは関数の戻り値をうまく処理できないため、名前付き一時変数を定義したいと思います。
GCCで3つの異なるバリアントを試しました:
int one(int x) { return (x > 42) ? 1 : 0; }
int two(int x) { return x > 42; }
int thr(int x) { if (x > 42) return 1; else return 0; }
いくつかの最適化を有効にするとすぐに、それらすべてに対して生成されたコードは同じになります。したがって、最も読みやすいバリアントを使用する必要があります。
読みやすさを維持するために特別な努力を払うことを保証する限り、それは完全に受け入れられると思います. メソッド名が非常に明確であり、適切な変数名を使用していることを確認します。
あなたが提供した2番目の選択肢は、branchステートメントと複数のreturnステートメントを含み、これらがメソッドの複雑さを増し、それ自体が読みやすさを低下させるため、ほとんど悪いと思います。
その構文が 100% 受け入れられるだけでなく、if ステートメントの外でブール式を自由に使用することもできますint x = i && ( j || k );
(つまり、そのような値を返します)。
その一部は、言語のスタイルと文化に関係していると思います。あなたが書いた最初の例は、経験豊富な C プログラマーに期待されるものです。彼らは、不必要なステートメントのブロックを入れるよりも、むしろ首を絞めたいと思っています。
言語がそれを許可し、使用法がその言語のパラダイムの一部である場合、それは完全に受け入れられると思います
私は通常、後者よりも前者を行います。