Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ruby の継承について
1. インスタンス変数
・「@」を付けて宣言
・スコープはプライベート
※ ただしJavaで言う所の protectedに近い
1. インスタンス変数
サブクラス内からアクセス可能
2. クラス変数
・「@@」を付けて宣言
・スコープはプライベート
・全てのサブクラスで「共有」
※ ただしJavaで言う所の protectedに近い
class Base
@@name = ‘base’
def name
puts @@name
end
end
class User < Base
@@name = ‘user’
end
classTweet < Base
@@name = ‘...
実行結果
3. クラスインスタンス変数
・「@」を付けて宣言
・スコープは private
・宣言したクラス内でのみ利用可能
※ ただしJavaで言う所の protectedに近い
クラス変数として利用出来る
3. クラスインスタンス変数
Javaで言う所の
4. privateメソッド
・Java の protected に近い
・レシーバを指定せずに呼び出す
5. protecedメソッド
・Java の protected に近い
・レシーバは self のみ
結論
Ruby で継承はツライ
結論
・ private が private じゃない
・予期せぬ Override
解決方法
解決方法
継承よりも
コンポジション(委譲)
class Base
@@name = ‘base’
def name
puts @@name
end
end
class User
def initialize
@base = Base.new(‘user’)
end
def name
@b...
Upcoming SlideShare
Loading in …5
×

Rubyの継承について

421 views

Published on

Rubyのクラスにおいてインスタンス変数のスコープや暮らす変数の挙動について

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Rubyの継承について

  1. 1. Ruby の継承について
  2. 2. 1. インスタンス変数 ・「@」を付けて宣言 ・スコープはプライベート ※ ただしJavaで言う所の protectedに近い
  3. 3. 1. インスタンス変数 サブクラス内からアクセス可能
  4. 4. 2. クラス変数 ・「@@」を付けて宣言 ・スコープはプライベート ・全てのサブクラスで「共有」 ※ ただしJavaで言う所の protectedに近い
  5. 5. class Base @@name = ‘base’ def name puts @@name end end class User < Base @@name = ‘user’ end classTweet < Base @@name = ‘tweet’ end
  6. 6. 実行結果
  7. 7. 3. クラスインスタンス変数 ・「@」を付けて宣言 ・スコープは private ・宣言したクラス内でのみ利用可能 ※ ただしJavaで言う所の protectedに近い
  8. 8. クラス変数として利用出来る 3. クラスインスタンス変数 Javaで言う所の
  9. 9. 4. privateメソッド ・Java の protected に近い ・レシーバを指定せずに呼び出す
  10. 10. 5. protecedメソッド ・Java の protected に近い ・レシーバは self のみ
  11. 11. 結論 Ruby で継承はツライ
  12. 12. 結論 ・ private が private じゃない ・予期せぬ Override
  13. 13. 解決方法
  14. 14. 解決方法 継承よりも コンポジション(委譲)
  15. 15. class Base @@name = ‘base’ def name puts @@name end end class User def initialize @base = Base.new(‘user’) end def name @base.name end end

×