10

例えば

int f(int a) {
   ...
   return a > 10;
}

それは許容できると見なされます(合法ではありません、つまり「良いコード」です)、または常にこのように条件付きである必要があります

int f(int a) {
   ...
   if (a > 10)
      return 1;
   else
      return 0;
}
4

12 に答える 12

37

戻り値の型がboolの場合は許容されます。

于 2008-09-26T00:56:23.023 に答える
31

これは絶対に受け入れられます!実際、Joel は最新の stackoverflow ポッドキャストでこれについて言及しています。彼は、Fog Creek で始まるほとんどすべてのプログラマーに見せなければならなかったのは、これだけだと言いました。

于 2008-09-26T00:45:02.283 に答える
13
return a > 10 ? 1 : 0;

... boolではなくintを返すので、より理にかなっています。

于 2008-09-26T01:11:14.093 に答える
6

最初のケースは完全に良好で、2 番目の IMHO よりもはるかに優れています。読みやすさの問題として、私は個人的にそうします

   return  (a > 10);

しかし、それは些細なことであり、誰もが同意するものではありません。

于 2008-09-26T01:01:16.723 に答える
4

私はそれで何も悪いとは思いません。どちらかといえばより簡潔であり、中程度の経験を持つほとんどの開発者はそれを好むと思います。

于 2008-09-26T00:45:20.303 に答える
2

最初の方がより簡潔なので、私にははるかに好ましいです。(そして、複数の返品を回避します:)

于 2008-09-26T00:45:26.713 に答える
2

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;

ブール代数は、開発者が直感的に扱えるツールです

さらに、一部のデバッガーは関数の戻り値をうまく処理できないため、名前付き一時変数を定義したいと思います。

于 2008-09-26T00:56:53.863 に答える
1

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; }

いくつかの最適化を有効にするとすぐに、それらすべてに対して生成されたコードは同じになります。したがって、最も読みやすいバリアントを使用する必要があります。

于 2010-07-29T04:52:16.890 に答える
1

読みやすさを維持するために特別な努力を払うことを保証する限り、それは完全に受け入れられると思います. メソッド名が非常に明確であり、適切な変数名を使用していることを確認します。

あなたが提供した2番目の選択肢は、branchステートメントと複数のreturnステートメントを含み、これらがメソッドの複雑さを増し、それ自体が読みやすさを低下させるため、ほとんど悪いと思います。

于 2008-09-26T00:50:32.943 に答える
1

その構文が 100% 受け入れられるだけでなく、if ステートメントの外でブール式を自由に使用することもできますint x = i && ( j || k );(つまり、そのような値を返します)。

于 2008-09-26T16:03:01.287 に答える
1

その一部は、言語のスタイルと文化に関係していると思います。あなたが書いた最初の例は、経験豊富な C プログラマーに期待されるものです。彼らは、不必要なステートメントのブロックを入れるよりも、むしろ首を絞めたいと思っています。

言語がそれを許可し、使用法がその言語のパラダイムの一部である場合、それは完全に受け入れられると思います

于 2008-09-26T19:52:42.047 に答える
0

私は通常、後者よりも前者を行います。

于 2008-09-26T00:47:07.350 に答える