Objective Cのブールタイプ

1872 ワード

多くのプログラミング言語を学んだことがありますが、Booleanタイプを持っている例外はありません.objective Cも例外ではありません.
 
C言語には、true値とfalse値を持つブールデータ型boolがあります.Objective Cは、YES値とNO値を有する類似のタイプのBoolを提供する.興味深いことに、Objective CのブールタイプはC言語のブールタイプより10年以上早く誕生した.この2つの異なるBellタイプは共通のプログラムで共存できるが,Cocoaコードを記述する際にBoolを用いる.
 
注意すべき点は、Objective CのBOOLは、実際には8ビットの記憶空間を使用するシンボル付き文字列(singed char)タイプの定義(typedef)である.YESは1、NOは0と定義されています(#defineを使用).
 
Objective Cは、YES or NOのみを保存できる本格的なブールタイプとしてBoolを扱っていないためである.コンパイラはBOOLを8を2進数として認識し,YESとNOの値は単なる約束である.これは小さな問題を引き起こすが、1バイト以上の整形をBOOL変数にコピーすると、下位だけがBOOL値になる.
 
さあ、次に乾物、BOOLの使用機能例について.
 
#import <Foundation/Foundation.h>

BOOL areIntDifferent(int thing1, int thing2){
	if( thing1 == thing2){
		return (NO);
	}else{
		return (YES);
	}
}

NSSTRING *boolString(BOOL yesNo){
	if(yesNo == NO){
		return (@"NO");
	}else{
		return (@"YES");
	}
}

int main(int argc, const char *argv[]){
	BOOL areTheyDifferent;
	areTheyDifferent = areIntDifferent(5, 5);
	
	NSLog(@"are %d and %d different? %@", 5 , 5, boolString(areTheyDifferent);
	
	areTheyDifferent = areIntDifferent(23, 42);
	NSLog(@"are %d and %d different? %@", 23, 42, boolString(areTheyDifferent));
	
	return (0);
}


 
実行結果:
are 5 and 5 different ? NO
are 23 and 24 different ? YES

 
注意すべき点:
経験豊富なC言語開発者として、areIntsDifferent()関数は以下のように略記されることが多い.
BOOL areIntDifferent(int thing1, int thing2){
	return (thing1 - thing2);
}

C言語では0以外の値はYESを返しますが、objective Cでは1はYESに等しくありません
 
もう1つの問題%d私たちはよく知っていますが、"%@"の意味は何ですか.boolString()はNSStringのポインタを返します.