Dart クラスの名前空間を作成するにはどうすればよいですか? 私は C# のバックグラウンドから来ており、namespace SampleNamespace { }
.
Dartで同じことをどのように達成しますか?
Dart クラスの名前空間を作成するにはどうすればよいですか? 私は C# のバックグラウンドから来ており、namespace SampleNamespace { }
.
Dartで同じことをどのように達成しますか?
Dart には名前空間の概念はありませんが、代わりにライブラリがあります。ライブラリは、複数のファイルで構成され、複数のクラスと関数を含むことができるという点で、名前空間と同等であると考えることができます。
Dart のプライバシーは、クラス レベルではなく、ライブラリにもあります (アンダースコアで始まるものはすべて、そのライブラリにプライベートです)。
ライブラリを定義する例 (ユーティリティ ライブラリの例を使用:
// utilities.dart
library utilities; // being the first statement in the library file
part
キーワードを使用して、他のファイルを同じライブラリの一部にすることができます。パーツ ファイルは、コードを整理するためにのみ使用されます。すべてのクラスを 1 つのライブラリ ファイルに入れることも、複数のパーツ ファイル (またはパーツ ファイルとライブラリ ファイル) に分割することもできます。実行には影響しません。メイン ライブラリ ファイルを親フォルダーに配置し、パーツ ファイルをフォルダーに配置するのがスタイルですsrc/
。
例を展開してパーツ ファイルを表示します。
// utilities.dart
library utilities;
part "src/string_utils.dart";
part "src/date_utils.dart";
これらのパーツ ファイルは、次のpart of
ステートメントを使用して、それらが含まれているライブラリにリンクし直します。
// src/string_utils.dart
part of utilities;
// functions and classes
String reverseString(s) => // implementation ....
String _stringBuilder(strings) => // a private (to the library) function,
// indicated by the leading underscore
//... snip other classes and functions
関数を含むライブラリができたので、ライブラリをimport
ing することで、そのライブラリを他の場所で利用できます。
// my_app.dart;
import "path/to/library/utilities.dart";
main() {
var reversed = reverseString("Foo");
// _stringBulider(["a","b"]); // won't work - this function is
// only visible inside the library
}
reverseString()
衝突を避けるためにライブラリにエイリアスを設定する場合 (関数を含む 2 つのライブラリをインポートする場合は、次のas
キーワードを使用します。
// my_app.dart;
import "path/to/library/utilities.dart";
import "some/other/utilities.dart" as your_utils;
main() {
var reversed = reverseString("Foo");
var your_reversed_string = your_utils.reverseString("Bar");
}
import ステートメントは、Dart のパッケージ マネージャーである pub によってインポートされたパッケージも使用するため、ライブラリを github などでホストし、次のようにライブラリを参照することもできます。
// my_app.dart;
import "package:utilities/utilities.dart";
main() {
var reversed = reverseString("Foo");
}
pubspec.yaml
pub の依存関係はファイルで定義され、ライブラリの場所を pub に指示します。詳細については、pub.dartlang.orgをご覧ください。
ライブラリ ファイルのみが次のことができることに注意することが重要です。
import
。パーツ ファイルはできません。library
キーワードが含まれています。パーツ ファイルはできません。part
ます。パーツ ファイルはできません。最後の 1 つのポイントは、実行可能なアプリ ファイルはライブラリ ファイルである可能性があり (そうである可能性が高い)、パーツ ファイルで構成することもできるということです。
// my_app.dart;
library my_app;
import "package:utilities/utilities.dart";
part "src/edit_ui.dart";
part "src/list_ui.dart";
part "src/foo.dart";
main() {
var reversed = reverseString("Foo");
showEditUi(); // perhaps defined in edit_ui.dart....?
}