Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クラスメソッドとは何なのか / whats-class-method-20200822
Search
ima1zumi
August 22, 2020
0
930
クラスメソッドとは何なのか / 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
18k
Exploring Reline: Enhancing Command Line Usability
ima1zumi
1
120
10年物のRailsアプリにキャッチアップ!〜コードを読まずに理解したかった〜
ima1zumi
0
130
RubyKaigiの登壇者一覧ページを作った
ima1zumi
0
500
Relineのその後の生活
ima1zumi
0
250
IRB and Reline Kaigi 2024
ima1zumi
0
29
Exploring Reline: Enhancing Command Line Usability
ima1zumi
3
15k
Reline 1分 Cooking
ima1zumi
0
47
続・mruby/cにUTF-8 を実装する
ima1zumi
1
40
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
It's Worth the Effort
3n
187
29k
Speed Design
sergeychernyshev
33
1.4k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Writing Fast Ruby
sferik
630
62k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Mobile First: as difficult as doing things right
swwweet
225
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
A designer walks into a library…
pauljervisheath
210
24k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
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