Метод enum в Dart
В теле enum можно объявлять функции, общие
для всех констант. Они вызываются у конкретной константы
через точку:
enum Direction {
north,
east,
south,
west;
Direction opposite() {
switch (this) {
case Direction.north:
return Direction.south;
case Direction.south:
return Direction.north;
case Direction.east:
return Direction.west;
case Direction.west:
return Direction.east;
}
}
}
print(Direction.north.opposite());
Если поведение у констант разное, внутри метода удобно
разобрать this через switch - так же,
как для переменной типа enum:
enum Operation {
add,
sub,
mul;
int apply(int a, int b) {
switch (this) {
case Operation.add:
return a + b;
case Operation.sub:
return a - b;
case Operation.mul:
return a * b;
}
}
}
print(Operation.mul.apply(6, 7));
Точка с запятой после последней константы отделяет список значений от объявлений методов и полей в теле enum. Без нее компилятор воспримет следующую строку как еще одну константу:
enum Priority {
low(1),
high(3);
const Priority(this.level);
final int level;
bool isUrgent() {
return level >= 3;
}
}
print(Priority.high.isUrgent());
Объявите enum FileKind с константами
text, image, archive.
Добавьте метод label():
для text верните "text file",
для image - "image file",
для archive - "archive".
Выведите результат для FileKind.image.
Объявите enum Sign с константами
plus и minus и методом
apply(int value).
Для plus прибавьте 1,
для minus вычтите 1.
Выведите результат Sign.plus.apply(10).