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
Rubyのオブジェクトモデル
Search
mayuko hirono
October 22, 2016
Programming
0
1.2k
Rubyのオブジェクトモデル
mayuko hirono
October 22, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
110
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
330
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
440
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
400
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
230
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
540
Deep Dive into Kotlin Flow
jmatsu
1
360
為你自己學 Python - 冷知識篇
eddie
1
350
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Docker and Python
trallard
46
3.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
How to Ace a Technical Interview
jacobian
279
23k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
KATA
mclloyd
32
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Bash Introduction
62gerente
615
210k
Making Projects Easy
brettharned
117
6.4k
Transcript
Hello Ruby! Rubyのオブジェクトモデルについて
オブジェクトモデルって? プログラムを構成するクラスやモジュール、メソッドなどの言語要素の関係を示すもの。 Rubyはオブジェクト指向なので、オブジェクトモデル (言語要素の関係)を理解すると、Rubyが分かった気になれ たり、何ができるか想像しやすくなったりします。
Rubyってこんな言語! • クラスもモジュールもメソッドも定数もすべてが第一級オブジェクト。 (変数に代入したり、引数として渡した り、返り値として渡したりできる。第一級関数とかいう表現もある。 ) • 変数に型がなく、事前に宣言が要らない。処理も入る。 (高階関数) •
標準クラスのメソッドを書き換えられる。 • 実行時にオブジェクトの性質を参照・変更できる。(イントロスペクションて呼ばれます) • シンタックスシュガー多い • ポリモーフィズム(多態性) • 他にもあるかもm(__)m
オブジェクトモデルの理解には時間がかかります。 今日は、皆さんがRubyって不思議だなと思った時に、役立ちそうなものを紹介します!
記法ルール(あとで見てください) Constant_variable => 定数は大文字から始まる。 MyClass => クラス名は大文字から始まる。クラス定義は、名前がクラス名の定数にクラスオブジェクトを代入すること。 @instance_variable @@class_variable local_variable
$global_variable MyClass.class_method MyClass#instance_method #=> 使うときはドットでメッセージを送る。
オブジェクトモデルを理解するための便利ライブラリ(gem) $gem install pry irb(Interactive ruby shell)の改良版みたいなもの irbは標準入力からRubyの式を入力するとすぐに評価してくれる実行環境 (対話型実行環境とかREPL(Read-Eval-Print Loop)とか呼ばれます)
$gem install pry-doc Rubyドキュメントとソースコード(C)をpry上で見せてくれます
pry-docを使ってみましょう > show-doc Object#class > show-source Object#class
クラスとインスタンスの作り方
オブジェクトモデルを理解するための便利メソッド Module#ancestors クラスが継承したクラスとインクルードしたモジュールをリストにして返す Module#instance_methods クラスやモジュールで定義されているインスタンスメソッドの名前を集めて配列にして返す Kernel#methods オブジェクトが持つメソッドを返す、親クラスやインクルードしたモジュールのメソッドも含む Class#superclass クラスの親クラスを返す Object#class
オブジェクトのクラスを返す
早速、Module#ancestorsを使ってみましょう! Module#ancestorsは、あるクラスが継承したクラスと、 インクルードしたモジュールのリストを返します。 MyClassクラス, Stringクラス, Integerクラスで試します。
MyClass.ancestors
String.ancestors
Integer.ancestors
全ての結果に Objectクラス Kernelモジュール BasicObjectクラス が含まれます。 [ [ [
つまり、MyClass/String/Integerクラスは Objectクラス Kernelモジュール BasicObjectクラス が持つメソッドを使うことができます。 Rubyでは、ほとんどのオブジェクトが、 上の2つのクラスと1つのモジュールのメソッドを持ちます。
Objectクラスって何? もう皆さんは、Objectクラスが何かを知るための道具を持っています。 Rubyでは、Objectクラスもオブジェクトであり、何かのクラスのインスタンスです。 何クラスのインスタンスでしょうか? Object.class #=> Class(Classという名前のクラスがある ) このクラスのスーパークラスは何でしょうか? Object.superclass
#=> BasicObject どんなメソッドを持っているでしょうか? Object.methods #=> ???
Rubyで定義されているクラスは 全てClassクラスのインスタンスです。 Classクラスにclassメソッドを渡すと 何が返るでしょうか? Classクラスは何クラスのインスタンスでしょうか? Class.class #=> ???
Classクラスのインスタンスです 自己参照しています。ややこしいですね
図に描いてみましょう(やっぱりややこしいですね)
Rubyのオブジェクトモデルが理解できると • メソッドを動的に追加・再定義する Module#define_method • 呼びたいメソッドをコード実行時に決める Object#send などの仕組みが理解しやすくなります。 私もまだまだ勉強中です。 もし興味を持って頂けたら、ぜひ調べてみてくださいm(__)m
そして教えてください♪