|
From: Masao M. <mu...@hi...> - 2002-06-11 18:01:01
|
むとうです。 定数値の扱いについてみなさんのご意見をお聞かせください。 前から書こうと思ってたんですが、延び延びになってしまいました。 突然書こうと思ったのは、 Re: [ruby-gnome-users-ja] patch of add selection-copy for Ruby/GTK のスレッドで、やはり今のうちに方向性を決めておかなきゃいかんと 感じたからです。 ---- 現在、定数値はその扱いがバラバラです。ある定数はクラスの定数として 存在し、ある定数はGtkモジュール直下の定数になって、また、ある定数はContants というモジュール配下にある....などです。 これを1つの体系にまとめたいと考えてます。 とりあえず、前提として以下をあげます。 ・Gtk, Gdk直下に全ての定数を宣言するのはやめる ・ある程度のグループ化を図る ・Gtk::ItemFactory::Constantsというような括り方はやめる 一応、3つ案を考えました。これ以外でもっと良い案があったら教えてください。 例として、GdkSelectionType, GtkJustificationの2つのenumをあげます。 GdkSelectionType: GDK_SELECTION_TYPE_ATOM = 4, GDK_SELECTION_TYPE_BITMAP = 5 GtkJustification GTK_JUSTIFY_LEFT, GTK_JUSTIFY_RIGHT ■(案1)enum系のものは全てモジュールとして定義する これは、 Gdk::SelectionType::ATOM Gdk::SelectionType::BITMAP Gtk::Justification::LEFT Gtk::Justification::RIGHT と定義されます。いがらしさんの自動生成されたコードも確かこの方法を 取っていたと思います。 利点: ・GTK+から類推しやすい 欠点: ・定数用モジュール数がとんでもなく多くなってしまう ・どのクラスで使用される定数値なのかがわかりづらい ■(案2)ある程度母体となるクラス・モジュールを持つモノに関してはそれに入れてしまい それに当てはまらない(グローバルに使うようなモノ)に関しては案1と同じにする 例えば、上記の場合、 GdkSelectionType: GDK_SELECTION_TYPE_ATOM = 4, GDK_SELECTION_TYPE_BITMAP = 5, これは、 Gdk::Selection::TYPE_ATOM Gdk::Selection::TYPE_BITMAP となります。上記は、GdkSelectionTypeを意識せず、あくまでもGDK_SELECTION_TYPE_*という 文字に着目していることになります。 ただし、この例では、ベースとなるクラス・モジュールが存在しない場合があります。 それらは、 Gtk::Justify::LEFT Gtk::Justify::RIGHT のようにします。 利点: ・rbbr.rb等のクラスブラウザ見た場合にそのクラスがどのような定数を持っているのか わかりやすい ・定数用モジュール数が案1に比べ少なくて済む 欠点: ・GTK+から類推する場合は実際の定数値から類推するようにする必要がある #これは欠点になるのかな...ルールを覚えれば問題ないと思ってます。 ■(案3)クラス・モジュールの中でさらにサブモジュール化する。 Gdk::Selection::Type::ATOM Gdk::Selection::Type::BITMAP Gtk::Justificationの方は変わらないですね。 Gtk::Justification::LEFT Gtk::Justification::RIGHT となります。 利点: ・include Gdk::Selection::Typeなどという書き方も可能 欠点: ・モジュール数は案1と同じ数だけできる ---- クラス・モジュールが、「ある機能のまとまり」であることを 考えると、定数値も含めて案2が良いかなと思っています。 いずれの案でも、これに特化したやり方であれば自動生成ができそうな 気はしてますので、純粋に仕様としてどれを採用した方が良いかという 部分でみなさんの率直な意見をお伺いしたいです。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |