rubyで生成に時間のかかるattrの実装の仕方
現在このようなクラスがあります。
class Hoge
attr_accessor :fuga, :piyo
def initialize
data_create
end
def data_create
data = 色々な処理{...}
# インスタンス変数に代入
@fuga = data[:a]
@piyo = data[:b]
end
end
# 使う時
hoge = Hoge.new
hoge.hufa
hoge.piyo
Hoge#datacreate
は実際にはhttp
経由で情報を取得してきたり、変換処理を行ったりしていて多少時間がかかってしまうものです。
そのため、インスタンスを生成する度にオーバーヘッドのコストがかかってしまいます。
Hogeクラスを使う時に必ず@fuga
や@piyo
を使うわけではないので、初めて参照されたタイミングでデータを作るようにすればいいと思いつきました。
具体的には以下のようなコードです。
class Hoge
@fuga = nil
@piyo = nil
def fuga
data_create if @fuga.nil?
@fuga
end
def piyo
data_create if @piyo.nil?
@piyo
end
def data_create
data = 色々な処理{...}
# インスタンス変数に代入
@fuga = data[:a]
@piyo = data[:b]
end
end
# 使う時
hoge = Hoge.new
hoge.hufa
hoge.piyo
まだプログラミングの経験が浅いため、このやり方が良い方法である自信がありません。
気をつけたほうがいい部分などがあれば、教えていただけないでしょうか。
みなさんの「自分だったらこうする」というアイディアなどもドンドンお聞かせください。
また、rubyらしく工夫できる書き方などもあれば教えて下さい。
よろしくお願いします。