Rubyのクラスで使う変数について調べてみた
インスタンス変数
インスタンス変数はクラスのインスタンス毎に異なる値を持てる変数
基本的にはこちらを使うことになるだろう
@val
クラス変数
クラス変数はクラスのインスタンス全てで共有される変数
スコープが広いため通常の使用には適さないので、(そもそも別々に生成したオブジェクトが依存しあう関係はよろしくないのではないか)あまり使うタイミングはないと思われる。
@@val
クラス定数
クラス定数は一旦定義するとクラス内で変更ができなくなる変数
継承によるオーバーライドなどの条件に限り値を変更することができる。
特定の日時をもつパターンなど、個々のクラスで意識しなくていい値についてはこちらでいいだろう。
共通項目として開発者に意識させる効果も見込まれる。
VAL
実装するとしたらこんな感じだろうか
例を作るときにいいパターンが思いつかなくて困るな...
require 'date' class Human TIME = Time.now.strftime("%H:%M") @@move = "can" def canAction p "only walk" end end class Jack < Human def initialize(swim) @swim = swim end def canAction p "I #@@move walk" p "I #@swim swim" p "It's time " + TIME end end class Candy < Human def initialize(swim) @swim = swim end def canAction p "I #@@move walk" p "I #@swim swim" p "It's time " + TIME end end jack = Jack.new("can") candy = Candy.new("can't") p "jack ..." jack.canAction() p "candy ..." candy.canAction()
ruby Ruby/Class.rb "jack ..." "I can walk" "I can swim" "It's time 18:09" "candy ..." "I can walk" "I can't swim" "It's time 18:09"
Rubyを使っていて思うんだが、紛らわしい文法が多い気がする....
ルールを敷くのも大変だし、組織で開発する場合は苦労しそうだ