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
920
クラスメソッドとは何なのか / whats-class-method-20200822
ima1zumi
August 22, 2020
Tweet
Share
More Decks by ima1zumi
See All by ima1zumi
Ruby Taught Me About Under the Hood
ima1zumi
6
17k
Exploring Reline: Enhancing Command Line Usability
ima1zumi
1
99
10年物のRailsアプリにキャッチアップ!〜コードを読まずに理解したかった〜
ima1zumi
0
110
RubyKaigiの登壇者一覧ページを作った
ima1zumi
0
450
Relineのその後の生活
ima1zumi
0
240
IRB and Reline Kaigi 2024
ima1zumi
0
17
Exploring Reline: Enhancing Command Line Usability
ima1zumi
3
15k
Reline 1分 Cooking
ima1zumi
0
39
続・mruby/cにUTF-8 を実装する
ima1zumi
1
34
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
How GitHub (no longer) Works
holman
315
140k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
Gamification - CAS2011
davidbonilla
81
5.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Six Lessons from altMBA
skipperchong
28
4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Fireside Chat
paigeccino
40
3.7k
Docker and Python
trallard
46
3.6k
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