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
770
クラスメソッドとは何なのか / whats-class-method-20200822
ima1zumi
August 22, 2020
Tweet
Share
More Decks by ima1zumi
See All by ima1zumi
Reline 1分 Cooking
ima1zumi
0
4
続・mruby/cにUTF-8 を実装する
ima1zumi
0
3
UTF-8 is coming to mruby/c
ima1zumi
3
4.3k
たのしいString
ima1zumi
1
440
Watchから始めるOSS生活
ima1zumi
0
44
String meets Encoding
ima1zumi
2
2.4k
Emojiの正規表現
ima1zumi
0
3
RubyKaigiで話した話
ima1zumi
1
340
漢字が文字コードになる前の話
ima1zumi
0
3
Featured
See All Featured
Designing for humans not robots
tammielis
247
25k
The Illustrated Children's Guide to Kubernetes
chrisshort
29
46k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Practical Orchestrator
shlominoach
181
9.7k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
Side Projects
sachag
451
41k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
The Pragmatic Product Professional
lauravandoore
24
5.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
The Invisible Customer
myddelton
114
12k
What the flash - Photography Introduction
edds
64
11k
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