[解決済み] objective-cのYES/NO,TRUE/FALSEと真偽の差はあるのか?
2022-04-26 14:56:12
質問
単純な疑問なのですが、これらの値に違いはあるのでしょうか(BOOLとboolの違いもあるのでしょうか)? 同僚は、Objective-Cではこれらは異なるものに評価されると言いましたが、それぞれの.hファイルのtypedefを見ると、YES/TRUE/trueはすべて次のように定義されていました。
1
と定義され、NO/FALSE/falseはすべて
0
. 本当に違いがあるのでしょうか?
どのように解決するのですか?
実用上の差はない
提供
を使用します。
BOOL
変数をブーリアンとして使用します。 C言語では、ブーリアン式が0と評価されるか0でないかを基準に処理されます。ですから
if(someVar ) { ... }
if(!someVar) { ... }
と同じ意味です。
if(someVar!=0) { ... }
if(someVar==0) { ... }
というわけで、どんなプリミティブな型や式でもブールテストとして評価することができます(ポインタなどを含む)。ただし、後者ではなく、前者を行う必要があることに注意してください。
なお、そこには
は
に鈍重な値を割り当てた場合、その差は大きくなります。
BOOL
変数で特定の値をテストするため、常にブーリアンとして使用し、割り当てだけはその
#define
の値です。
重要なのは、文字比較でブーリアンをテストしてはいけないということです。
someVar
YESではない0以外の値が割り当てられる可能性がありますが、それ以上に重要なのは、意図を正しく表現できないことだと私は考えています。
if(someVar==YES) { ... } // don't do this!
if(someVar==NO ) { ... } // don't do this either!
言い換えれば、構成要素を意図されたとおりに使用し、文書化されたとおりに使用すれば、C言語での苦痛から解放されるでしょう。
関連
-
[解決済み] NSNumberをNSStringに変換する方法
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] ブロック(__block)」というキーワードはどういう意味ですか?
-
[解決済み] メソッド名と行番号を出力し、NSLogを条件付きで無効にする方法は?
-
[解決済み] objectForKeyとvalueForKeyの違い?
-
[解決済み】NSDateをNSStringに変換する。
-
[解決済み] registerForRemoteNotificationTypes: は iOS 8.0 以降でサポートされていません。
-
[解決済み】TRUEとFALSEのマクロの定義がおかしい件
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】開発者の身元が確認できないため開けない
-
[解決済み] イニシャライザーの要素がコンパイル時定数でない
-
[解決済み] iOS 8で位置情報サービスが利用できない
-
[解決済み] ブロック(__block)」というキーワードはどういう意味ですか?
-
[解決済み] NSStringにパーセント記号を追加する方法
-
[解決済み】iOS7でステータスバーを隠すことができない。
-
[解決済み】タイトル変更時に不要なUIButtonのアニメーションを停止させる方法は?
-
[解決済み】ストーリーボードで、複数のコントローラで使用するためのカスタムセルを作成する方法は?
-
[解決済み】NSStringが特定の文字で始まるかどうかを確認する方法
-
[解決済み】Objective-C:BOOLとboolの比較