Поговорим сегодня про assert в Dart. Разберемся, что же это такое, как работает и почему он точно будет вам полезен.
Assert — это оператор в языке Dart для проверки утверждений в процессе отладки вашего кода. Он помогает разработчику проверить, что определенные условия выполняются корректно. В случае, если это не так, программа выдает ошибку
AssertionError. Синтаксис очень прост — в оператор требуется передать условие для проверки, а также сообщение, которое поможет разобраться в том, почему же была получена ошибка. При этом сообщение не является обязательным, но линтер все же рекомендует его добавлять.
assert(<условие>, '<сообщение об ошибке>');
Применять assert можно как в методах, так и в конструкторах для проверки входных параметров.
Для примера реализуем простую программу для вывода количества товаров. Конечно, количество не может быть представлено отрицательным числом. Поэтому здесь стоит добавить проверку, чтобы избежать логических ошибок.
void setProductsAmount(int amount) {
assert(amount >= 0, 'Количество товаров не может быть отрицательным!');
print('Количество товаров установлено: $amount');
}
void main() {
setProductsAmount(25); // Код выполняется без ошибок
setProductsAmount(-5); // Ошибка в debug режиме: Количество товаров не может быть отрицательным!
}
Возьмем еще один более сложный пример. Нам нужно создать класс данных карточки. Карточки могут быть двух типов — простая и с изображением. При этом карточка с изображением обязательно должна получить ссылку на него. Чтобы ограничить создание карточки с картинкой без ссылки на изображение, достаточно в конструктор добавить соответствующий assert.
enum CardType { simple, withImage }
class Card {
const Card({
required this.type,
required this.title,
required this.subtitle,
this.imageUrl,
}) : assert(
type != CardType.withImage || imageUrl != null,
'Для карточки типа withImage необходимо указать imageUrl!',
);
final CardType type;
final String title;
final String subtitle;
final String? imageUrl;
}
void main() {
try {
final card = Card(
type: CardType.withImage,
title: 'Карточка с картинкой',
subtitle: 'Это карточка с картинкой',
);
print('Карточка с картинкой успешно создана!');
} catch (error) {
print(error);
}
// Этот код выведет в консоль сообщение об ошибке - Для карточки типа withImage необходимо указать imageUrl!
}
Здесь важно учесть, что assert работают только в debug режиме, поэтому валидировать с помощью них действия пользователя или внешние данные нельзя. Их можно и нужно применять в тех случаях, в которых сам разработчик может допустить ошибку на этапе выполнения задачи.
Еще больше полезного можно найти здесь:
◾️ Assert Statements in Dart
◾️ Error handling, Asserts
❤️ — если было полезно
