0

プログラマーAは、いくつかの三項演算子、特にネストされた演算子が大好きです。さらに良いことに、彼は、コードをより少ない行に収めることができるため、コードの読み取りと保守が容易になると主張しています。プログラマーBは、ターナリがネストされると読みやすさが失われ、コードの保守が難しくなると主張しています。

以下のブロックをチェックしてください:

private int MyFunction(bool condA, bool condB)
{
  // Programmer A says:
  // Nested ternary --> This is easier to read and maintain because it is on one line.  Ternaries can be nested 4 or 5 deep and it is no problem.
  return condA ? condB ? 20 : -10 : -20;

  // Programmer B says:
  // Unwrapped --> This is more readable as it better describes the step by step evaluation of the conditions and their results.
  if (!condA) { return -20; }
  if (!condB) { return -10; }
  return 20;
}

他の誰もが2つの考え方についてどう思いますか?取るべき最善のアプローチは何ですか?

編集:もっと良い方法はありますか?

4

7 に答える 7

8

明らかに、プログラマーAは「短い」コードと「保守可能で読み取り可能な」コードを混同しています。

于 2011-05-27T14:49:45.267 に答える
4

いつでもプログラマーBを選びます。賢いコードであるためだけの賢いコードは、通常、理解して維持するのが難しく、仕事で画面を見ている時間の70%以上を占めています。

プログラマーのBの方法は簡単で、間違えるのは非常に困難です。

于 2011-05-27T14:50:05.990 に答える
3

最善の解決策は、三項演算子を保持するが、それに括弧を追加することだと思います

return condA ? ( condB ? 20 : -10 ) : -20;

そうしないと、簡単に混乱する可能性があります。

あるいは、三項演算子がネストの最後のレベルでのみ発生するハイブリッドアプローチが最適な場合があります。

if(condA)
{
    return condB ? 20 : -10;
} else {
    return -20;
}
于 2011-05-27T14:50:15.910 に答える
2

第一に、それは明らかに主観的です-そして私はとにかくそれらの理由で質問を閉じるために投票したくなります。ただし、主観的ではない生産的なポイントがまだいくつかある可能性があると思います。

別の方法で記述しますが、それでも条件演算子を使用します。私はこれを使用します:

return !condA ? -20
     : !condB ? -10
     : 20;

つまり、「単純な」ケースをそれぞれの場合の2番目のオペランドにして、各行で「この条件が成立する場合、戻り値はそれになる」ことがわかるようにします。そうすれば、2番目のコードに少し似ていますが、少し簡潔になります。(そして、私はそのような同じ行のブレースを好まない傾向があります-それらのifブロックを拡張すると、それはかなり長くなります。)

于 2011-05-27T14:49:10.200 に答える
1

私の意見では、行数は読みやすさの指標ではありません。クレイジーなものを1行にまとめることもできますが、それはこの行が何をしているのかが誰にとっても明らかだという意味ではありません。

プログラマーとしてこれらの行を解析するための費用はスペースの節約よりも大幅に高いため、私は三項演算子を完全に避けようとしています(本当に些細な場合を除いて)。

これは、例のようなネストされたステートメントに特に当てはまります。

例:私にとって、些細なケースは次のようになります

_foo = (bar != null) ? bar : String.Empty;
于 2011-05-27T14:49:50.050 に答える
0

読みやすさを損なうことなくコードを1行に収めることができれば、その良い習慣に同意する傾向があります。

三項演算子はコードを少し短くする傾向があるので好きですが、理解するのに1秒長くかかることがよくあります。

ネストされた三項演算子は、私が監督するどのプロジェクトにも参加できません。コードは読みやすさを優先する必要があり、ネストされた三項演算は私の意見では一歩遠すぎます。

于 2011-05-27T14:50:28.120 に答える
0

これは簡単です。括弧を使用します。

于 2011-05-27T14:51:07.863 に答える