こんにちは、happy_ryo です。
最近、Python を勉強してます。
NSString 以外にもリテラル構文が追加されて結構たちますが、使ってますか?ぼくはたまに忘れます。とある人が、追加されたリテラル構文での書き方を21世紀っぽいと言っていたので、21世紀を生きるプログラマとしてやっていく為に、今回は Objective-C のリテラル構文をおさらいしてみようと思います。
生成編
数値(NSNumber)
従来の書き方
1 |
NSNumber *number = [NSNumber numberWithFloat:0.1f]; |
21世紀の書き方
1 |
NSNumber *number = @0.1f; |
補足
例以外にも、 [NSNumber numberWith~:] 系の物もリテラル構文を利用して NSNumber *boolNumber = @NO; この様な形でインスタンスを生成する事が出来ます。
辞書(NSDictionary)
従来の書き方
1 2 3 4 5 |
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"パン", @"morning", @"カレー", @"launch", @"ササミ", @"dinner", nil]; |
21世紀の書き方
1 |
NSDictionary *dictionary = @{@"morning" : @"パン", @"launch" : @"カレー", @"dinner" : @"ササミ"}; |
補足
従来は、オブジェクト:キーだった並びが、21世紀になると、キー:オブジェクトになって、直感的になりました。また、従来は最後に nil を入れる必要があった部分が不要になっています。
配列(NSArray)
従来の書き方
1 |
NSArray *array = [NSArray arrayWithObjects:@"水",@"金",@"地",@"火",@"木",@"土",@"天",@"海",@"冥", nil]; |
21世紀の書き方
1 |
NSArray *array = @[@"水",@"金",@"地",@"火",@"木",@"土",@"天",@"海"]; |
補足
NSDictionary と同様に、最後尾に nil を入れる必要がなくなりました。
要素へのアクセス編
辞書(NSDictionary)
従来の書き方
1 2 |
NSString *string = [mutableDictionary valueForKey:@"hoge"]; [mutableDictionary setValue:@"bar" forKey:@"foo"]; |
21世紀の書き方
1 2 |
NSString *string = mutableDictionary[@"hoge"]; mutableDictionary[@"foo"] = @"bar"; |
補足
従来はメソッドへメッセージを送る方式で冗長だったのが、リテラル構文を使うことでシンプルに書くことが出来るようになりました。
配列(NSArray)
従来の書き方
1 2 |
NSString *string = [mutableArray objectAtIndex:0]; [mutableArray replaceObjectAtIndex:0 withObject:@"bar"]; |
21世紀の書き方
1 2 |
NSString *string = mutableArray[0]; mutableArray[0] = @"bar"; |
補足
Dictionary と同様に、添え字参照が行えるようになった事で、大分シンプルに書くことが出来るようになった。
おまけ
リテラル構文を用いて、ミュータブルなインスタンスを生成したい場合は、以下のように書くことで簡単に実現出来ます。
1 |
NSMutableArray *mutableArray = @[@"hoge",@"fuga",@"piyo"].mutableCopy; |
この手の文法は、手が覚えているせいか、ついつい以前から使っている物を使いがちなので、意識して使っていきたいですね。
営業→工場で作業→Word&Excel→Java→shellscript→Java→PHP→Python→Objective-C→Swift→PHP→JavaScript→ベトナム 子会社CTO→本社CTO←イマココ