Opa のドキュメントを読みましたが、モジュールとパッケージの違い、およびモジュールまたはパッケージが Opa アプリケーションのソース レイアウトにどのようにリンクされているかがわかりませんでした。
モジュールとパッケージをいつどのように使用するかについて、誰かが賢明な例を提供できますか?
Opa のドキュメントを読みましたが、モジュールとパッケージの違い、およびモジュールまたはパッケージが Opa アプリケーションのソース レイアウトにどのようにリンクされているかがわかりませんでした。
モジュールとパッケージをいつどのように使用するかについて、誰かが賢明な例を提供できますか?
Cedricsの回答を補足するために:
パッケージは基本的なコンパイル単位です。パッケージまたはパッケージが変更に依存している場合、再コンパイルする必要はありません。小規模なプロジェクトの場合、パッケージを使用しなくても問題ない場合があります。これは、すべてを 1 つのパッケージに入れることと同じです。より大きなプロジェクトの場合、通常、プロジェクトをいくつかのパッケージに分割して、個別のコンパイルの恩恵を受けることができます。
モジュールは主に、関連する定義の名前空間を提供します。1 つのパッケージに複数のモジュールを含めることができます。
Opa はファイル名の制限を課しません。1 つのファイルに複数のモジュールを含めることができ、それらの名前はファイルの名前とは関係ありません。また、パッケージ名とソース ディレクトリ ツリー内のファイルの場所の間に強制的な関係はありません (ただし、ここでは規則を使用することは確かに理にかなっています)。明らかに、1 つのファイルは 1 つのパッケージに属します。
アプリケーションの一部を別の に分離できますpackages
。たとえば、モデル、ビュー、コントローラーの 3 つのパッケージを作成できます。package myApp.model
モデル パッケージに属するソース ファイルの先頭に例を定義するだけです。
次に、ビュー ファイルの 1 つにモデルが必要な場合import myApp.model
は、ファイルの先頭に追加します。
package
ソース ファイルにandを記述する代わりにimport
、単一の conf ファイルを使用することもできます。
myApp.controller:
import myApp.view
src/controller.opa
myApp.view:
import myApp.model
src/view.opa
myApp.model:
src/model.opa
そして、 --conf コンパイル オプションを使用します。
モジュールはこのように定義されます
module MyModule {
function f(){ void }
}
モジュール関数にアクセスするには、MyModule.f()
したがってmodel
、モジュールがMyModule
定義されたパッケージがあり、外部からアクセスしたい場合は、次のように記述します。
import myApp.model
MyModule.f()
更新: 以下のメッセージを読んでください。他の有用な情報が提供されます。
基本的に、パッケージは常に、別のファイルで定義されている値と関数を含めるために使用されます。(標準ライブラリで定義されているものを除いて。)したがって、コード部分を互いに分離することができます。つまり、コードを異なる部分に分割できます。それらの使用方法は、セドリックの回答ですでに説明されています。完全なコードは常にimport
.
一方、モジュールは抽象化を提供します。モジュールを使用すると、モジュール内でのみ使用され、外部からは見えない値と関数を定義できます。これにより、モジュールのユーザーに対して実装の一部を非表示にし、明確に定義されたインターフェイスを外部に提供することが可能になります。この概念により、モジュールが使用されているコードを壊すことなく、特定の実装部分を簡単に変更できます。これは、プログラムの設計において非常に重要な概念です。