Dartのimport・export・part・libraryの違い

はじめに

Dart言語で普段使用している import , export , part など、普通に使用していましたが、あまり詳しく調べたことはなかったので、まとめてみました。

import

他のライブラリを現在のファイルに取り込むために使用します。

import 'dart:math'; // 標準ライブラリ
import 'package:http/http.dart' as http; // 外部パッケージ
import 'my_library.dart'; // 自作ライブラリ

import のオプション

import 'package:http/http.dart' as http; // エイリアスを付ける
import 'my_library.dart' show MyClass; // MyClassのみインポート
import 'another_library.dart' hide UnwantedClass; // UnwantedClassを除外

また公式ドキュメントを見てみると、条件付きのimportも可能のようです。

library

Dart 2.0以降では明示的にlibraryを宣言する必要はなくなりましたが、名前空間を定義するために使用できます。

library my_library;

現在ではあまり使われません。

export

他のファイルからインポートしやすくするために、複数のライブラリをまとめてエクスポートできます。 import と同様に as , show , hide を使用できます。

// all.dart
export 'file1.dart';
export 'file2.dart';

このファイルをインポートすると、file1.dartとfile2.dartの内容も利用できます。

import 'all.dart';

主にパッケージを作った際に使用することが多い気がします。
各ファイルを個別に import する必要がなくなり、簡単に import できるのがメリットかと思います。
またパッケージ外では公開したくない場合でも使用できるかと思います。

part

1つのライブラリを複数のファイルに分割するために使います。partを使うと、1つのファイルの一部として別のファイルを組み込めます。

// main.dart
library my_library;
part 'part1.dart';
part 'part2.dart';
// part1.dart
part of my_library;

void function1() {
  print("Function 1");
}
// part2.dart
part of my_library;

void function2() {
  print("Function 2");
}

main.dartfunction1()function2() を直接呼び出せます。

part of

part ファイルがどのライブラリの一部であるかを指定します。

part of my_library;

part で取り込まれたファイルには必ず part of を指定する必要があります。

まとめ

キーワード 説明
import 他のライブラリを読み込む
library (ほぼ不要) ライブラリ名を定義
export 他のファイルへライブラリを公開
part ファイルを分割する
part of 分割されたファイルがどのライブラリに属するか定義

最後に

part , part of はfreezedなど自動生成形のライブラリでよく見ますが、あまり使ったことがなかったので勉強になりました。
part を使うとファイルを分割することができ、管理がしやすくなりそうな気がするので模索していきたい。