Ранее я рассказывал о пользовательских типах данных. Сегодня приведу более конкретный пример и расскажу о перечисляемых типах данных (также их называют “перечислимыми” или даже просто “перечислениями”). Речь пойдёт о Паскале, но всё это будет справедливо и для производных от Паскаля языков: Delphi, Free Pascal, Pascal Script, Lazarus и т.п. (хотя, кончено, я не могу быть уверен, что знаком со всеми реализациями Паскаля, может где-то это работает и по другому).
Итак, синтаксис создания перечисления:
var ИмяПеременной = (Значение1, Значение2, …, ЗначениеN);
Пример:
Здесь мы создаём перечисление “Времена года”. Затем создаём переменную данного типа, и можем с ней работать. Обратите внимание, что имена значений, которые мы задали в перечислении, уже нельзя будет использовать как идентификаторы. То есть вы не сможете создать, например, переменную Spring - компилятор выдаст ошибку.
Перечисление - это порядковый тип. То есть его значения по сути являются числами (первое значение перечисления равно 0). Однако работать с этим значениями как с числами нельзя. Точнее, можно, но потребуется явное преобразование чисел в тип TSeasons и наоборот (в примере это показано).
Однако при таком подходе можно легко выйти за диапазон значений перечисления. В этом случае компилятор выдаст предупреждение, но программа будет создана. А вот во время выполнения программы произойдёт ошибка. Так что всегда обращайте внимание на предупреждения - в большинстве случаев они имеют смысл.
Зачем вообще нужны перечисления, если можно обойтись числами? Ну, разумеется, как и всё в языках программирования высокого уровня - для удобства. Иначе можно было бы обойтись и ассемблером.
Нередко в программировании требуется работать с каким-то ограниченным количеством значений. Это может быть что угодно - он набора названий месяцев до набора свойств какого-либо объекта (здесь имеется ввиду не “программистский” объект). И в этом случае, конечно, удобнее работать с осмысленными названиями этих свойств, чем просто с числами.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.