2009-06-08 10 views

Répondre

3

Strictement parlant, ce n'est pas un raccourci pour une instruction if/else. C'est un opérateur ternaire appelé opérateur conditionnel.

Notez que bien que ces font la même chose, ils lisent différemment:

// if the condition is true, we do something... maybe many things 
if (condition) { 
    var = 'something'; 
} else { 
    var = 'something else'; 
} 

// reads more clearly as an assignment based upon a condition 
var = (condition) ? 'something' : 'something else'; 

Dans de nombreux cas, il est bien de penser comme un raccourci. Au fil du temps, votre cerveau choisira instinctivement un opérateur conditionnel s'il y a lieu; mais comme vous vous mouillez, vous trouverez l'opérateur conditionnel comme un excellent moyen d'exprimer le code plus succinctement.

+2

que « si sta tement "devrait être appelé" condition "pour plus de clarté. – Blindy

+0

-1 Vous êtes vraiment en train de fracasser vos cheveux avec votre affirmation sur l'équivalence stricte, ce qui pourrait décourager certains développeurs. Si vous clarifiez votre déclaration, je vais supprimer mon downvote. –

7

Je ne sais pas si cela correspond à ce que vous demandez, mais cela fonctionne aussi:

var myVar:String = someStrThatMightBeNull || "default value if that other value is null"; 

Ainsi, si la première valeur à droite de l'opérateur d'affectation est nulle/non définie, elle utilisera la chaîne littérale.

+0

Je n'ai jamais su qu'un –

+0

Ceux-ci s'appellent des opérateurs de garde. Les deux && et || fonctionne comme ça dans ActionScript. – tehnomaag

6
var myArray:Array = new Array(); 

peut être remplacé par:

var myArray:Array = []; 

va de même pour les objets:

var myObj:Object = new Object(); 

peut être remplacé par:

var myObj:Object = {}; 
4
x ||= 5; // set x to 5 if x evaluates to false 
x || someMethod(); // call someMethod if x evaluates to false 
x && someMethod(); // call someMethod if x evaluates to true 
+0

Dommage que '|| =' semble se compiler en 'x = x? x: 5; 'et donc se réaffecte. Et le compilateur Flex 4.6 (je pense) crache sur '|| =' complètement. Ref: http://www.tillschneidereit.de/2011/10/22/mario-mushroom-now-with-80-less-awesome/ – Stray

+0

En effet, ce que nous voulons, c'est 'x || (x = 5) 'et non' x = (x || 5) ' – darscan