267 votes

Que signifie le point d'interrogation et le colon (?: Opérateur ternaire) dans l'objectif-c?

Que signifie cette ligne de code?

 label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
 

Le ? et: confus moi.

427voto

Barry Wark Points 73462

C'est l' opérateur C ternaire (Objective-C est un surensemble de C):

 label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
 

est sémantiquement équivalent à

 if(inPseudoEditMode) {
 label.frame = kLabelIndentedRect;
} else {
 label.frame = kLabelRect;
}
 

Le ternaire sans premier élément (par exemple variable ?: anotherVariable ) signifie la même chose que (valOrVar != 0) ? valOrVar : anotherValOrVar

177voto

Sean Points 22088

C'est l'opérateur ternaire ou conditionnel. Sa forme de base est:

 condition ? valueIfTrue : valueIfFalse
 

Où les valeurs ne seront évaluées que si elles sont choisies.

44voto

Varun Goyal Points 21

Le la logique serait tout simplement

(condition) ? (code pour Oui) : (code N°)

36voto

Richard Bronosky Points 3163

Bâtiment sur l’excellente explication de Barry Wark...

Ce qui est si important sur l’opérateur ternaire, c’est qu’il peut être utilisé dans des endroits qui ne peuvent pas un if-else. C’est à dire : à l’intérieur d’un paramètre de méthode ou de condition.

.. .ce qui est une grande utilisation de constantes du préprocesseur :

Cela vous évite d’avoir à utiliser et à libérer les variables locales dans les modèles if-else. FTW !

13voto

Brian Points 2279

C’est juste l' habituel opérateur ternaire. Si la partie avant le point d’interrogation est true, il évalue et retourne la partie avant le signe deux-points, sinon il évalue et retourne la partie après le signe deux-points.

C’est comme

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X