Когда использовать часть/часть импорта или экспорта в Дарт?

Я не совсем понимаю разницу между 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 которые импортируются и экспортируются из основных библиотек.