¿Qué significan el signo de interrogación y los dos puntos (?: operador ternario) en objetivo-c?

Resuelto danielreiser asked hace 14 años • 13 respuestas

¿Qué significa esta línea de código?

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

El ?y :me confunden.

danielreiser avatar Apr 08 '10 02:04 danielreiser
Aceptado

Este es el operador ternario de C (Objective-C es un superconjunto de C):

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

es semánticamente equivalente a

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

El ternario sin primer elemento (por ejemplo variable ?: anotherVariable, ) significa lo mismo que(valOrVar != 0) ? valOrVar : anotherValOrVar

Barry Wark avatar Apr 07 '2010 19:04 Barry Wark

Es el operador ternario o condicional. Su forma básica es:

condition ? valueIfTrue : valueIfFalse

Donde los valores solo serán evaluados si son elegidos.

Sean avatar Apr 07 '2010 19:04 Sean

Simplemente, la lógica sería

(condition) ? {code for YES} : {code for NO}

Varun Goyal avatar Feb 19 '2014 21:02 Varun Goyal

Aprovechando la excelente explicación de Barry Wark...

Lo que es tan importante sobre el operador ternario es que puede usarse en lugares donde un if-else no puede. es decir: dentro de una condición o parámetro de método.

[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]

...lo cual es un gran uso para las constantes del preprocesador:

// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")

// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]

Esto le evita tener que usar y liberar variables locales en patrones if-else. ¡FTW!

Bruno Bronosky avatar May 06 '2010 15:05 Bruno Bronosky

Ese es solo el operador ternario habitual . Si la parte antes del signo de interrogación es verdadera, evalúa y devuelve la parte antes de los dos puntos; de lo contrario, evalúa y devuelve la parte después de los dos puntos.

a?b:c

es como

if(a)
    b;
else
    c;
Brian avatar Apr 07 '2010 19:04 Brian