私もJavaのバックグラウンドを持っており、かなりの数のRubyと少しのGoを持っています。Clojureの約1か月後、私が現在行っていることは次のとおりです。
- 私は名前空間をセマンティックユニットとして考えています。名前空間は、データ型やその操作など、特定の目的のために一緒に機能するコードです。
名前空間とファイルには2つの規則があります。
- 1つのファイルに快適に収まる小さいユニットの場合(ファイルを分割する制限として最大1000行を使用しています)、ファイルごとに1つの名前空間があり、ディレクトリパスとファイル名は名前空間と同じです。これはJavaでは良いことだと思います。ファイルから名前空間を見つけたり、その逆を簡単に行うことができます。
- 複数のファイルを必要とする大きなユニットの場合、Goの規則を使用しています。名前空間はディレクトリパスと一致し、ディレクトリ内のすべてのファイルは同じ名前空間を共有します。このような場合、私は通常、他のファイルをロードして相互作用する固定名('main')のプライマリファイルを割り当てます。
名前空間の例として、フォーマットを読み取り、それをHTMLに変換するパーサーがあります。パーサー(セマンティックユニット)の単一の名前空間と、サブ機能で分割されたディレクトリ内のいくつかのファイル(レクサー、パーサー、HTML変換、およびパーサーを使用するためのプライマリパブリックAPIを含むメインファイル)があります。
データ型ごとに1つの名前空間を自動的に使用することはありません。これは、データ型のスコープによって異なります。それが大きなものなら、おそらく。しかし、2つのフィールドといくつかの関数を持つPointのようなデータ型の場合、Geometryのようなより一般的な名前空間にそれを包含したいと思います。
必要と使用:
- ほとんどすべての場所で適切に短いエイリアスを使用する必要があります。
- これにより、コア名の再利用も可能になります。私の専用ツリーデータ型には、マップに合わせて「get」操作があります。requireを使用しても競合はありません。「get」はClojureコアのgetであり、「tree/get」は私のデータ型の1つです。
- 「use」は、マップとフィルターを1つにまとめた独自の「map-if」を作成する場合のように、「コア拡張機能」と見なすものにのみ使用しています。