Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpImIK 57 of 113 menu
◀ ▶

Проверка типа в Dart

Оператор is проверяет тип значения во время выполнения. Для контракта выражение shape is Figure даст true, если объект создан классом, реализующим Figure:

class Figure { double area(); } class Disk implements Figure { double _radius; Disk(this._radius); double area() { return 3.14 * _radius * _radius; } }

Создадим объект и выведем его:

Figure shape = Disk(2.0); print(shape is Disk); print(shape is Figure);

Отрицание записывают как is!. После успешной проверки is в той же ветке кода тип переменной сужается, и методы контракта можно вызывать без приведения:

void describe(Object value) { if (value is Figure) { print(value.area()); } }

Проверка контракта удобна, когда в одной коллекции лежат объекты разных классов, а обрабатывать нужно только те, что подходят под общий набор команд:

class VolumeFigure { double volume(); } void printAreas(List<Object> items) { for (var item in items) { if (item is Figure) { print(item.area()); } else if (item is VolumeFigure) { print(item.volume()); } } }

Сделайте класс VolumeFigure, который будет иметь метод volume и метод surfaceArea.

Сделайте класс Cube, который будет реализовывать класс VolumeFigure.

Создайте несколько объектов классов, реализующих класс Figure, и несколько объектов класса Cube. Запишите их в список в случайном порядке.

Переберите циклом этот список и выведите на экран только площади объектов, реализующих класс Figure.

Переберите циклом тот же список и выведите для плоских фигур их площади, а для объемных - площади их поверхности.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить