let gender = user.male ? "male" : "female";
let displayName = user.name ?: "";
let displayName = user.name ?. "";
let displayName = user.name || "";
上記のすべてのオペレーターは、同じプロセスを同様に行っています。違いの利点は何ですか、どれが最も良く、最も悪いのですか?
たぶん私はいくつかのバージョンを見逃したかもしれませんが、私の知る限りでは、TypeScriptにはelvis演算子も安全なナビゲーション演算子もありません。彼らが持っている唯一の余分なものは、null以外のアサーション演算子!.
ですが、これはコンパイラー専用であり、コンパイルされたjsでは!
が削除されます。 Angularただし、テンプレート内に安全なナビゲーション演算子がありますが、内部的には論理演算子または||
に解決されます。ここでの利点は、読みやすさが向上し、テンプレートが小さくなることです。
それ以外に、TypeScriptには?:
表記がありますが、これはインターフェースまたはメソッドパラメーターで使用され、値がオプションであることを示します
これにより、3項演算子と論理ORが残ります。 3つの値がある場合は、最初の値を使用します。質問、答えはイエスの結果、答えはノーの答えです。
そして後者は2つの値がある場合です。真実に解決された場合、最初の1つが答えになります。それ以外の場合は、その値に関係なく2つ目が答えになります。
利益の面では、私はあまり言うことができません。私はそれらが同等に速く、わずかな違いがあることを期待します。おそらく、論理または||
の代わりに常に使用できる3項オプションを使用すると、読みやすさが向上しますが、個人的には、コードをコンパクトに保つため、||
を使用するのが好きです。
TLDR;
他の場合は簡略化、どこでも利用可能
?:
TypeScript/javascript/angularでは使用できず、基本的に||
と同じ
?.
angularテンプレートでのみ使用可能、オブジェクトパラメータナビゲーションでnullポインタを防止するために使用
||
左手でなければ右手。それ以外の場合はさらに簡略化されます。 TypeScript/javascript/angularで利用可能
安全なナビゲーションオペレーター(?。)は、Angular2でのみElvisオペレーターとも呼ばれます
これは、Angular2テンプレートバインディングのものであり、JavaScriptでは使用できません。
三項演算子(ステートメント?obj:obj)
これは、条件をチェックし、その条件が真実である場合は値を返すか、偽の場合は別の値を返します。
論理OR演算子
これは、それ自体の存在または真実性に基づいて値を返したい場合(したがって、他のルールは含まれません)は、Terneryとは非常に異なります。
let displayName = user.name || "";
上記の例では、これらの式のいずれかが真実である場合は、それを返します。
let gender = user.male ? "male" : "female";
あなたが言っていることは、私の状態が真実なら「男性」を返し、そうでなければ「女性」を返す
エルビスオペレーター(?:)
これはJavaScriptでは使用できません。PHPのような他の言語でも見つかる可能性があります。また、Ternery演算子とほぼ同じですが、比較の左側( side)を戻り値として使用できます。
そう :
let m = something ?: somethingElse // if in case of truthiness of `something` you want to return `something` , you can do this
と等しい:
let m = something ? something : somethingElse
EDIt:それらを比較しても意味がありません。彼らはまったく同じことをしていません。
@Milad
RameshRajendran
angular2では、Safe Navigation Operator(?。)の代わりにelvisという用語を使用できます。私によると、両方とも同じで、名前と混同しないでください
私はこれから何かを得た source :
エルビスオペレーター(?:)
「Elvis演算子」は、Javaの三項演算子の短縮形です。これが便利な例の1つは、式がfalseまたはnullに解決された場合に「実用的なデフォルト」値を返すことです。簡単な例は次のようになります。
def gender = user.male ? "male" : "female" //traditional ternary operator usage
def displayName = user.name ?: "Anonymous" //more compact Elvis operator
安全なナビゲーションオペレーター(?。)
Safe Navigationオペレーターは、NullPointerExceptionを回避するために使用されます。通常、オブジェクトへの参照がある場合、オブジェクトのメソッドまたはプロパティにアクセスする前に、それがnullでないことを確認する必要がある場合があります。これを回避するために、セーフナビゲーションオペレーターは、次のように、例外をスローする代わりに単にnullを返します。
def user = User.find( "admin" ) //this might be null if 'admin' does not exist
def streetName = user?.address?.street //streetName will be null if user or user.address is null - no NPE thrown
しかし、私は上記を知りたいのですが、すべての演算子が同じプロセスを同じように実行しています。違いの利点は何ですか、どれが最良で最悪ですか?
let gender = user.male ? "male" : "female";
javascript(TypeScript)
およびHTML
タグバインディングで使用できます。
基本的に、JavaScriptコードでこの演算子を使用する場合、最初のステートメントが最初に実行されるよりもtrueの場合、それ以外の場合は2番目のオプションを実行
Angular2用語ではTernary Operator
はSafe Navigation Operator (?.)
として知られていますが、用語Elvis Operator (?: )
バックエンドまたは何らかのデータベースから非同期データをフェッチするときに使用されます。
alternate:-次のように、angular2テンプレートでElvis Operator (?: )
を使用することもできます(これは省略形のプロパティと言えます)
let gender = user.gender || "";
こちらもご覧ください