1

次の慣用句が与えられます。

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

どちらが好きですか、なぜですか?

最も一般的な実行パスはconditionfalse であると想定しています。

私は 1) を使用することを学ぶ傾向がありますが、なぜそれが好きなのかはよくわかりません。

注: 次の例はより単純で、読みやすいかもしれませんが、すべての言語がそのような構文を提供しているわけではありません。また、変数の割り当てを拡張して将来複数のステートメントを含めるのには適していません。

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
4

12 に答える 12

10

理論的には、変数に値を 2 回割り当てる必要がないので、#3 を好みます。現実の世界では、上記の 4 つのいずれかを使用すると、より読みやすくなり、私の意図をより明確に表現できます。

于 2008-09-30T09:49:19.220 に答える
4

より簡潔で論理的な単位であるため、私は方法 3 を好みます。値を一度だけ設定し、ブロックとして移動することができ、エラーが発生しやすいわけではありません (これは、特に方法 1 で setting-to-value1 およびchecking-and-optional-setting-to-value2 の場合に発生します)。は他のステートメントで区切られています)

于 2008-09-30T09:54:45.977 に答える
3

3) あなたが実現したいことの最も明確な表現です。他のすべての変数では、どの値が最終的に変数になるかを判断するために、追加の思考が必要になると思います。

実際には、サポートされている言語を使用している場合は、三項演算子 (?:) を使用します。できる限り、命令型よりも関数型または宣言型のスタイルで書くことを好みます。

于 2008-09-30T11:15:30.120 に答える
1

私は自分で#1をたくさん使う傾向があります。少なくとも私の心には、少なくとも「!」を酸っぱく逃した場合は特に、if conditionより簡単に読むことができます。if !condition

私が行うほとんどのコーディングは C# で行われますが、(ほとんどの場合) ローカル変数を使用しない限り、まだ三項演算子を避ける傾向があります。三項演算子では、ある構造の奥深くにある 3 つのレイヤーを呼び出している場合、行が非常に速く長くなる傾向があり、読みやすさが急速に低下します。

于 2008-09-30T09:54:30.580 に答える
1

注: 次の例はより単純で、読みやすいかもしれませんが、すべての言語がそのような構文を提供しているわけではありません。

これは、そのような構文を提供する言語でそれらを使用しないという理由にはなりません。ちなみに、これには、前回のカウント以降の現在の主流言語がすべて含まれています。

また、将来的に複数のステートメントを含めるために変数の割り当てを拡張するのには適していません。

これは本当です。conditionただし、常に 2 つの可能なケースのいずれかが生成されるため、このような拡張が絶対に行われないことはよくあります。

このような状況では、構文の乱雑さを軽減し、表現力を向上させるため、文バリアントよりも式バリアントを常に好みます。switch他の状況では、言語でこの使用法が許可されている場合は、前述のステートメントを使用する傾向があります。そうでない場合は、ジェネリックにフォールバックしifます。

于 2008-09-30T11:11:07.667 に答える
0

switchステートメントも機能します。シンプルでオプションが 2 つまたは 3 つ以上ある場合は、それを使用します。

于 2008-09-30T09:49:38.110 に答える
0

条件が発生しない可能性がある状況で。私は 1 または 2 で行きます。それ以外の場合は、コードで実行したいことに基づいています。(つまり、私はクルーザーに同意します)

于 2008-09-30T09:59:58.927 に答える
0

そうでない場合は使用する傾向があります...戻ります。

しかし、それは変数を返したい場合です。最初に不適格条件を取り除くと、読みやすくなる傾向があります。それは、ステートメントのコンテキストと言語に大きく依存します。case ステートメントの方がうまく機能し、ほとんどの場合は読みやすいかもしれませんが、VB ではパフォーマンスが低下するため、その特定のケースでは一連の if/else ステートメントの方が理にかなっています。

于 2008-09-30T10:02:13.650 に答える
0

私にとっては方法1または方法3。方法 1 では余分なスコープの出入りを回避できますが、方法 3 では余分な割り当てを回避できます。条件ロジックをできるだけ単純に保つために方法 2 を避ける傾向があり (この場合、! なしで方法 1 として書き直すことができるため、無関係です)、同じ理由が方法 4 にも当てはまります。

于 2008-09-30T10:04:26.343 に答える
0

それは私がテストしている状態が何であるかによって異なります。

エラー フラグ条件の場合は、1) エラー フラグを設定してエラーをキャッチし、条件が成功した場合はエラー フラグをクリアします。そうすれば、エラー状態を見逃す可能性はありません。

私が使用する他のすべての場合 3)

NOTロジックは、コードを読むときに混乱を招くだけです-私の頭の中では、他の人を代弁することはできません:-)

于 2008-09-30T10:55:32.210 に答える
0

変数に自然なデフォルト値がある場合は、#1 を使用します。いずれかの値がデフォルトに対して同等に (不) 適切である場合は、#2 を使用します。

于 2008-09-30T11:01:52.447 に答える
0

場合によります。私は三項演算子が好きですが、「if」ステートメントを使用するとより明確になる場合があります。4 つの選択肢のどれを選択するかはコンテキストによって異なりますが、私はコードの機能をより明確にする方を選ぶ傾向があり、状況によって異なります。

于 2008-09-30T11:19:13.230 に答える