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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mayuko hirono
October 22, 2016
Programming
0
1.3k
Rubyのオブジェクトモデル
mayuko hirono
October 22, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
980
Package Management Learnings from Homebrew
mikemcquaid
0
210
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
Data-Centric Kaggle
isax1015
2
760
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
CSC307 Lecture 05
javiergs
PRO
0
500
Oxlintはいいぞ
yug1224
5
1.3k
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
650
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
110
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Building an army of robots
kneath
306
46k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
79
Evolving SEO for Evolving Search Engines
ryanjones
0
120
Being A Developer After 40
akosma
91
590k
Become a Pro
speakerdeck
PRO
31
5.8k
The Cult of Friendly URLs
andyhume
79
6.8k
Facilitating Awesome Meetings
lara
57
6.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Done Done
chrislema
186
16k
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
そして教えてください♪