Сегодня поговорим про механизмы ограничения доступа объектов в Dart. Простыми словами — какие есть варианты подсветить, что объект не должен использоваться извне.
1️⃣ Начнем с банального — использования «
_»
final String _privateData;
void _doExample() {}
Символ «_» в начале названия говорит о том, что объект может использоваться только в рамках текущей библиотеки.
Кроме того, что он самый известный, он — фактически единственный действительно ограничивающий. Проект не сможет быть скомпилирован, пока приватный объект будет использоваться вне допустимого участка кода.
2️⃣
@protectedАннотация
@protected говорит о том, что объект доступен только внутри класса и в классах наследниках. Здесь очень важно понимать, что аннотация никак не ограничивает компиляцию и работу программы. Единственное, что вы получите при неправильном использовании защищенного объекта — замечание анализатора
invalid_use_of_protected_member
// файл parent.dart
class Parent {
@protected
void doProtected() {}
}
...
// файл child.dart
class Child extends Parent {
void doExample() {
doProtected(); // допустимо
}
}
void main() {
final parent = Parent();
parent.doProtected(); // вызывает предупреждение анализатора
}
3️⃣
@visibleForTesting
Еще одна ограничивающая аннотация. Она как бы говорит — «да, я публичный, но только для того, чтобы быть доступным в тестах». Будет точно полезно для тех, кто покрывает проект тестами
// файл lib/parent.dart
class Parent {
@visibleForTesting
void doExample() {}
}
...
// файл lib/main.dart
void main() {
final parent = Parent();
parent.doExample(); // вызывает предупреждение анализатора invalid_use_of_visible_for_testing_member
}
...
// файл test/parent_test.dart
void main() {
test('Тестируем @visibleForTesting', () {
final test = Parent();
test.doExample(); // допустимо
});
}
Важно понимать — хотя реальное ограничение всего одно, аннотации тоже не стоит списывать со счетов. Они подсвечивают намерение разработчика, обозначают границы ответственности и помогают поддерживать архитектурную дисциплину.
❤️ — если было полезно
