この記事ではFlutterの基本出来な文法であるimportとpart/part ofの違いについて説明します。
現場ででFlutterを使用しなければいけたいため、flutterをインプットしておりますので、Flutter初学者の方はぜひ参考にしていただけると幸いです。
importとは
他の言語経験者であれば大体予想がつくと思われますが、importは他のファイルやパッケージ内のコードを再利用(インポート)するためのものです。
基本文法
// 同じディレクトリにあるsub.dartファイルをインポート
import 'sub.dart'
//パッケージをインポートする場合は'package:パッケージ名/パッケージファイル.dart';
import 'package:main_package/main_package.dart'
部分的なインポート
特定のクラスや関数をインポートする場合
// import 'ファイル名.dart' show クラス名, 関数名;
import 'sub.dart' show ShowUser;
ライブラリ名のエイリアスをつける
異なるライブラリやファイルで同じ名前のクラスや関数が定義されている場合、asを使用することで別名(エイリアス)をつけることができる
import 'package:main_package/main_package.dart' as lib;
import 'package:sub_package/sub_package.dart' as sub_lib;
//クラスや関数を呼び出すとき,lib
lib.MainClass instance = lib.MainClass()
sub_lib.MainClass instance = lib.MainClass()
このようにすることにより、同じ名前が衝突するのを防ぐことができます。
part/part of について
partとpart ofは、一つのライブラリやファイルを複数のファイルに分割して管理するために使用されます。
これは、コードをモジュール化して、異なるファイルに分割するために使用しますが、importと違う部分は同じライブラリ内のコードをファイル間で分けるために使用します。
partを使うことで、1つの大きなファイルを複数の小さなファイルに分割し、それらが1つの「ライブラリ」の一部であることを示すことができます。
Dartではライブラリは「コードの一部」、パッケージは「プロジェクト全体」を指します。
ライブラリ: コードをグループ化した単位。1つのファイルまたは複数のファイルをまとめたもの。importして再利用します。
パッケージ: 複数のライブラリを含むプロジェクト全体。パッケージには設定ファイルや依存関係も含まれます。
基本文法
-
メインファイル
ライブラリのファイルを分割する上での起源となるファイルです。
library main_library; // ライブラリの宣言
// パートファイルの指定(複数可)
part 'sub.dart';
part 'children.dart';
-
partファイル
partで指定されたファイル('sub.dart'、'children.dart')ではpart ofを使用して、このファイルがどのファイルの一部かを指定します。
part of main_library; // メインファイルで定義されたライブラリの一部であることを示す
class SubClass {
void doSomething() {
print('Doing something from sub_file.dart');
}
}
このように、パートファイルはメインファイルと同じライブラリ内の一部として扱われ、メインファイルで宣言された変数や関数に直接アクセスできます。
part/part ofの注意点
- 1つのライブラリに属するファイル間でのみ使用できます。partを使うファイルは、メインファイルと密接に結びついているため、importのように別のライブラリとして独立して使うことはできません。
- ファイルが1つの名前空間を共有しているため、ファイル間で名前の衝突に気を付ける必要があります。
- 小さなユーティリティやヘルパークラスを別ファイルに分けたい場合に便利です。
まとめ
- import: 別々のライブラリやパッケージをファイル間で共有する際に使用します。importしたファイルはそれぞれ独立したライブラリであり、名前空間が異なります。
- part/part of: 1つのライブラリ(メインファイル)を複数のファイルに分割する際に使用します。partで参照されるファイルは、メインファイルと同じライブラリとして扱われ、名前空間が共有されます。