web-dev-qa-db-fra.com

Comparaison entre l'opérateur ternaire, l'opérateur elvis, l'opérateur de navigation sûr et l'opérateur logique OR les opérateurs

Comparaison opérateur ternaire/opérateur Elvis/opérateur de navigation sécurisée/opérateur logique ou opérateur angulaire


Opérateur ternaire (statement? Obj: obj)

let gender = user.male ? "male" : "female";

Elvis Opérateur (?:)

let displayName = user.name ?: "";

Opérateur de navigation sécurisée (?.)

let displayName = user.name ?. "";

Logique ou opérateurs

let displayName = user.name || "";

Les opérateurs ci-dessus font de même le même processus. Quels sont les avantages différentiels et lequel est le meilleur et le pire?

10
Ramesh Rajendran

J'ai peut-être manqué quelques versions, mais à ma connaissance, TypeScript n'a pas d'opérateur elvis ni d'opérateur de navigation sûr. La seule chose supplémentaire dont ils disposent est un opérateur d'assertion non nul, !., mais cela ne concerne que le compilateur, et dans le js compilé, le ! sera supprimé. Cependant, Angular a l'opérateur de navigation sécurisée dans ses modèles, mais sous le capot, cela se résout en un code logique ou ||. L'avantage ici est une lisibilité accrue et des modèles plus petits.

De plus, TypeScript a la notation ?:, mais elle est utilisée dans les paramètres d'interface ou de méthode pour indiquer que la valeur est facultative. 

Ce qui nous laisse avec l'opérateur ternaire vs ou logique. Vous utiliseriez le premier s'il y a 3 valeurs. La question, la réponse est oui et la réponse non, résultat à cette question.

Et ce dernier quand il y a 2 valeurs. Où le premier, si résolu à la vérité sera la réponse, et sinon le second, indépendamment de sa valeur.

Avantage sage, je ne peux pas vraiment dire grand chose. Je m'attendrais à ce qu'ils soient aussi rapides, avec une différence marginale. La lisibilité est peut-être améliorée avec l'option ternaire, que vous pouvez évidemment toujours utiliser à la place du logique ou du ||, mais personnellement, j'aime bien utiliser le ||, car il garde le code compact. 

TLDR;

  • Opérateur ternaire

Simplifié sinon, disponible partout

  • Opérateur Elvis ?:

Non disponible en TypeScript/javascript/angular et essentiellement identique à ||

  • Opérateur de navigation sûr ?.

Uniquement disponible dans les modèles angulaires, utilisé pour empêcher les pointeurs nuls dans la navigation de paramètre d'objet

  • Logique ou ||

Si pas la main gauche, alors la main droite. Encore plus simplifié sinon. Disponible en TypeScript/javascript/angular

6
PierreDuc

Opérateur de navigation sécurisée (?.), Également appelé à tort opérateur Elvis dans Angular2 uniquement

c'est une chose qui lie le template Angular2, elle n'est pas disponible en javascript.

Opérateur ternaire (statement? Obj: obj)

Ceci lorsque vous souhaitez vérifier une condition et que cette condition est véridique, renvoyez une valeur ou si elle est faussement, renvoyez une autre valeur.

Logique ou opérateurs

Lorsque vous souhaitez renvoyer une valeur en fonction de sa propre existence ou de sa véracité (aucune autre règle n’est donc impliquée), c’est très différent de Ternery.

let displayName = user.name || "";

Dans l'exemple ci-dessus, vous dites que si l'une de ces expressions est la vérité, retournez-la, où est en dessous: 

let gender = user.male ? "male" : "female";

Ce que vous dites, c'est: si ma condition est la vérité, retournez "homme" sinon retournez "femme"

Elvis Opérateur (?:)

Ceci n'est PAS disponible en javascript et vous pouvez le trouver dans d'autres langages comme PHP, qui est fondamentalement identique à l'opérateur Ternery, mais simplifié, dans le cas où le côté gauche de la comparaison (le côté vérité) peut être utilisé. comme valeur retournée: 

alors : 

let m = something ?: somethingElse // if in case of truthiness of `something` you want to return `something` , you can do this

est égal à : 

let m = something ? something : somethingElse 

EDIt: .__ Cela n'a pas de sens de les comparer, ils ne font pas la même chose du tout.

2
Milad

@Milad RameshRajendran vous pouvez utiliser le terme elvis au lieu de Safe Navigation Operator (?.) Dans angular2, selon moi, les deux sont identiques, ne confondez pas avec nom


J'ai quelque chose de cette source :

Elvis Opérateur (?:)

"L'opérateur Elvis" est un raccourcissement de l'opérateur ternaire de Java. Un exemple de où cela est pratique est pour renvoyer une valeur 'par défaut raisonnable' si une expression est fausse ou nul. Un exemple simple pourrait ressembler à ce:

def gender = user.male ? "male" : "female"  //traditional ternary operator usage

def displayName = user.name ?: "Anonymous"  //more compact Elvis operator

Opérateur de navigation sécurisée (?.)

L'opérateur Safe Navigation est utilisé éviter une exception NullPointerException . Généralement, lorsque vous faites référence à un objet que vous pourriez avoir besoin de vérifier qu'il n'est pas nul avant d'accéder à méthodes ou propriétés de l'objet . Pour éviter cela, la navigation en toute sécurité l'opérateur retournera simplement null au lieu de lancer une exception, comme alors:

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

Mais je veux savoir que tous les opérateurs ci-dessus suivent le même processus. Quels sont les avantages différentiels et lequel est le meilleur et le pire?

1
Ramesh Rajendran
let gender = user.male ? "male" : "female";

can Utilisé dans javascript(TypeScript) ainsi que dans la liaison de variable HTML

Fondamentalement, lorsque vous utilisez cet opérateur dans du code javascript, cela signifie que si la première déclaration est vraie, alors exécutez la première, sinon exécutez la deuxième option

Dans angular2 Terms Ternary Operator est connu comme Safe Navigation Operator (?.) ou vous pouvez utiliser le terme Elvis Operator (?: ) qui est utilisé au moment de l'extraction de données asynchrones à partir du backend ou d'une sorte de base de données.

alternate: - vous pouvez également utiliser Elvis Operator (?: ) dans le modèle angular2 comme ceci (nous pouvons dire que c'est une propriété abrégée) 

let gender = user.gender || "";

Regardez ici aussi

1
Pardeep Jain