|
From: Masao M. <mu...@hi...> - 2002-05-27 14:40:33
|
むとうです。
ちょっと話が細かくなります。
先ほどの(2)を前提としています。
・メソッドの扱い(getter/setter等)
今、Ruby-GNOMEでは以下のようなメソッドがテキトー(失礼)
に実装されています。
set_hoge
hoge= (= set_hoge)
get_hoge
hoge (= get_hoge)
以前、hoge=, hogeに統一しようというお話があったようにも
記憶しています。
ただ、本当にそれで良いのかなぁという疑問がありますので、
この辺、みなさんがどう思われているか知りたいです。
#すでにruby-list等で話し合われている内容でしたらごめんなさい。
実は、私自身、GUIのツールを作るときは継承を多用する癖があります。
#これがあまりよろしくないということであればここで話が終わってしまう
#のかもしれませんが(^^;)。
例えば、以下に例を出します。これはRuby-GNOMEとは関係ない仮想的な
クラスです。
-----
class Button
def initialize(type)
@type = type
end
def label=(label)
@label = label + @type
end
def set_text(text)
@text = text + @type
end
def show
puts @label, @text
end
end
class MyButton < Button
def initialize
super("My Button")
self.label = "Click " #(1)
# label = "Click " #(2)
set_text("This is OK.") #(3)
end
end
button = MyButton.new
button.show
-----
この例でMyButtonは自分が実装するクラスだとします。
で、(2)はよくやる間違えだと思います(私だけ?)。
で、ここから先が問題なのですが、
このような場合は、
(A) (1)のようにself.label=を積極的に使うようにするのか
(B) (3)のようにset_labelを用意するのか
のどちらかになると思います。
次に、複数のパラメータを持つメソッドを考えます。
(C)set_label("My Button", CENTER)
(D)label= "My Button", CENTER
これって(D)のパターンってエラーになりますよね?たしか。
むりやりlabel=を使おうと考えたら配列にするのかな...。
(E)self.label= ["My Button", CENTER]
(A) - (E)まで考えると、私的にはlabel=よりset_labelの
方が良いような気がしてきました。
続いて、あくまでもサブクラスを作らないことを考えます。
---
button = Button.new("My Button")
button.label = "Click" #(4)
button.set_text = "This is OK." #(5)
button.show #(6)
---
こちらの例では、(5)よりも(4)の方がきれいだなぁと思うのも
事実です。
さて、getterはどうでしょう。
---
button.label #(7)
button.get_text #(8)
---
これは、圧倒的に(7)の方が見やすいと思います。(7)であれば
サブクラス内でもそのまま使えますし。
============================
で、じゃぁ、どういう組み合わせが一番良いの?というところが
みなさんにお伺いしたいところです。
(1)
setter: hoge=(a) #->パラメータ1つ
hoge= [a, b] #->パラメータ2つ以上
getter: hoge
(2)
setter: hoge=(a) #->パラメータ1つ
set_hoge(a, b) #->パラメータ2つ以上
getter: hoge
(3)
setter: set_hoge(a, b) #->パラメータ1つでも2以上でも
getter: get_hoge
(4)
setter: hoge=(a) #->パラメータ1つ
set_hoge(a) #->hoge=と同じ
set_hoge(a, b) #->パラメータ2つ以上
getter: hoge
get_hoge #->hogeと同じ
(5)
setter: hoge= #->パラメータ1つ
set_hoge #->hoge=と同じ
set_hoge(a, b) #->パラメータ2つ以上
getter: hoge
これくらいのパターンを考えてみたのですが、Rubyっぽくて
継承時・非継承時のメソッドのわかりやすさ、という点から
(4),(5)を、
さらに、なるべくメソッド数は少ない方が良い、という点から
(5)が良いのではないかなぁと思っています。
#とはいえ、実は密かに(3)が一番確実でメソッド数が少ない
#というのも事実なのですが。どうどうめぐり。
みなさんはどうお考えでしょうか。
--
.:% Masao Mutoh<mu...@hi...>
|