Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
メタプログラミングってなに?
渡邉 知樹
自己紹介
 東京大学理科I類1年
 WebやDB、機械学習等を中心に学んでいる
 趣味は数学
メタプログラミングってなに?
メタプログラミングとは、コード自身を生成する(関数
を新しく定義する、変数を作る、などなど)コードを書
くことである。
いや、意味わからん。
今回は動的メソッドを紹介します
通常の関数の定義方法
class Dog
def bark
"わんわん"
end
end
pochi = Dog.new()
pochi.bark # => “わんわん”
コードによる動的な関数定義
class Dog
define_method :bark do
"わんわん"
end
end
pochi = Dog.new
pochi.bark # => "わんわん"
だからどうした?
効果を発揮する時
 たくさんありますが、
 同じような関数だけど、名前やちょっとした動作が違うものをたくさん作る時
 について説明します。
通常の関数定義
def cat(name)
name += ".cat"
end
def dog(name)
name += ".dog"
end
def bird(name)
name += ".bird"
end
欠点
 後から他の動物追加したらまた関数作らないといけない
 定義してる関数の役割が似てる
 まとめて作りたい
動的に関数を定義すると
def set_func(kind)
define_method(kind) do |name|
name += ".#{kind}"
end
end
改善された点
 動物が増えてもset_funcを呼び出すだけで良い
 コードが短くなった(まとめたから)
もっと詳しくやりたい人
 メタプログラミングRubyをやろう!
宣伝1
 現在Railsのソースコードリーディングを行う自主ゼミを開催しております。
 興味がある方がいらっしゃれば
 https://www.facebook.com/profile.php?id=100011591890838
 ま...
宣伝2
 脳波を機械学習を用いて、解析し、価値を生み出していく、ITベンチャーを立ち上げます。
 現在初期の機械学習エンジニアを募集中(インターン可)
 興味がある方がいらっしゃれば
 https://www.facebook.com/...
Upcoming SlideShare
Loading in …5
×

メタプログラミングってなに?

72 views

Published on

メタプログラミングについてほとんど知らない人向けに一端を紹介してみました

Published in: Technology
  • Be the first to comment

  • Be the first to like this

メタプログラミングってなに?

  1. 1. メタプログラミングってなに? 渡邉 知樹
  2. 2. 自己紹介  東京大学理科I類1年  WebやDB、機械学習等を中心に学んでいる  趣味は数学
  3. 3. メタプログラミングってなに? メタプログラミングとは、コード自身を生成する(関数 を新しく定義する、変数を作る、などなど)コードを書 くことである。
  4. 4. いや、意味わからん。
  5. 5. 今回は動的メソッドを紹介します
  6. 6. 通常の関数の定義方法 class Dog def bark "わんわん" end end pochi = Dog.new() pochi.bark # => “わんわん”
  7. 7. コードによる動的な関数定義 class Dog define_method :bark do "わんわん" end end pochi = Dog.new pochi.bark # => "わんわん"
  8. 8. だからどうした?
  9. 9. 効果を発揮する時  たくさんありますが、  同じような関数だけど、名前やちょっとした動作が違うものをたくさん作る時  について説明します。
  10. 10. 通常の関数定義 def cat(name) name += ".cat" end def dog(name) name += ".dog" end def bird(name) name += ".bird" end
  11. 11. 欠点  後から他の動物追加したらまた関数作らないといけない  定義してる関数の役割が似てる  まとめて作りたい
  12. 12. 動的に関数を定義すると def set_func(kind) define_method(kind) do |name| name += ".#{kind}" end end
  13. 13. 改善された点  動物が増えてもset_funcを呼び出すだけで良い  コードが短くなった(まとめたから)
  14. 14. もっと詳しくやりたい人  メタプログラミングRubyをやろう!
  15. 15. 宣伝1  現在Railsのソースコードリーディングを行う自主ゼミを開催しております。  興味がある方がいらっしゃれば  https://www.facebook.com/profile.php?id=100011591890838  まで連絡ください
  16. 16. 宣伝2  脳波を機械学習を用いて、解析し、価値を生み出していく、ITベンチャーを立ち上げます。  現在初期の機械学習エンジニアを募集中(インターン可)  興味がある方がいらっしゃれば  https://www.facebook.com/profile.php?id=100011591890838  まで連絡ください

×