SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
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 公式資格教科書、

Contenu connexe

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

Plus 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やってみた
 

Dernier

Dernier (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

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