Что такое Enum в программировании

простыми и легкими словами с примерами в Dart/Flutter

перечисление, часто называемое для краткости «enum», — это способ определить набор именованных значений, которые представляют набор связанных констант. Перечисления делают ваш код более читабельным и удобным для сопровождения, давая осмысленные имена этим константам.

Вот простое объяснение с использованием базового примера на Python:

Допустим, вы создаете программу, которая работает с разными днями недели. Вместо того, чтобы использовать числа для представления каждого дня, вы можете использовать перечисление, чтобы дать каждому дню осмысленное имя:

enum Color {
  red,
  green,
  blue,
  yellow,
}

void main() {
  Color myFavoriteColor = Color.blue;

  if (myFavoriteColor == Color.red) {
    print("Your favorite color is red!");
  } else if (myFavoriteColor == Color.green) {
    print("Your favorite color is green!");
  } else if (myFavoriteColor == Color.blue) {
    print("Your favorite color is blue!");
  } else if (myFavoriteColor == Color.yellow) {
    print("Your favorite color is yellow!");
  } else {
    print("Invalid color choice");
  }
}

В этом примере мы сначала определяем перечисление Color с четырьмя возможными значениями: красный, зеленый, синий и желтый. Затем мы создаем переменную myFavoriteColor и присваиваем ей значение Color.blue.

Операторы if и else if используются для сравнения значения myFavoriteColor с каждым из значений перечисления. Если условие выполнено, выводится соответствующее сообщение. Если ни одно из условий не соответствует, блок else печатает Invalid color selection.

другой пример

const today = DayOfWeek.WEDNESDAY
enum DayOfWeek {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY,
}

void main() {
  DayOfWeek today = DayOfWeek.WEDNESDAY;

  if (today == DayOfWeek.WEDNESDAY) {
    print("It's Wednesday!");
  }

Пример 2. Давайте рассмотрим еще один пример, чтобы проиллюстрировать, как перечисления работают в Dart. В этом примере мы создадим перечисление для представления разных видов фруктов: яблоко, банан, апельсин и виноград.

enum Fruit {
  APPLE,
  BANANA,
  ORANGE,
  GRAPE,
}

class FruitInfo {
  final Fruit fruit;
  final String color;
  final String taste;

  FruitInfo(this.fruit, this.color, this.taste);
}

void main() {
  List<FruitInfo> fruits = [
    FruitInfo(Fruit.APPLE, "Red/Green", "Sweet and Crisp"),
    FruitInfo(Fruit.BANANA, "Yellow", "Soft and Sweet"),
    FruitInfo(Fruit.ORANGE, "Orange", "Juicy and Tangy"),
    FruitInfo(Fruit.GRAPE, "Purple/Green", "Sweet and Small"),
  ];

  Fruit selectedFruit = Fruit.APPLE;

  for (var fruitInfo in fruits) {
    if (fruitInfo.fruit == selectedFruit) {
      print("Selected fruit: ${fruitInfo.fruit}");
      print("Color: ${fruitInfo.color}");
      print("Taste: ${fruitInfo.taste}");
      break;
    }
  }
}

В этом примере Дарта:

  1. Мы определили перечисление с именем Fruit для представления различных типов фруктов.
  2. Мы создали класс FruitInfo, который содержит информацию о названии, цвете и вкусе фрукта.
  3. В функции main мы создали список объектов FruitInfo, каждый из которых содержит сведения о конкретном фрукте.
  4. Мы инициализировали переменную selectedFruit для представления фруктов, о которых хотим получить информацию.
  5. Мы перебираем список объектов FruitInfo, сравниваем их значение fruit с selectedFruit и распечатываем информацию о выбранном фрукте.

В этом примере показано, как перечисления можно использовать для категоризации и управления различными типами данных структурированным и понятным способом, что делает код более организованным и понятным.