このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Xion/Java:そろそろリリース

業務連絡くらいは書かないとね。しかし、金曜にこんなこと書くってことは、週末にやれってこと…… ひどいヒト>わたし。

晒す準備

中途半端でもなんでもいいから、とりあえずリリース(晒し)しましょ。zipでもtar.gzでも、とにかく塊を一個作ります。Xion-0.1/ とか(0.01かもなー)にまとめて入れるものは:

  • build.xml -- 自分で作りたいヒトはこれで作れるように。
  • src/ -- ソースツリー
  • bin/, lib/ -- ビルドのとき、実行するときに必要なツール、ライブラリは最初から入れておきましょう。量がすごく多いとかライセンスとかの問題があれば話は別ですが。
  • xion.jar -- 作らなくてもすぐに使えるように。

間に合わないとか、入れないほうがいいとか:

  • doc/ -- 間に合わない。カラッポかな。READMEくらいは僕が書くようにします。
  • samples/ -- src/ の下にサンプルソースを入れておくと何か汚いので、わけたほうがいいと思う。
  • test/ -- 同様な理由でわけたほうがいいかな。
  • CVS/とかOS特有のファイルとかは取り除いてください。
  • でも、Eclipseの.projectとかは残っていたほうが便利かも知れない。

ネーミング

Xionという接頭辞を付けた名前と裸の名前が混在している(それが悪いわけではないが)。StringとかReaderとかは、XionString, XionReaderとしないとさすがにまずい、から悩みはない。で、問題はContext, Converterとかだが、かなーりアリガチな名前だなー。パッケージ名で修飾するハメにならないように、XionContext, XionConverterにしておいたほうが無難と判断。

value()

メソッドvalue()はイキチガイがあった。value()は、必ずしも文字列を返すのではない。xo, xa, xs がそれぞれ、XionObject, XionArray, XionStringだとして:


Map m = xo.value();
List l = xa.value();
String s = xs.value();
としたい。要するに、Xion型に対応するJava型のデータを返す。コンバータを作るとき使う気がする。

Taggable

ってインターフェース要るのかな? 概念的な分類の整合性のためなら止めよう。ファイルが一個減るほうが重要。

DefaultContext

複雑になりすぎた。以前の超簡単コンテキストはSimpleContextとかで残して、load(現状のloadAdd/loadSet)だけを持ったFileContext(より実情を表すならStreamContextかな)へと単純化したほうがいいでしょう。

DefaultContextってのは要らないかな。Defaultがないと落ち着かないなら、例えば:


/**
* コンバータを追加する。
* 既に同名のタグが登録されていれば例外となる。
*/
void addConverter(Converter conv) throws XionContextException;

/**
* 指定のタグでコンバータを追加する。
* 既に同名のタグが登録されていれば例外となる。
*/
void addConverter(String tag, Converter conv) throws XionContextException;

/**
* コンバータをセットする。
* 既に同名のタグが登録されていれば上書きする。
*/
void setConverter(Converter conv);

/**
* 指定のタグでコンバータをセットする。
* 既に同名のタグが登録されていれば上書きする。
*/
void setConverter(String tag, Converter conv);

/**
* 指定のタグのコンバータを削除する。
* コンバータが登録されていなければ何もしない。
*/
void removeConverter(String tag);

/**
* 指定のタグのコンバータがあればtrue、
* なければfalseを返す。
*/
boolean hasConverter(String tag);

引数が""、nullのときの扱いとか細かいことは適当に考えて。それと、登録済みを列挙するにはイテレータがいいでしょう。


// タグを全部表示
for (Converter conv : context) {
System.out.println(conv.tag());
}

タグ(キー)だけの列挙とか、安全な全部削除とかも欲しくなるが、きりがないからいいや;そもそも、これ作んなくてもいいし。

手を抜く

その他、手を抜き足りない部分をチェック。がんばって手を抜こう(って、なんたる日本語だ)。