ruby and activesupport for expart

9
Ruby & ActiveSupport for expart 藤岡岳之(xibbar)

Upload: xibbar

Post on 19-Jan-2015

955 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ruby and ActiveSupport for expart

Ruby & ActiveSupportfor expart藤岡岳之(xibbar)

Page 2: Ruby and ActiveSupport for expart

今後の予定

classとmoduleからやりましょう継承、mix-inネームスペースdefine_XXX匿名メソッドXXX_eval

rubyのイテレータクロージャってなんジャlambdaとproc

Page 3: Ruby and ActiveSupport for expart

classの初歩と継承# ただの名前と点数を表示するだけのプログラム

class Student attr_accessor :name attr_accessor :english def initialize(name) @name=name end def puts_status puts @name puts @english endend

class RikeiStudent < Student attr_accessor :math attr_accessor :science def puts_status super puts @math puts @science endend

s=Student.new("fujioka")s.english=80s.puts_statusrs=RikeiStudent.new("katahira")rs.english=80rs.math=92rs.science=85rs.puts_status

% ruby person.rbfujioka80katahira809285

解説ポイント•継承•attr_accessor•super•new•initialize•ぐらい?

Page 4: Ruby and ActiveSupport for expart

classの解説ちょっとだけclass Student @@namelist=[] attr_accessor :name attr_accessor :english def initialize(name) @name=name @@namelist.push name end def puts_status puts @name puts @english end def self.namelist @@namelist endend

class RikeiStudent < Student attr_accessor :math attr_accessor :science def puts_status super puts @math puts @science endend

s=Student.new("fujioka")s.english=80s.puts_statusrs=RikeiStudent.new("katahira")rs.english=80rs.math=92rs.science=85rs.puts_statusp Student.namelistp RikeiStudent.namelist

% ruby person.rbfujioka80katahira809285["fujioka", "katahira"]["fujioka", "katahira"]

解説ポイント•クラスメソッド•インスタンスメソッド•クラス変数•インスタンス変数•オブジェクトに型がある•変数に型はない

Page 5: Ruby and ActiveSupport for expart

classの入れ子class Sample attr_accessor :value KATAHIRA="DO" class Sample2 attr_accessor :value def self.katahira KATAHIRA end end class Sample3 endend

sample=Sample.newp samplesample2=Sample::Sample2.newp sample2sample.value="VALUE"p sample.valuep sample2.valuep Sample::Sample2.katahira

#<Sample:0x239ec>#<Sample::Sample2:0x23834>"VALUE"nil"DO"

解説ポイント•インスタンスものは独立している•クラスものは子クラスから呼び出せる

Page 6: Ruby and ActiveSupport for expart

moduleって何?

インスタンスを作れない継承できないmix-inの対象になる

Page 7: Ruby and ActiveSupport for expart

moduleをちょっとだけmodule SampleModule PI=3.14 def self.pi PI end def pi PI endend

p SampleModule.pi

class SampleClass include SampleModuleend

sc=SampleClass.newp sc.pi

% ruby module.rb3.143.14

解説ポイント•moduleをクラスメソッドのように使う•self.piのようにすると呼び出せる

•moduleをmix-in用に使う•includeするとclassのメソッドの一部になる

Page 8: Ruby and ActiveSupport for expart

moduleを入れ子にmodule SampleModule module ChildModule def child_module "CHILD_MODULE" end end def sample_module "SAMPLE_MODULE" endendclass SampleClass include SampleModule include ChildModuleend

sc=SampleClass.newp sc.sample_modulep sc.child_module

% ruby module_chile.rb"SAMPLE_MODULE""CHILD_MODULE"

解説ポイント•同じネームスペースのものしかmix-inされない•入れ子もincludeしなければならない•Railsのソースはほとんどmoduleばっかり•ちょっとだけ見てみよう•ARの呼び出しの部分でも見てみるか。

Page 9: Ruby and ActiveSupport for expart

おしまい

おしまい次回以降も引き続きやりましょう