una ternario sola signo operador multiple linea interrogacion con objective-c c syntax operators conditional-operator

objective-c - sola - operador ternario multiple java



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

Ejemplo de operador ternario. Si el valor de la variable booleana isFemale es YES, 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 Swift

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.

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

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

El ? y : confundirme.


Acabo de enterarme de algo nuevo sobre el operador ternario. La forma corta que omite el operando del medio es verdaderamente elegante, y es una de las muchas razones por las que C sigue siendo relevante. Para su información, primero entendí esto en el contexto de una rutina implementada en C #, que también respalda al operador ternario. Dado que el operador ternario está en C, es lógico que esté en otros idiomas que son esencialmente extensiones de los mismos (por ejemplo, Objective-C, C #).


Como todos se refirieron a eso, es una forma de representar al operador condicional.

if (condition){ true } else { false }

utilizando el operador ternario (condition)? true:false (condition)? true:false Para agregar información adicional, In Swift tenemos una nueva forma de representarlo usando ?? .

let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString

Que es similar a

int a = 6, c= 5; if (a > c) { a is greater } else { c is greater }

es equivalente a

if (a>c)?a:c ==> es igual a if (a>c)?:c

en lugar de ?: podemos usar ?? es rápido


Dato curioso, en object-c si desea marcar nulo / nulo 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 podrás actualizarlo de la forma más sencilla:

-(NSString*) getSomeStringSafeCheck { return [self getSomeString]?: @""; }

Porque en Objective-C:

  1. si un objeto es nulo, devolverá falso como booleano;
  2. El segundo parámetro del Operador Ternario puede estar vacío, ya que devolverá el resultado a la izquierda de ''?''

Así que digamos que escribes:

[self getSomeString] != nil?: @"";

el segundo parámetro está devolviendo un valor booleano, por lo que se lanza una excepción.


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

condition ? valueIfTrue : valueIfFalse

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


Es solo una forma corta de escribir una declaración if-then-else. Significa lo mismo que el siguiente código:

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


Es un operador ternario, como una sentencia if / else.

if(a > b) { what to do; } else { what to do; }

En operador ternario es así: ¿condición? qué hacer si la condición es verdadera: qué hacer si es falsa;

(a > b) ? what to do if true : what to do if false;


Eso es sólo el operador ternario habitual. 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;


Este es el operador C 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 (por ejemplo, variable ?: anotherVariable ) significa lo mismo que (valOrVar != 0) ? valOrVar : anotherValOrVar (valOrVar != 0) ? valOrVar : anotherValOrVar


Esto es parte de C, por lo que no es específico de Objective-C. Aquí hay una traducción en una declaración if :

if (inPseudoEditMode) label.frame = kLabelIndentedRec; else label.frame = kLabelRect;


Simplemente, la lógica sería

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


Sobre la base de la excelente explicación de Barry Wark ...

Lo que es tan importante sobre el operador ternario es que se puede usar en lugares que 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 de 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 los patrones if-else. FTW!


int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;

medio

int padding; if ([[UIScreen mainScreen] bounds].size.height <= 480) padding = 15; else padding = 55;