Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ラーメン界の Basic Object を食べに行った話
Search
Hiroyuki Kuromiya
December 09, 2023
84
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ラーメン界の Basic Object を食べに行った話
Hiroyuki Kuromiya
December 09, 2023
More Decks by Hiroyuki Kuromiya
See All by Hiroyuki Kuromiya
誤算からはじまった小さなOSS貢献
khiroyuki1993
0
620
博士卒エンジニア キャリアの選択と 就活について
khiroyuki1993
0
690
SQLクエリの組み立てを 自動化するSlack Bot
khiroyuki1993
2
470
notion-to-slides: convert notion page to presentation slides
khiroyuki1993
0
2.4k
R で Github Repository をきれいにする
khiroyuki1993
0
680
Paper Introduction: The Recon Approach: A New Direction for Machine Learning in Criminal Law.
khiroyuki1993
0
210
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Six Lessons from altMBA
skipperchong
29
4.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Amusing Abliteration
ianozsvald
1
310
The Language of Interfaces
destraynor
162
27k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Transcript
ラーメン界の Basic Object を食べに行った話 GMOペパボ株式会社 黒宮寛之
自己紹介 あだ名:くろみー 新卒エンジニアです 京大で博士号を取得しました! 3度の飯よりラーメン
ペパボのいいところ
社内のSlack に #ラーメン部 がある
ラーメン帰り 「なんかおすすめのラーメンありますか?」 「東京だと大勝軒は有名ですよね」 「大勝軒・・・あー池袋のあそこですか?」
「池袋も有名ですけど大勝軒といえば永福町ですよ」 「永福町ってなんかありましたっけ?」 「まさか行ったことないんですか?」 「はい」 「くろみーさん、大勝軒を知らないなんて Basic Object を知らずに Ruby 使ってるよう
なもんすよ」
大勝軒のラーメン 現代ラーメンの生みの親(S氏談) 1955年創業 王道の 煮干し豚骨醤油 関東近郊に数多くのれん分け
Ruby の Basic Object クラス 全ての Object の生みの親 class Hoge
end puts Hoge.superclass # => Object puts Hoge.superclass.superclass # => BasicObject puts Hoge.superclass.superclass.superclass # => nil
ドキュメントを見てみる
Object クラス 全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。このク ラスのメソッドは上書きしたり未定義にしない限り、すべてのオブジェクトで使用する ことができます。 https://docs.ruby-lang.org/ja/latest/class/Object.html
Basic Object Class について 特殊な用途のために意図的にほとんど何も定義されていないクラスです。Objectクラス の親にあたります。Ruby 1.9 以降で導入されました。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
なんだこれは?
実際に動かして違いを見てみる
Object クラスを継承 結果はどうなる? class Fuga < Object def initialize(target) @target
= target end def method_missing(message, *args) @target.__send__(message, *args) end end fuga = Fuga.new(1) print fuga.eql? 1
BasicObject クラスを継承 結果はどうなる? class Fuga < BasicObject def initialize(target) @target
= target end def method_missing(message, *args) @target.__send__(message, *args) end end fuga = Fuga.new(1) print fuga.eql? 1
正解 Object クラスを使った場合:false BaiscObject クラスを使った場合: true
なんでこんなことが起こるのか? Object クラスでは eql? メソッドがすでに定義されている Fuga のインスタンスと 1 が一致しているかがチェックされる BasicObject
クラスは eql? メソッドが定義されていない method_missing が呼び出され結果的に @target 変数に入っている eql? メソ ッドが呼び出される 1 と 1 が一致しているかがチェックされる
何が嬉しいのか? いわゆるメタプログラミング的な用途に便利 基本的にはほぼすべてのクラスの親は Object と考えて差し支えありません。しかし、 ある種のクラスを定義する際には Object クラスは持っているメソッドが多すぎる場合 があります。 例えば、
BasicObject#method_missingを利用して Proxy パターンを実装する場合には Object クラスに定義済みのメソッドはプロクシできないという問題が発生します。こ のような場合に Object ではなく BasicObject から派生して問題を解決できます。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
とはいえ BasicObject を使わないといけない機会は少ない 通常のクラスは Object またはその他の適切なクラスから派生すべきです。真に必要な 場合にだけ BasicObject から派生してください。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
トリビアの一つとして覚えて帰ってください😎
後日談
この話をS氏にしてみたところ 「知らなかった」 Basic Object を知らずに Ruby を使っていたことが判明した ラーメンの勉強と同じくらい Ruby の勉強もしないといけない
蛇足 私の大勝軒のレビューについてはこちらのブログをお読みください https://blog.kuromiyahiroyuki.tech/entry/2023/10/15/205502