三項演算子に使用するコーディングスタイルはどれですか? [閉まっている]
-
04-07-2019 - |
質問
短い場合は、1行に収めます。最近、私はこのスタイルをより長い、またはネストされた三項演算子式に使用しています。考案された例:
$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';
個人的に使用するスタイル、または最も読みやすいスタイルを見つけますか
編集: (三項演算子を使用する場合)
通常、2レベルを超える深さの三項演算子の使用は避けます。 PHPテンプレートスクリプトで変数をエコーする場合、2レベルのif-elseよりも2レベルの深い三項演算子を好む傾向があります。
解決
三項演算子は一般に避けるべきですが、この形式は非常に読みやすいです:
result = (foo == bar) ? result1 :
(foo == baz) ? result2 :
(foo == qux) ? result3 :
(foo == quux) ? result4 :
fail_result;
この方法では、条件と結果が同じ行にまとめられ、何が起こっているかを簡単に理解して理解できます。
他のヒント
ネストされた条件を記述するために三項演算子を使用しないようにします。読みやすさを無視し、条件を使用すること以上の付加価値を提供しません。
1行に収めることができ、それが何を意味するのか明確な場合にのみ、私はそれを使用します:
$value = ($a < 0) ? 'minus' : 'plus';
個人的に、1行に収まる場合にのみ三項演算子を使用します。スパンする必要がある場合は、古き良き時代です
if else if else
私が時々使用するスタイルは、言及されていないのでこれを取り上げていますが、これは次のようなものです。
$result = ($x == y)
? "foo"
: "bar";
..ただし、通常、すべてを1行に入力すると長すぎる場合のみ。 =? :
すべてのラインナップが見た目をすっきりさせます。
PHPのネストされた三項演算子の動作は異なります。
この構文は、以下のすべてのテストに合格します。 http://deadlytechnology.com/web-development-tips/php-に基づく三元構文/
$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');
。
例#3「非自明な三者の行動」以下がPHPで機能しない理由を説明します。
$x = 1;
$y = 2;
$z = 3;
$myvar = ($x == $y)
? "foo"
: ($x == $z)
? "bar"
: "none";
$myvar == 'none'; // Good
$x = 1;
$y = 2;
$z = 1;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Good
$x = 1;
$y = 1;
$z = 3;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Bad!
$x = 1;
$y = 1;
$z = 1;
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";
$myvar == 'bar'; // Bad!
三項演算子は、簡単なifステートメントを書くための短い効果的な方法です。入れ子にしたり、読みにくくしたりしないでください。要確認:ソフトウェアを1回作成すると、100回読み取られます。書き込みよりも読みやすいはずです。
条件を括弧で囲む傾向があります:(a == b)? 1:0
私は一般的な意見に反対します。私は条件付き演算子スタイルでImranに似ています。 1行にきれいに収まる場合は、1行に収めます。 1行にきれいに収まらない場合は分割しますが、インデントには1つのタブ(4つのスペース。タブにスペースを挿入するようにVSを設定しています)のみを使用します。多くの場合、条件演算子は文脈的に意味があるので、すぐに if
- else
にジャンプしません。 (ただし、文脈上意味をなさない場合は、単に使用しません。)
また、条件演算子をネストしません。その時点で、読むのが難しすぎると思うので、今度はより詳細な if
- else
スタイルに進みましょう。
「考案された例」私がそれをインデントする方法です。ただし、(または上の行にあるものに基づいてではなく、左マージンからインデントします。
三者批判者に-読みやすさがポイントです。コードが読みやすくなると思わない場合は、使用しないでください。しかし、少なくとも時々はそうではないと思います。
三項条件式は、コードをより簡潔でエレガントにすることができ、最も重要なことは、正しいことを強調し、繰り返しを避けるのに役立ちます。これらの使用を検討してください。ただし、そうすることでコードを読みにくくしないでください。 VB.NETの場合:
'before refactoring
If x = 0 Then ' If-Then-Else puts emphasis on flow control
label = "None"
Else
label = Foo.getLabel(x) ' If-Then-Else forces repeat of assignment line
End If
'after refactoring
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment
「読みにくい」ことに注意してください;は「私はそれを見ることに慣れていない」と同じものではありません。
使用しません。小さなソース==より効率的なコンパイル済みコードを期待して、スペースを節約し、ソースコードを入力しようとするような気がしました。
私はそれがまったく読めないと思いますが、それの多くは私がただそれを使ったことがないからです。
..そうでなければもっと読みやすいと思うので、三項演算子をまったく使わない傾向があります。
イムラン、あなたはこれを美しくフォーマットしました。ただし、3項演算子は、3つ以上ネストすると読みにくくなる傾向があります。 if-elseブロックを使用すると、追加のレベルの包括的なネストが可能になります。さらに、関数またはテーブル駆動のプログラミングを使用します。
$foo = (isset($bar)) ? $bar : 'default';
個人的には、たとえばJavaでの変数の割り当てにのみ使用します:
String var = (obj == null) ? "not set" : obj.toString();
and(その他の例):nullパラメータを許可しない関数を使用する場合:
String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);