Обращение к элементам перечисления по их номерам

Перечисления играют далеко не последнюю роль в языке программирования Delphi.

В этой статье речь пойдёт об одной тонкости в работе с перечислениями, которую, к сожалению, в большинстве случаев обходят стороной. Это возможность обращения к элементам перечисления по их порядковым номерам.

Опишем перечисление:

Для начала, рассмотрим пример «классического» варианта обращения к элементам перечисления в виде простейшего кода с использованием оператора case:

Как обратиться к элементам перечисления по порядковому номеру? На самом деле очень просто. Для наглядности достаточно слегка изменить вышеприведённый пример.

Результат работы кода, который приведён и в этом и в предыдущем примере, будет одинаковым.

Использование имени типа вместо имени переменной в качестве значения константы выбора обусловлено семантикой перечислений и оператора case. Поэтому, в случае указания имени переменной в место имени типа, компилятор при построении программы выдаст ошибку.

Зачем же нужно обращаться к элементу перечисления по порядковому номеру?

Причин здесь может быть много. Начиная от банального упрощения (вместо «чрезмерно длинного» имени элемента написать «сокращённый вариант», хотя упрощение в данном случае довольно сомнительно (в комментариях меня поправили)) до решения достаточно сложных задач, в том числе по обфускации на уровне исходного кода.

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

2 комментария

  1. Странно все это. Причин здесь может быть много. Начиная от банального упрощения (вместо «чрезмерно длинного» имени элемента написать «сокращённый вариант») до решения достаточно сложных задач, в том числе по обфускации на уровне исходного кода. enum введен как раз для того, чтобы вместо непонятных цифр (т.н. «магических чисел») писать имена, которые хоть о чем-то скажут. Ну и менять безболезнено тоже. Типа был у вас енам для состояний игры

    1. К сожалению Вы, видимо, просто не до конца поняли смысл представленного кода. Но а если писали

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *