web-dev-qa-db-ja.com

疑問符とコロン(?:三項演算子)は、目的語cの意味は何ですか?

このコード行はどういう意味ですか?

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

?:は私を混乱させます。

257
danielreiser

これはC 三項演算子 です(Objective-CはCのスーパーセットです)。

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

意味的に同等です

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

最初の要素がない3進数(例:variable ?: anotherVariable)は、(valOrVar != 0) ? valOrVar : anotherValOrVarと同じ意味です。

419
Barry Wark

これは三項演算子または条件演算子です。基本的な形式は次のとおりです。

condition ? valueIfTrue : valueIfFalse

値が選択された場合にのみ評価される場所。

174
Sean

簡単に言うと、ロジックは

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

40
Varun Goyal

Barry Warkの優れた説明に基づいて構築しています...

三項演算子について非常に重要なことは、それがif-elseではできない場所で使用できることです。例:条件またはメソッドパラメータの中。

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

...これはプリプロセッサ定数には非常に便利です。

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

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

これにより、if-elseパターンでローカル変数を使用したり解放したりする必要がなくなります。 FTW!

36
Bruno Bronosky

これは通常の 三項演算子 です。疑問符の前の部分がtrueの場合はコロンの前の部分を評価して返し、それ以外の場合はコロンの後の部分を評価して返します。

a?b:c

のようなものです

if(a)
    b;
else
    c;
13
Brian

これはCの一部なので、Objective-C特有のものではありません。これがifステートメントへの翻訳です。

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

これは、if-then-else文を書くことの短い形式です。次のコードと同じ意味です。

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

あなたがnull/nilをチェックしたいのなら、Objective-Cでは面白い事実です。例えば:

-(NSString*) getSomeStringSafeCheck
{
    NSString *string = [self getSomeString];
    if(string != nil){
        return String;
    }
    return @"";
}

簡単な方法は次のとおりです。

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

それからあなたはそれを最も簡単な方法で更新することができます:

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

Objective-Cでは、

  1. オブジェクトがnilの場合、ブール値としてfalseを返します。
  2. 三項演算子の2番目のパラメータは、 '?'の左側に結果を返すので、空にすることができます。

だからあなたが書いたとしましょう:

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

2番目のパラメータはブール値を返すため、例外がスローされます。

2
Jun Jie Gan

三項演算子の例。isF boolean変数の値がYESの場合は、それ以外の場合は "GENDER IS FEMALE"を出力します。 "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.

Objective-C

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.

スイフト用

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.
2
handiansom

三項演算子について何か新しいことを学びました。中間のオペランドを省略した短縮形は本当に洗練されており、Cが依然として関連性がある多くの理由の1つです。参考までに、私は最初にC#で実装されたルーチンのコンテキストでこれに頭を悩ませました。それはまた三項演算子もサポートします。三項演算子がCにあるので、それが本質的にそれの拡張である他の言語になるであろうことは理に適っている(例えば、Objective-C、C#)。

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

手段

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

誰もが言及したように、それは条件演算子を表す方法です

if (condition){ 
    true 
} 
else {
    false
}

三項演算子の使用(condition)? true:false追加情報を追加するために、Swiftに??を使用してそれを表す新しい方法があります。

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

に似ています

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

に等しい

if (a>c)?a:c ==> if (a>c)?:cと等しい

?:の代わりに使用できる??はSwiftです。

1
user5503563

If/else文のように、これは三項演算子です。

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

三項演算子では、次のようになります。条件が真の場合にどうするか:それが偽の場合にどうするか。

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