【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part26 ライブラリと可視性
「基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part26 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part25 ライブラリと可視性
今回もライブラリと可視性の学習です。
ライブラリと可視性
ライブラリプレフィックスの指定
ライブラリを複数import
した際、クラス名が衝突(同じクラス名)することがあります。
エラーパターン
testA/test.dart
String hoge() {
return 'testAフォルダのhoge!';
}
testB/test.dart
String hoge() {
return 'testBフォルダのhoge!';
}
main.dart
import 'testA/test.dart';
import 'testB/test.dart';
void main() {
print('Hello Dart! ' + hoge());
}
これだと以下のようなエラーになります。
main.dart:5:26: Error: 'hoge' is imported from both 'testA/test.dart' and 'testB/test.dart'.
print('Hello Dart! ' + hoge());
正常パターン
これを防ぐためにプレフィックスを指定できます。
import
文の末にas
を記述し、続けて任意の名前を指定します。
使用する際は「プレフィックス名
.関数(もしくはクラス
」とします。
main.dart
import 'testA/test.dart';
import 'testB/test.dart' as testB;
void main() {
print('Hello Dart! ' + testB.hoge());
}
正常に実行できました。
Hello Dart! testBフォルダのhoge!
testA/test.dartのhoge()は?
では「testA/test.dart」のhoge()
は呼び出せないのでしょうか?
そんなことはないようです。
今回、「testB/test.dart」にプレフィックスを指定したので単純な「hoge()
」関数は「testA/test.dart」のみとなりました。
だから・・・なのか、以下のように実装すると「testA/test.dart」のhoge()
を呼び出せます。
main.dart
import 'testA/test.dart';
import 'testB/test.dart' as testB;
void main() {
print('Hello Dart! ' + hoge()); // ★testA/test.dartのhoge()
}
最後に
ライブラリのプレフィックスについて学習しました。
識別子の衝突はどの言語でも発生します。
名前空間みたいなものはないのでしょうかね?
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません