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
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyのオブジェクトモデル
mayuko hirono
October 22, 2016
Other Decks in Programming
See All in Programming
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
250
What's New in Android 2026
veronikapj
0
270
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
480
「人を評価する AI」の設計と実装
ryoyanara
0
220
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
330
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
540
AIを紡ぐPMのお話
swdtkuy
0
120
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
490
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
130
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Building Adaptive Systems
keathley
44
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Prompt Engineering for Job Search
mfonobong
0
410
4 Signs Your Business is Dying
shpigford
187
23k
How to Ace a Technical Interview
jacobian
281
24k
The Spectacular Lies of Maps
axbom
PRO
1
930
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
ラッコキーワード サービス紹介資料
rakko
1
4.4M
BBQ
matthewcrist
89
10k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
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
そして教えてください♪