Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Metaprogramming
@akuraru
自己紹介
• Scalaが好き
• Objective-Cは生成するもの
• こわくない
@akuraru
メタプログラミング
メタプログラミング
• プログラミング技法の一種で、ロジックを直接コ
ーディングするのではなく、あるパターンをもっ
たロジックを生成する高位ロジックによってプロ
グラミングを行う方法、またその高位ロジックを
定義する方法のこと。主に対象言語に埋め込まれ
たマクロ言語によって行われる。
メタプログラミング
• クラスやメソッドを生成するロジックの事
• Objective-Cには実行時に行うことができる
• 今回はコンパイル時にメソッドを増やす      
カテゴリの話
カテゴリ
• コンパイル時に既存のクラスにメソッ
ドを追加、上書きできる機能
• 例
• NSDate-Escort、MagicalRecord
書き方
@interface NSDate (Escort)
- (BOOL)isToday;
@end
@implementation NSDate (Escort)
- (BOOL)isToday {
    return [self isEqualToDateIgnoringTime:[NSDate date]];
}
@end
参考:https://github.com/azu/NSDate-Escort
実装
• コンパイル時に既存のクラスにメソッ
ドを追加、上書きしている
• ヘッダーをインポートしなくても実行
できる
良いところ
• 手軽
• ファイル分けができる
• テストするとき便利
問題
• 同じクラスに同じメソッドを別のカテ
ゴリで追加した場合、どちらかが適用
される
• 実装ファイルがなくてもコンパイルエ
ラーにならない
• 責任過剰になりがち
カテゴリを用いていい場合
• 複数クラスにメソッドを追加したい
• それが自然と思える場合
解決法
• 継承
• Static Classを作る
まとめ
• 簡単に既存のクラスにメソッドを追加
できます
• 何でもかんでもカテゴリで解決しない

More Related Content

Metaprogramming