このコードは何を表しているのでしょうか? 私はそれがある種のif
代替構文であることを知っています...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
この種のコーディングの必要性は何ですか? これはより効率的ですか、それとも同じ効率の短縮版ですか?
このコードは何を表しているのでしょうか? 私はそれがある種のif
代替構文であることを知っています...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
この種のコーディングの必要性は何ですか? これはより効率的ですか、それとも同じ効率の短縮版ですか?
これは条件演算子であり、次のようなものと同等です。
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
しかし、次のように、投稿したコードに割り当てステートメントが欠落していると思います。
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
null でない場合、score
変数が割り当てられます。pattern.Gotoccurance.score
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
JavaScript でこの種の「デフォルト値」の割り当てを行う一般的なパターンは、論理 OR 演算子 ( ||
) を使用することです。
var score = pattern.Gotoccurance.score || '0';
の値は、その値が偽でない場合にのみ変数pattern.Gotoccurance.score
に代入されます(偽の値は、、、、、長さゼロの文字列またはです) 。score
false
null
undefined
0
NaN
それ以外の場合、偽の場合'0'
は割り当てられます。
パフォーマンスは同等であり、読みやすさに重点を置く必要があります。私は非常に単純な式で三項演算子を使用しようとしています。また、書式を改善して、読みやすくするために 2 行に分割することもできます。
var status = (age >= 18) ? "adult"
: "minor";
関連する質問:
これは三項演算子であり、if ステートメントを簡略化した方法です。
書き直すと、次のようになります。
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
三項演算子といいます。
三項演算子/条件演算子です。
数学では、3 項演算は n = 3 の n 項演算です。集合 A に対する 3 項演算は、A の任意の 3 つの要素を取り、それらを組み合わせて A の 1 つの要素を形成します。
if..elseの省略形です。
たとえば、数値が偶数かどうかを調べたい場合。
function CheckEvenOdd()
{
var number = 2;
if(number % 2 == 0)
alert("even");
else
alert("odd");
}
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0) ? "even" : "odd");
}
もう 1 つのバリアントは switch です。
function CheckEvenOdd()
{
var number = 2;
switch(number % 2)
{
case 0:
alert("even");
break;
default:
alert("odd");
break;
}
}
ここで、説明したように実行する単純なif..else条件がある場合は、3 項を使用できます。
ただし、条件チェックが複雑になる場合は、if..elseまたはswitchのいずれかを使用してください。3 進数では読みやすさが失われます。
たとえば、三項演算子を使用して 2 つの数値の最小値または最大値を取得するのは簡単ですが、3 つ以上の数値から最大値と 2 番目に大きい値を見つけるのは面倒なので、お勧めしません。代わりにif..elseを使用することをお勧めします。
この種のコーディングの必要性について:
三項演算子を使用して複雑さを軽減できる場合があります。
たとえば、3 つの特定のテキスト フィールドのうち少なくとも2 つに値が入力されていることを確認する必要がある Web ページがあります。if/else ロジックはかなり醜いように見えましたが、三項演算子により、入力されたフィールドの数を判断するためのワンライナーになりました。
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
このソリューションは、いくつかの代替案よりも非常にエレガントで読みやすいように見えます。