狠狠撸

狠狠撸Share a Scribd company logo
Ruby &
ActiveSupport
  for expart
  藤岡岳之(xibbar)
今後の予定

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

rubyのイテレータ
クロージャってなんジャ
lambdaとproc
classの初歩と継承
# ただの名前と点数を表示するだけ              s=Student.new("fujioka")
のプログラム                         s.english=80
                               s.puts_status
class Student                  rs=RikeiStudent.new("katahira")
  attr_accessor :name          rs.english=80
  attr_accessor :english       rs.math=92
  def initialize(name)         rs.science=85
    @name=name                 rs.puts_status
  end
  def puts_status
    puts @name
    puts @english              ~% ruby person.rb
  end                          fujioka
end                            80
                               katahira
class RikeiStudent < Student   80
                               92                解説ポイント
  attr_accessor :math
  attr_accessor :science       85
                                                 ?継承
  def puts_status
    super                                       ?attr_accessor
    puts @math                                  ?super
    puts @science
  end
                                                ?new
end                                             ?initialize
                                                ?ぐらい?
classの解説ちょっとだけ
class Student                  s=Student.new("fujioka")
  @@namelist=[]                s.english=80
  attr_accessor :name          s.puts_status
  attr_accessor :english       rs=RikeiStudent.new("katahira")
  def initialize(name)         rs.english=80
    @name=name                 rs.math=92
                                                               解説ポイント
    @@namelist.push name       rs.science=85
  end                          rs.puts_status           ?クラスメソッド
  def puts_status              p Student.namelist
    puts @name                 p RikeiStudent.namelist ?インスタンスメソッド
    puts @english
  end                                                     ?クラス変数
  def self.namelist                                       ?インスタンス変数
    @@namelist                  % ruby person.rb
  end                           fujioka                   ?オブジェクトに型がある
end                             80
                                katahira                  ?変数に型はない
class RikeiStudent < Student    80
  attr_accessor :math           92
  attr_accessor :science        85
  def puts_status               ["fujioka", "katahira"]
    super                       ["fujioka", "katahira"]
    puts @math
    puts @science
  end
end
classの入れ子
class Sample
  attr_accessor :value           #<Sample:0x239ec>
  KATAHIRA="DO"                  #<Sample::Sample2:0x23834>
  class Sample2                  "VALUE"
    attr_accessor :value         nil
    def self.katahira            "DO"
      KATAHIRA
    end
  end
  class Sample3
  end
end

sample=Sample.new
p sample
sample2=Sample::Sample2.new
p sample2
sample.value="VALUE"                 解説ポイント
p sample.value
p sample2.value               ?インスタンスものは独立している
p Sample::Sample2.katahira
                              ?クラスものは子クラスから呼び出せる
moduleって何?



インスタンスを作れない
継承できない
mix-inの対象になる
moduleをちょっとだけ
module SampleModule
  PI=3.14
  def self.pi                 % ruby module.rb
    PI                        3.14
  end                         3.14
  def pi
    PI
  end
end

p SampleModule.pi

class SampleClass
  include SampleModule
end                                 解説ポイント

sc=SampleClass.new       ?moduleをクラスメソッドのように使う
p sc.pi
                          ?self.piのようにすると呼び出せる
                         ?moduleをmix-in用に使う
                          ?includeするとclassのメソッドの一部になる
moduleを入れ子に
module SampleModule
  module ChildModule
    def child_module         % ruby module_chile.rb
      "CHILD_MODULE"         "SAMPLE_MODULE"
    end                      "CHILD_MODULE"
  end
  def sample_module
    "SAMPLE_MODULE"
  end
end
class SampleClass
  include SampleModule
  include ChildModule
end                                解説ポイント
sc=SampleClass.new       ?同じネームスペースのものしかmix-inされない
p sc.sample_module
p sc.child_module        ?入れ子もincludeしなければならない
                         ?Railsのソースはほとんどmoduleばっかり
                         ?ちょっとだけ見てみよう
                          ?ARの呼び出しの部分でも見てみるか。
おしまい




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

More Related Content

Ruby and ActiveSupport for expart

  • 1. Ruby & ActiveSupport for expart 藤岡岳之(xibbar)
  • 2. 今後の予定 classとmoduleからやりましょう 継承、mix-in ネームスペース de?ne_XXX 匿名メソッド XXX_eval rubyのイテレータ クロージャってなんジャ lambdaとproc
  • 3. classの初歩と継承 # ただの名前と点数を表示するだけ s=Student.new("fujioka") のプログラム s.english=80 s.puts_status class Student rs=RikeiStudent.new("katahira") attr_accessor :name rs.english=80 attr_accessor :english rs.math=92 def initialize(name) rs.science=85 @name=name rs.puts_status end def puts_status puts @name puts @english ~% ruby person.rb end fujioka end 80 katahira class RikeiStudent < Student 80 92 解説ポイント attr_accessor :math attr_accessor :science 85 ?継承 def puts_status super ?attr_accessor puts @math ?super puts @science end ?new end ?initialize ?ぐらい?
  • 4. classの解説ちょっとだけ class Student s=Student.new("fujioka") @@namelist=[] s.english=80 attr_accessor :name s.puts_status attr_accessor :english rs=RikeiStudent.new("katahira") def initialize(name) rs.english=80 @name=name rs.math=92 解説ポイント @@namelist.push name rs.science=85 end rs.puts_status ?クラスメソッド def puts_status p Student.namelist puts @name p RikeiStudent.namelist ?インスタンスメソッド puts @english end ?クラス変数 def self.namelist ?インスタンス変数 @@namelist % ruby person.rb end fujioka ?オブジェクトに型がある end 80 katahira ?変数に型はない class RikeiStudent < Student 80 attr_accessor :math 92 attr_accessor :science 85 def puts_status ["fujioka", "katahira"] super ["fujioka", "katahira"] puts @math puts @science end end
  • 5. classの入れ子 class Sample attr_accessor :value #<Sample:0x239ec> KATAHIRA="DO" #<Sample::Sample2:0x23834> class Sample2 "VALUE" attr_accessor :value nil def self.katahira "DO" KATAHIRA end end class Sample3 end end sample=Sample.new p sample sample2=Sample::Sample2.new p sample2 sample.value="VALUE" 解説ポイント p sample.value p sample2.value ?インスタンスものは独立している p Sample::Sample2.katahira ?クラスものは子クラスから呼び出せる
  • 7. moduleをちょっとだけ module SampleModule PI=3.14 def self.pi % ruby module.rb PI 3.14 end 3.14 def pi PI end end p SampleModule.pi class SampleClass include SampleModule end 解説ポイント sc=SampleClass.new ?moduleをクラスメソッドのように使う p sc.pi ?self.piのようにすると呼び出せる ?moduleをmix-in用に使う ?includeするとclassのメソッドの一部になる
  • 8. moduleを入れ子に module SampleModule module ChildModule def child_module % ruby module_chile.rb "CHILD_MODULE" "SAMPLE_MODULE" end "CHILD_MODULE" end def sample_module "SAMPLE_MODULE" end end class SampleClass include SampleModule include ChildModule end 解説ポイント sc=SampleClass.new ?同じネームスペースのものしかmix-inされない p sc.sample_module p sc.child_module ?入れ子もincludeしなければならない ?Railsのソースはほとんどmoduleばっかり ?ちょっとだけ見てみよう ?ARの呼び出しの部分でも見てみるか。