Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クラスメソッドとは何なのか / whats-class-method-20200822
Search
ima1zumi
August 22, 2020
0
810
クラスメソッドとは何なのか / whats-class-method-20200822
ima1zumi
August 22, 2020
Tweet
Share
More Decks by ima1zumi
See All by ima1zumi
Exploring Reline: Enhancing Command Line Usability
ima1zumi
2
12k
Reline 1分 Cooking
ima1zumi
0
15
続・mruby/cにUTF-8 を実装する
ima1zumi
1
14
UTF-8 is coming to mruby/c
ima1zumi
4
4.8k
たのしいString
ima1zumi
1
480
Watchから始めるOSS生活
ima1zumi
0
54
String meets Encoding
ima1zumi
2
2.5k
Emojiの正規表現
ima1zumi
0
7
RubyKaigiで話した話
ima1zumi
1
370
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
506
110k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
How to Think Like a Performance Engineer
csswizardry
4
590
Adopting Sorbet at Scale
ufuk
71
8.8k
Visualization
eitanlees
139
14k
Side Projects
sachag
451
42k
Producing Creativity
orderedlist
PRO
340
39k
Learning to Love Humans: Emotional Interface Design
aarron
269
39k
Happy Clients
brianwarren
94
6.6k
The Power of CSS Pseudo Elements
geoffreycrofte
64
5.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
Transcript
クラスメソッドとは何なのか 2020-08-22 @ima1zumi 1
⾃⼰紹介 @ima1zumi JavaScriptのプラクティス 2
きっかけ MyModule の外から my_method を呼びたい MyModule.my_method の形では呼べない module MyModule def
my_method "my_method!" end end p MyModule.my_method # => NoMethodError 3
my_method をクラスメソッドにしたら呼べる module MyModule def self.my_method # クラスメソッドにする "my_method!" end
end p MyModule.my_method # => my_method! 4
Moduleのクラスメソッド…??? Module と Class は別物のはず… クラスメソッドってなんなんだ…? クラスメソッドについて調べてみよう 5
クラスメソッドとは クラス/メソッドの定義 (Ruby 2.7.0 リファレンスマニュアル) Ruby におけるクラスメソッドとはクラスの特異メソッドのこと です。Ruby では、クラスもオブジェクトなので、普通のオブジ ェクトと同様に特異メソッドを定義できます。
“ “ 6
むずかしい 7
特異メソッド 8
特異メソッド 特異メソッドとは? 特定のオブジェクトだけで使えるメソッド Rubyにおけるクラスメソッドとはクラスの特異メソッドのこと “ “ 9
特異メソッドを定義する オブジェクト.メソッド名 の形で定義する class MyClass end obj1 = MyClass.new def
obj1.my_method # obj1 だけ使えるメソッドを定義 " 特異メソッドだよ" end p obj1.my_method # => " 特異メソッドだよ" 10
特異メソッドは他のオブジェクトから利⽤できない obj2 = MyClass.new p obj2.my_method # => NoMethodError 11
クラスメソッド 12
クラスメソッドを定義する self.メソッド名 の形で定義する class MyClass def self.my_class_method " クラスメソッドだよ" end
end p MyClass.my_class_method # => " クラスメソッドだよ" 13
クラスオブジェクトの話 Ruby ではほとんど全てがオブジェクト クラスもオブジェクト MyClass クラスは Class クラスのオブジェクト MyClass.class #
=> Class MyClass.object_id # => 220 14
クラスメソッドは特異メソッドの⼀種 特異メソッドは特定のオブジェクトに定義するメソッド クラスメソッドはクラスオブジェクトに定義する特異メソッド class MyClass end obj = MyClass.new def
obj.my_method; end # obj に特異メソッドを定義 def MyClass.my_class_method; end # MyClass にクラスメソッドを定義 15
クラスメソッドを定義する(再) class MyClass def self.my_class_method_1 # ここでは self = MyClass
" クラスメソッドだよ" end end def MyClass.my_class_method_2 " これもクラスメソッドだよ" end p MyClass.my_class_method_1 # => クラスメソッドだよ p MyClass.my_class_method_2 # => これもクラスメソッドだよ 16
クラスメソッドとは(再) クラス/メソッドの定義 (Ruby 2.7.0 リファレンスマニュアル) Ruby におけるクラスメソッドとはクラスの特異メソッドのこと です。Ruby では、クラスもオブジェクトなので、普通のオブジ ェクトと同様に特異メソッドを定義できます。
“ “ 17
Moduleのクラスメソッドとはなんだっ たのか Moduleオブジェクトに特異メソッドを定義すること module MyModule def self.my_method "my_method!" end end
p MyModule.my_method # => my_method! 18
まとめ 特異メソッドとは、特定のオブジェクトに定義するメソッド Rubyではクラスもオブジェクト クラスメソッドはクラスオブジェクトに定義した特異メソッドのこ と 19
参考 メタプログラミング Ruby パーフェクト Ruby プロを⽬指す⼈のためのRuby⼊⾨ るりま オブジェクト指向スクリプト⾔語 Ruby リファレンスマニュアル
(Ruby 2.7.0 リファレンスマニュアル) 20