(ruby)(ハッシュでプロパティを初期化できるようなクラス定義をしてみる)
インスタンシング(=実体化、オブジェクト化)する時に引数をたくさん指定する必要があったり
デフォルト値を設定して省略可能にしたい引数がたくさんあったりするようなクラスの場合
標準的な定義の仕方では 「,」がたくさん並んだりして見づらい事になりますよね
これは極端な例ですが、こんな事になってしまうと第何引数なのかを把握するだけでも一苦労ですね
ということでハッシュを利用して初期化するようにすれば、楽になりますよね
実際にそのようなクラスはよく見かけますよね
そこで個人的な考えで あれと同じ事が出来そうな クラスの定義を考えてみました
(もしかするともっとちゃんとした定義の仕方があるのかもしれません)
実際にインスタンシングする時は
また、ハッシュを使ったことによって生まれた面白い特性として
デフォルトで定義してないプロパティ名も追加する事が可能です
実際に クラス内で値を得る方法は
デフォルト値を設定して省略可能にしたい引数がたくさんあったりするようなクラスの場合
標準的な定義の仕方では 「,」がたくさん並んだりして見づらい事になりますよね
これは極端な例ですが、こんな事になってしまうと第何引数なのかを把握するだけでも一苦労ですね
obj = TestClass.new(10,20,30,40,50,"abcd",60,"efg")
ということでハッシュを利用して初期化するようにすれば、楽になりますよね
実際にそのようなクラスはよく見かけますよね
そこで個人的な考えで あれと同じ事が出来そうな クラスの定義を考えてみました
(もしかするともっとちゃんとした定義の仕方があるのかもしれません)
class TestClass def initialize(init_properties = {}) # プロパティの各デフォルト値の定義をハッシュでします @properties = {:pro1 => 1, :pro2 => 2, :pro3 => 3, :pro4 => 4} # init_properties の 要素の分だけループをしながら値をセットします init_properties.each{|property_name, property_value| @properties[property_name] = property_value } end endまぁこれが基本形になるわけですね、考えてみればシンプルなものですね
実際にインスタンシングする時は
obj = TestClass.new()で全てデフォルト値のオブジェクトが出来上がり
obj = TestClass.new({:pro2 => 200})などとすれば :pro2の値が200になり、その他はデフォルト値のオブジェクトが出来上がります
また、ハッシュを使ったことによって生まれた面白い特性として
デフォルトで定義してないプロパティ名も追加する事が可能です
obj = TestClass.new({:pro2 => 200, :pro100 => 5555})
実際に クラス内で値を得る方法は
@properties[:opt2]などのようにすればいいだけですね、特に特別な事は何もありません