ジャバでパッケージの名前空間を考えたり、クラスやフィールド、メソッドの名前を考えたりするときに自分が考えたことのメモ。
プログラミングについてよく分かってないので、アドバイスとか意見とかあれば歓迎です。
パッケージ、クラス
TilyEvaluator
というライブラリがあるとする。TilyEvaluator
にはメインのエバリュエーターと、それを実現するためのさまざまなマッチャ、エクスプレッション、ユーティルなどが存在している。
ルビーの場合
自分が慣れ親しんだルビーの場合はこんな感じのファイル構造にすると思う。
lib/
|- tily_evaluator.rb
`- tily_evaluator/
|- matcher.rb
|- matcher/
| |- one.rb
| `- another.rb
|- expression.rb
|- expression/
| |- one.rb
| `- another.rb
|- util.rb
`- util/
|- one.rb
`- another.rb
コードにするとこんな感じ。
class TilyEvaluator
class Matcher
class One
end
class Another
end
end
class Expression
class One
end
class Another
end
end
class Util
class One
end
class Another
end
end
end
ジャバの場合
ジャバの場合だったらこんな感じにすると思う。ジャバはパッケージ名前空間が必要だから、ここでは仮に tokyo.prgrphs.evaluator.*
としている。
src/
`- main/
`- java/
`- tokyo/
`- prgrphs/
|- evaluator/
|- TilyEvaluator.java
|- matcher/
| |- AbstractTilyMatcher.java
| |- OneTilyMatcher.java
| `- AnotherTilyMatcher.java
|- expression/
| |- AbstractTilyExpression.java
| |- OneTilyExpression.java
| `- AnotherTilyExpression.java
`- util/
|- OneTilyUtil.java
`- AnotherTilyUtil.java
パッケージの名前空間と、クラス名の名前空間を両方意識する必要があると思っている。
パッケージの名前空間は、そのままで tokyo.prgrphs.evaluator.*
配下のファイル構造。
クラス名の名前空間というのは、クラス名にあまりにも普遍的な名前 (たとえば String
とか Pattern
とか List
とか) をつけてしまうと、標準ライブラリの名前と衝突してしまうこと。
衝突してしまってもエラーは出ないんだけど、import はできず、クラスを参照するときに名前空間をつけなくてはならなくなる。
prgrphs.tokyo.evaluator.util.String str = new prgrphs.tokyo.evaluator.util.String();
とかやらなくてはならないのでできる限り回避したい。(オープンソースでライブラリを提供する場合とかは特に回避したいと思う)。