¿Qué significa esta línea de código?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
Él ?
y :
me confunde.
danielreiser
¿Qué significa esta línea de código?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
Él ?
y :
me confunde.
varun goyal
Simplemente, la lógica sería
(condition) ? {code for YES} : {code for NO}
Este es en realidad el mejor responda porque las otras respuestas implican que solo puede tener un “valor” como resultado, mientras que esto muestra que puede poner cualquier código arbitrario como resultado.
– Mike S.
23 de febrero de 2016 a las 21:19
barry wark
esta es la c operador ternario (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 (p. ej. variable ?: anotherVariable
) significa lo mismo que (valOrVar != 0) ? valOrVar : anotherValOrVar
(actualización: ¡Qué asco! Volver a publicar como respuesta). Lo que es tan importante sobre el operador ternario es que se puede usar en lugares donde un if-else no puede. es decir: dentro de un parámetro de condición o método. [NSString stringWithFormat: @”Status: %@”, (statusBool ? @”Approved” : @”Rejected”)] …que es un gran uso para las constantes del preprocesador: #define statusString (statusBool ? @”Aprobado” : @”Rechazado”) …entonces: [NSString stringWithFormat: @”Status: %@”, statusString] Esto le evita tener que usar y liberar variables locales en patrones if-else. FTW!
–Bruno Bronosky
6 mayo 2010 a las 15:52
Probablemente valga la pena mencionar que el operador ternario sin el primer elemento (?:
) es aun mejor en situaciones en las que el lado izquierdo es una expresión, como el ?:
evita que se evalúe más de una vez. Por ejemplo: [myArray firstObject] ? [myArray firstObject] : @"Hello World";
llamadas firstObject
dos veces (si firstObject
no regresa nil
), donde [myArray firstObject] ?: @"Hello World";
produce el mismo resultado pero nunca llama firstObject
mas de una vez.
– nhgrif
9 de julio de 2014 a las 0:33
finalmente~~~~~ He estado usando este operador durante mucho tiempo (definitivamente mi favorito) pero nunca supe cómo se llama. la gran pregunta ahora ha sido respondida. Gracias
– Thang Do
10 de noviembre de 2015 a las 7:50
También quiero agregar que el operador ternario sin el primer elemento ?:
también se llama el operador de elvis debido a la emoticonos parecido con el cantante. Y, por supuesto, en este caso, como estamos soltando un elemento, ya no es un operador ternario pero un operador binario. Los operadores binarios incluyen la gran mayoría de los operadores que solemos usar al programar (*
,+
,-
,^
, |
,||
, &
, >>
etc).
– tomaco
5 de febrero de 2018 a las 18:07
sean
Es el operador ternario o condicional. Su forma básica es:
condition ? valueIfTrue : valueIfFalse
Donde los valores solo serán evaluados si son elegidos.
Solo para aclarar, no se limita a los valores. condition ? codeIfTrue : codeIfFalse
– Mike S.
23 de febrero de 2016 a las 21:21
Dato curioso, en Objective-C si quieres marcar nulo/nil Por ejemplo:
-(NSString*) getSomeStringSafeCheck
{
NSString *string = [self getSomeString];
if(string != nil){
return String;
}
return @"";
}
La forma rápida de hacerlo es:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString] != nil ? [self getSomeString] : @"";
}
Luego puede actualizarlo de la manera más simple:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString]?: @"";
}
Porque en Objective-C:
Así que digamos que escribes:
[self getSomeString] != nil?: @"";
el segundo parámetro devuelve un valor booleano, por lo que se lanza una excepción.
Eso es lo habitual operador ternario. Si la parte anterior al signo de interrogación es verdadera, evalúa y devuelve la parte anterior a los dos puntos; de lo contrario, evalúa y devuelve la parte posterior a los dos puntos.
a?b:c
es como
if(a)
b;
else
c;
Ejemplo de operador ternario. Si el valor de la variable booleana isFemale es SÍ, imprima “GENDER IS FEMALE”, de lo contrario, “GENDER IS MALE”
? means = execute the codes before the : if the condition is true.
: means = execute the codes after the : if the condition is false.
C objetivo
BOOL isFemale = YES; NSString *valueToPrint = (isFemale == YES) ? @"GENDER IS FEMALE" : @"GENDER IS MALE"; NSLog(valueToPrint); //Result will be "GENDER IS FEMALE" because the value of isFemale was set to YES.
para rápido
let isFemale = false let valueToPrint:String = (isFemale == true) ? "GENDER IS FEMALE" : "GENDER IS MALE" print(valueToPrint) //Result will be "GENDER IS MALE" because the isFemale value was set to false.
Sobre la base de 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 un parámetro de condición o método.
[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]
…que 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!
es el ternario si-entonces-otro operador
– Klaus Byskov Pedersen
7 abr 2010 a las 19:46
Tenga en cuenta que debe ser un signo de interrogación, no una comilla.
– Clahey
7 abr 2010 a las 19:48
El compilador también parece permitir
variable ?: anotherVariable
¿Qué significa esto?’– Tony
30 de diciembre de 2011 a las 17:31
El ternario sin primer elemento significa lo mismo que
(valOrVar != 0) ? valOrVar : anotherValorvar
– Scott Lahteine
24 de marzo de 2012 a las 2:11