2012-01-11 18 views
3

attr_accessorが設定されていると仮定して、クラス内からインスタンス変数にアクセスするのがベストプラクティスであるかどうか不思議です。Rubyインスタンス変数へのアクセス

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    @user 
    end 
end 

またはインスタンス変数(@user)またはゲッターメソッド(試験#ユーザ)によってそう

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    self.user 
    end 
end 

答えて

6

リファクタリングが容易なので、Getterメソッド。アクセスポイントでタイムスタンプを更新したいとします。

class Test 
    def user 
    @user.last_read = Time.now 
    @user 
    end 
end 

userへの参照は、すべて新しいロジックで更新されています。あなたの参照が@userにある場合はそれほど簡単ではありません。

+1

アイデアはルビーに依存しません。プロパティがフィールドに優先される理由については、http://stackoverflow.com/questions/3069901を参照してください。 – Gishu

+0

attr_accessorが内部でのみ追加された場合はどうなりますか?私は外部アクセスのためにこれらの属性を必要としないので、その時点でattr_accessorを追加する必要はないので、インスタンス変数を内部的に使用して取得/設定する方が理にかなっていますか? – user577808

+1

@ user577808同じ原則がクラス内で適用されますが、リファクタリングが容易なため、コンテキストが小さいほど重要性は低くなります。しかし、クラスの最小インタフェースを公開することは良い考えです。この場合、get/setを使用する場合はプライベートにする必要があります。 – Mori

関連する問題