Когда использовать часть/часть импорта или экспорта в Дарт?
Я не совсем понимаю разницу между part
/part of
и import
/export
при использовании библиотек в Dart. Например:
one.dart:
library one;
part "two.dart";
Class One {
};
а также
two.dart:
part of one;
import 'somefile.dart';
Class Two {
}
против
library one;
import 'two.dart';
Class One {
}
а также
library two;
import 'somefile.dart';
export 'somefile.dart';
Class Two {
}
Оба сценария, похоже, делают то же самое. Когда выгодно использовать part
и part of
а не import
? И есть ли сценарии, в которых import
не будет работать, но part
и part of
воли?
Ответы
Ответ 1
обновление 2018/03
part
и part of
используются все чаще для сценариев генерации кода в последнее время (вместо устаревших трансформаторов) и вряд ли уйдут в ближайшее время.
built_value
этого json_serializable
такие пакеты, как built_value
, json_serializable
и многие другие.
Отклонено - это только те файлы, где все файлы пакета связаны друг с другом в одной библиотеке, имея один файл библиотеки и все остальные файлы, входящие в эту библиотеку.
оригинал
В Дарте частные члены доступны в одной библиотеке. При import
вы импортируете библиотеку и можете получать доступ только к ее публичным пользователям. С part
/part of
вы можете разделить одну библиотеку на несколько файлов, а частные члены доступны для всего кода в этих файлах.
см. пояснения к нижеприведенному абзацу выше
Использование part
/part of
не рекомендуется, и команда Дарта рассматривает возможность избавиться от нее. Я предполагаю, что они представит что-то вроде "friend" (https://github.com/dart-lang/sdk/issues/22841), где две библиотеки могут получить доступ к другим частным членам в качестве альтернативы, прежде чем они прекратят part
/part of
( возможно, в будущей версии Dart).
Ответ 2
Предположим, что у нас есть библиотека Дарта, называемая mylib
, чей файл - lib/mylib.dart
.
library mylib;
// Definitions
Эта библиотека может быть включена в файл main.dart
как
import 'package:mypackage/mylib.dart';
Когда вы создаете новую библиотеку и используете другие библиотеки, которые вы хотите автоматически сделать при использовании своего пакета, вы используете export
:
library mylib;
export 'otherlib.dart';
// Definitions
Вы можете использовать ключевое слово show
для импорта/экспорта только некоторых частей библиотеки (например, класса или чего-то еще).
Вы используете здесь part of
директивы. Вы не можете использовать как library
и part of
, которая используется для указания содержимого, которое принадлежит библиотеке. Например, вы можете разбить файл библиотеки более чем на один файл (части):
Предположим, что у нас есть файл mylib.dart
:
library mylib;
part 'src/class1.part';
// More parts
И тогда у нас есть в другом файле src/class1.part
часть, указанная в mylib.dart
part of mylib;
class Class1 {
/* ... */
}
Ответ 3
В статье Создание пакетов библиотеки на сайте dartlang.org рекомендуется избегать part
/part of
.
Примечание. Возможно, вы слышали о директиве part, которая позволяет разбить библиотеку на несколько файлов Dart. Мы рекомендуем вам не использовать часть и создавать мини-библиотеки.
"Мини-библиотеки" упоминаются как небольшие файлы dart библиотеки в src
которые импортируются и экспортируются из основных библиотек.