ruby and activesupport for expart
DESCRIPTION
TRANSCRIPT
![Page 1: Ruby and ActiveSupport for expart](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/1.jpg)
Ruby & ActiveSupportfor expart藤岡岳之(xibbar)
![Page 2: Ruby and ActiveSupport for expart](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/2.jpg)
今後の予定
classとmoduleからやりましょう継承、mix-inネームスペースdefine_XXX匿名メソッドXXX_eval
rubyのイテレータクロージャってなんジャlambdaとproc
![Page 3: Ruby and ActiveSupport for expart](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/6.jpg)
moduleって何?
インスタンスを作れない継承できないmix-inの対象になる
![Page 7: Ruby and ActiveSupport for expart](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081907/54bd191e4a7959135f8b45fd/html5/thumbnails/9.jpg)
おしまい
おしまい次回以降も引き続きやりましょう