Есть ли короткий синтаксис для инструкции if-else в объекте C, например PHP:
if($value)
return 1;
else
return 0;
более короткая версия:
return $value?1:0;
Есть ли короткий синтаксис для инструкции if-else в объекте C, например PHP:
if($value)
return 1;
else
return 0;
более короткая версия:
return $value?1:0;
Да.
Пример (псевдо):
value = (expression) ? (if true) : (if false);
На основе вашего примера (действительный код):
BOOL result = value ? YES : NO;
Это точно то же самое на обоих языках, за исключением того, что вы обычно не находите знаки $
в именах переменных Objective-C.
if(value)
return 1;
else
return 0;
return value?1:0;
Вы также должны иметь в виду, что условный оператор ?:
не является сокращением для оператора if-else так же, как сокращенное выражение для истинного vs ложного выражения. См. руководство по PHP.
Удивленный, что никто не предложил следующее:
Длинная версия:
if(value)
return 1;
else
return 0;
Малая версия:
return value;
И если value
не является переменной bool
, просто введите его: return (BOOL)value;
тернарный оператор - это дар Бога Objective-C (/мир). Некоторые примеры.
/* if super.init worked, set a property and return self, else return nil. */
- init { return self = super.init ? _intProperty = 99, self : nil; }
/* simple static initializers. no dispatch_once drama. if nil, set it! */
static NSArray *array = nil; array = array ?: [someOtherArray copy];
/* act on your conditions without messy switches, needless line breaks and punctuation, etc.
if you need to do more than one thing, wrap it in an anonymous block! */
anInt == SomeENUM ? [do something] :
anInt == AlsoENUM ? [do somethingElse] :
anInt == BlahENUM ? ({ int x = 999;
[do anotherThingEntirely:x]; })
: nil; // no match, keep going!
/* Don't create separate function calls, tailor your call to your condition */
BOOL val = YES; NSLog(@"I %@ repeating myself.", val ? @"HATE" : @"LOVE");
/* property getters, etc... SOO easy with ternary initializers! just return! */
- property { return _property = _property ?: ^{ // if set, return backing ivar..
/* otherwise, set it and return it from a block. */
/* ...your crazy init sequence goes here... */ return _property }();
}
/* Use commas to do stuff! Only the last value is returned! */
- (BOOL) isIt { return _isIt ?: NSLog(@"Only logs if _itIs true", nil), _isIt; }