Metaprogramming

537 views

Published on

  • Be the first to comment

  • Be the first to like this

Metaprogramming

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

×