23

次のコードを三項演算子に変換しようとしていますが、うまくいきません。その理由がわかりません。私の問題は、elseif操作を3進形式で表現する方法がわからないことだと思います。私の理解では、フォーマットを使用して操作elseifと同じように実行されます。if: (condition) ? 'result'

if ($i == 0) {
    $top = '<div class="active item">';
} elseif ($i % 5 == 0) {
    $top = '<div class="item">';
} else {
    $top = '';
}

$top = ($i == 0) ? '<div class="active item">' : ($i % 5 == 0) ? '<div class="item">' : '';
4

3 に答える 3

58
$top = ($i == 0) ? '<div class="active item">' : (($i % 5 == 0) ? '<div class="item">' : '');

else ブロック全体に括弧を追加する必要があります

于 2012-10-31T16:11:01.433 に答える
18

if... else if... else...三項演算子は真の演算をサポートしていません。ただし、次の手法を使用して動作をシミュレートできます。

var name = (variable === 1) ? 'foo' : ((variable === 2) ? 'bar' : 'baz');

私は個人的にこれを気にしません。より読みやすくエレガントではないからです。私は通常、switchステートメントを好みます。

switch (variable) {
    case 1 : name = 'foo'; break;
    case 2 : name = 'bar'; break;
    default : name = 'bas'; break;
}
于 2012-10-31T16:21:29.523 に答える
4

おそらくいくつかの意見を共有するには遅すぎますが、それでも:)

  1. 限られた数の評価に if - else if - else を使用します。個人的には、比較の数が 5 未満の場合は、if - else if - else を使用することを好みます。
  2. 評価数が多い場合は switch-case を使用してください。個人的にはケース数が 5 以上の switch-case の方が好きです。
  3. 単一の比較が検討されている場合 (またはループ時の単一の比較)、または switch 構造の「case」句内で if-else 比較が必要な場合は、3 項を使用します。
  4. 非常に大きなデータセットをループしながら比較する場合は、3 進数を使用する方が高速です。

IMHO 最後に、コードの読みやすさとパフォーマンスの間のトレードオフ方程式を決定する開発者は、特定の状況で使用できる 3 項対 if else-if else 対 switch-case のいずれかを決定します。

于 2015-12-25T07:29:49.033 に答える