SlideShare a Scribd company logo
Rubyのクラスとメソッド
目次
クラス定義
メソッド探索
Mix-in
特異クラス
クラスメソッド
クラス定義
Rubyのオブジェクト指向
Rubyはオブジェクト指向型言語
クラス、継承、モジュール等を使用出来る
Rubyは全てがオブジェクトで出来ている
例:クラス = Classクラスのオブジェクト
Classもオブジェクト
クラスもオブジェクトなので、変数へ格納出来る
 
class Foo
end
a = Foo # Fooクラスを変数へ格納
a.new(1) # Foo.newと同じように使用出来る
依存クラスの参照
インスタンスから生成元のクラスオブジェクトを参
照出来る
クラスオブジェクトから親クラスを参照出来る
class Foo
end
foo1 = Foo.new() # Fooのインスタンスを作成
foo2 = foo1.class.new() # foo1.classからインスタンスを作成
puts foo1.class == foo2.class
#=> true
class FooExt < Foo
end
puts FooExt.superclass == Foo
#=> true
メソッド探索
メソッド
Rubyのメソッドは大きく2つ
インスタンスメソッド
クラスメソッド
インスタンスメソッド
インスタンスをレシーバとするメソッド
instance_methodsメソッドから一覧を取得可能
スーパークラスで定義されたインスタンスメソッド
も使用可能
Rubyの継承チェーン
ancestorsメソッドから継承チェーンを確認出来る
BasicObjectクラスは全てのクラスのスーパークラス
ほとんどのクラスはObjectクラス、Kernelモジュー
ルを継承
String Comparable Object Kernel BasicObject
Integer Numeric Comparable Object Kenerl BasicObject
Objectクラス・Kernelモジュール・Basic Objectクラスの
メソッドは、ほとんどのクラスで使用可能。
メソッド探索
インスタンスは、呼び出されたメソッドが見つかるまで、
継承元クラスのインスタンスメソッドを探す。
最終的に見つからない場合、
BasicObject#method_missingメソッドを呼び出す。
Foo Object Kernel
BasicObjec
t
Foo
インスタンス
Mix-InMix-InMix-InMix-In
Mix-in
クラスにモジュールをincludeする事
Rubyの継承は単一継承のみ許されている
複数の機能を継承したい時にMix-inを使用する。
モジュール
定義はクラスコードとほぼ同じで、class文の代わり
にmodule文を使う
クラスとの相違点
単独ではインスタンス化できない
クラスや他のモジュールにincludeできる
複数のクラスで適用したい機能をモジュールで定義
する
モジュールの継承チェーン
モジュールをincludeした場合、オブジェクトの継承
チェーンに無名クラスとして追加される。
この無名クラスはsuperclassメソッドからは参照出
来ない。
FooExt Bar Foo
class Foo
end
module Bar
end
class FooExt < Foo
include Bar
end
puts
FooExt.superclass
#=> Foo
FooExt.superclass
特異クラス
特異クラス
特定のインスタンスからのみ参照される特別なクラ
ス
foo1 = Foo.new
def foo1.hoge # fooの特異クラスにhogeメソッドを定義
puts “hoge”
end
foo2 = Foo.new
foo1.hoge #=> “hoge”
foo2.hoge #=> NoMethodError
特異クラスの継承チェーン
メソッドを定義した際、元のクラスを継承した特異
クラスが生成される。
インスタンスは特異クラスのインスタンスのように
なる。
classメソッドからは特異クラスは参照出来ず、元の
クラスが返される。
#foo1 Foo
foo2foo1
再オープン
再オープン式
foo1 = Foo.new
class << foo1    # foo1を再オープン
def hoge
end
end
再オープン式を使って特異クラスを定義する事も出来る
extendメソッド
再オープンを使用して特異クラスへモジュールを
Mix-inする事が出来る。
特異クラスへのMix-inはよく使用する為、同じ動作をするextendメ
ソッドが用意されている。
foo1 = Foo.new(1)
class << foo1
include Bar
end
foo1 = Foo.new(1)
foo1.extend(Bar)
クラスメソッド
Classクラス
Ruby内でクラスを表すクラス
クラスはClassクラスのインスタンス
class Foo
end
Foo.class #=> Class
Foo = Class.new
Foo.class #=> Class
クラスメソッド
クラスオブジェクトをレシーバとするメソッド
クラスの特異クラスのメソッドとして定義
Foo = Class.new
def Foo.hoge
end
class Foo
def self.hoge
end
end
foo1 = Foo.new
def foo1.hoge
end
class << foo1    
def hoge
end
end
クラスメソッドの定義例: 特異クラスの定義例:
まとめ
Rubyはメソッドチェーンが大事。
オブジェクトモデルの解釈は多くある
他の解説も読んでみると理解が増す
参考・出典:Ruby 公式資格教科書、

More Related Content

PPTX
第23回目
PPTX
Javascript3
PDF
サーバサイドNodeの使い道
PDF
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
PDF
Node.js基礎の基礎 - Miyazaki.js vol.2
PDF
WebSocketのキホン
PDF
Node.js を選ぶとき 選ばないとき
PDF
エスキュービズム新技術発表資料
第23回目
Javascript3
サーバサイドNodeの使い道
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Node.js基礎の基礎 - Miyazaki.js vol.2
WebSocketのキホン
Node.js を選ぶとき 選ばないとき
エスキュービズム新技術発表資料

More from エンジニア勉強会 エスキュービズム (20)

PDF
小売りにおけるAIの可能性
PDF
React Redux Redux-Saga + サーバサイドレンダリング
PDF
Azure container service上でコンテナベースでオートスケールの検証をしてみた
PDF
Go言語によるWebアプリケーション開発
PDF
機械学習ライブラリ : TensorFlow
PDF
Developer Summit 2016 参加してきました。
PDF
2016 新人研修 基本技術講座 (1)
PDF
Dockerを用いたマイクロサービスについて
PDF
Azureで動いている機械学習のいろいろについて
PDF
アルゴリズムとデータ構造(初歩)
PDF
何故エンジニアはテストをしないのか
PDF
PDF
【エンジニア勉強会】品質ってなんなのさ
PDF
【エンジニア勉強会】PMやってみた
小売りにおけるAIの可能性
React Redux Redux-Saga + サーバサイドレンダリング
Azure container service上でコンテナベースでオートスケールの検証をしてみた
Go言語によるWebアプリケーション開発
機械学習ライブラリ : TensorFlow
Developer Summit 2016 参加してきました。
2016 新人研修 基本技術講座 (1)
Dockerを用いたマイクロサービスについて
Azureで動いている機械学習のいろいろについて
アルゴリズムとデータ構造(初歩)
何故エンジニアはテストをしないのか
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】PMやってみた
Ad

Rubyのクラスとメソッド_エスキュービズム勉強会0530