前回紹介したStanford大学の教材からもう一つネタを。
「Coding Together:Developing Apps for iPhone and iPad(Winter 2013)」の「3.Objective-C(January 15,2013)」の「39分30秒あたり」でさらっと触れているネタです。
Objective-cリテラル表記は比較的新しい書き方なので2010年や2011年の教材にはないはずです。
1.Objective-cリテラル記法
レファレンスを参照しています。
例えば「Legacy」な書き方(実際、私はほとんどこのように書いている)
NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u];
NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l];
NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES];
NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f];
NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535];
NSNumber *someChar = [NSNumber numberWithChar:'T'];
を「Modern」な書き方
NSNumber *magicNumber = @42;
NSNumber *unsignedNumber = @42u;
NSNumber *longNumber = @42l;
NSNumber *boolNumber = @YES;
NSNumber *simpleFloat = @3.14f;
NSNumber *betterDouble = @3.1415926535;
NSNumber *someChar = @'T';
のように書けるようになって、ちょっと簡単になったようです。
不思議なもので、Legacyな書き方に慣れてしまうと、そのように書いてないと逆に分かり難いように感じてしまうものですが、まぁ慣れでしょう。
2.Collectionのリテラル記法
NSArrayは、オブジェクトを“順序を維持して保持する”コレクションです。
NSDictionaryは、オブジェクトを“キーバリューペアで保持する”コレクションです。
これら以外にNSSetやNSHashTableもあるのですが、今回は除外します。
NSArrayは
id firstObject = @"someString";
id secondObject = nil;
id thirdObject = @"anotherString";
NSArray *someArray =[NSArray arrayWithObjects:firstObject, secondObject, thirdObject, nil];
を
・・・
NSArray *someArray = @[firstObject, secondObject, thirdObject];
と書けるようになりました。
リストの末尾を意味する「nil」が不要になりました。こういうちょっとしたことが便利になるのですが、逆に昔のコードを手直しする時のバグの温床になるような気がします(ネガティブすぎるけど)。
NSDictionaryは
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
someObject, @"anObject",
@"Hello, World!", @"helloString",
@42, @"magicNumber",
someValue, @"aValue",
nil];
が
NSDictionary *dictionary = @{
@"anObject" : someObject,
@"helloString" : @"Hello, World!",
@"magicNumber" : @42,
@"aValue" : someValue
};
のように書けるようになりました。
これは、結構大きな改善で、「Key-Valueの対応」がはっきりと分かるようになっています。
Legacy記法では“奇数番目がValue”で、“偶数番目がKey”ですので、カンマの数を数えて目がチカチカしてくるわけです。
こちらも末尾のnilが不要になっていますね。
なお、NSArrayもNSDictionaryも「nil」は要素として保持できません。
もしどうしても必要ならNSNullを使います。
NSArray *array = @[ @"string", @42, [NSNull null] ];
今回は以上です。
ビデオ教材の内容に戻りますが、「オブジェクトの配列を引数にする際に@[object]とすればOK」というあまりにもアッサリとした説明に、もう少し説明して欲しいと思ったのが、今回の記事の動機です。
ロゴスウェア
最新記事 by ロゴスウェア (全て見る)
- Amazon Linux(EC2)と PHPSTORM で Xdebug を行う - 2018年9月26日
- やらないことの合意 - 2018年6月27日
- 卒園アルバムとプロジェクトマネジメント - 2018年3月30日
Comments are closed.