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
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
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
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
150
Heart of Swift Concurrency
koher
0
890
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
440
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
340
SREの越境 / SRE Collaboration
y0hgi
2
230
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
110
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
1.7k
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
250
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Balancing Empowerment & Direction
lara
6
1.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
WENDY [Excerpt]
tessaabrams
14
39k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
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
そして教えてください♪