質問

次のイディオムを考えます:

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

あなたはどちらを好むのか、そしてその理由は?

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

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

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

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
役に立ちましたか?

解決

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

他のヒント

より簡潔で論理的な単位であるため、方法3をお勧めします。値を設定するのは1回だけで、ブロックとして移動できます。エラーが発生しやすいわけではありません(特に、value1に設定し、value2にチェックしてオプションで設定する場合は、方法1で発生します)他のステートメントで区切られています)

3)は、発生したいことの最も明確な表現です。他のすべての人は、どの値が変数で終わるかを決定するためにいくつかの特別な思考が必要だと思います。

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

私は#1をよく使います。 if条件は、 if!condition よりも読みやすく、特に「!」をひどく見逃している場合は、少なくとも私の心に。

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

  

注:次の例はより単純な場合があり、したがって読みやすくなる可能性がありますが、すべての言語がそのような構文を提供するわけではありません

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

  

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

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

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

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

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

使用しない傾向がある...戻る。

しかし、それは変数を返したい場合です。失格者を最初に邪魔にならないようにすることは、それをより読みやすくする傾向があります。それは本当に文の文脈と言語にも依存します。ほとんどの場合、caseステートメントはより適切に機能し、読みやすい場合がありますが、VBではパフォーマンスが低下するため、特定のケースでは一連のif / elseステートメントの方が理にかなっています。

方法1または方法3。方法1はスコープの追加の入口/出口を避けることができますが、方法3は余分な割り当てを避けます。条件ロジックをできるだけシンプルにしようとするため、方法2を避ける傾向があります(この場合、!はそれなしで方法1として書き換えられる可能性があるため、!は方法4にも当てはまります)

テストする条件によって異なります。

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

その他すべての場合は3)を使用します

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top