¿Qué significan el signo de interrogación y los dos puntos (?: operador ternario) en objetivo-c?
¿Qué significa esta línea de código?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
El ?
y :
me confunden.
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
Es el operador ternario o condicional. Su forma básica es:
condition ? valueIfTrue : valueIfFalse
Donde los valores solo serán evaluados si son elegidos.
Simplemente, la lógica sería
(condition) ? {code for YES} : {code for NO}
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!
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;