SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
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を作る
まとめ
• 簡単に既存のクラスにメソッドを追加
できます
• 何でもかんでもカテゴリで解決しない

Más contenido relacionado

Destacado

Marine national parks
Marine national parksMarine national parks
Marine national parksPenbank
 
Cio如何制定与企业战略匹配的it战略规划
Cio如何制定与企业战略匹配的it战略规划Cio如何制定与企业战略匹配的it战略规划
Cio如何制定与企业战略匹配的it战略规划sunzhou241
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgentAkura Pi
 
Water Catchments
Water CatchmentsWater Catchments
Water CatchmentsPenbank
 
Marine national parks
Marine national parksMarine national parks
Marine national parksPenbank
 
组织结构设计的流程及方法
组织结构设计的流程及方法组织结构设计的流程及方法
组织结构设计的流程及方法sunzhou241
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合Akura Pi
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンAkura Pi
 
Mvcのすすめ
MvcのすすめMvcのすすめ
MvcのすすめAkura Pi
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイルAkura Pi
 

Destacado (12)

List demo1
List demo1List demo1
List demo1
 
Marine national parks
Marine national parksMarine national parks
Marine national parks
 
Cio如何制定与企业战略匹配的it战略规划
Cio如何制定与企业战略匹配的it战略规划Cio如何制定与企业战略匹配的it战略规划
Cio如何制定与企业战略匹配的it战略规划
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgent
 
Water Catchments
Water CatchmentsWater Catchments
Water Catchments
 
Marine national parks
Marine national parksMarine national parks
Marine national parks
 
组织结构设计的流程及方法
组织结构设计的流程及方法组织结构设计的流程及方法
组织结构设计的流程及方法
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
 
W class
W classW class
W class
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイル
 

Similar a Metaprogramming

Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and designTomoharu ASAMI
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218Akira Tanaka
 
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計MicroAd, Inc.(Engineer)
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminarAtushi Sugiyama
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類Shuzo Kashihara
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラスKoichiro Ohba
 
運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方Yuki Ishikawa
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programmingYuichi Hasegawa
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについてNobukazu Hanada
 
Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉Tomoharu ASAMI
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional ProgrammingTomoharu ASAMI
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)Kenji Shirane
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)Wataru Kimura
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめKenichi Sonoda
 

Similar a Metaprogramming (20)

Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218
 
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス
 
named_scope more detail
named_scope more detailnamed_scope more detail
named_scope more detail
 
運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方運用で爆発四散しないためのメタプログラミングとの付き合い方
運用で爆発四散しないためのメタプログラミングとの付き合い方
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programming
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 
APA01 2015513
APA01 2015513APA01 2015513
APA01 2015513
 
APA01 2015513 1
APA01 2015513 1APA01 2015513 1
APA01 2015513 1
 
Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 

Metaprogramming