SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
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 公式資格教科書、

Mais conteúdo relacionado

Mais de エンジニア勉強会 エスキュービズム

Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたエンジニア勉強会 エスキュービズム
 

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

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

Último

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Último (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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