Objective-C / C дает перечисления значений по умолчанию - PullRequest
10 голосов
/ 14 мая 2010

Я где-то читал о присвоении значений по умолчанию перечислениям так:

typedef enum  {
MarketNavigationTypeNone = 0,
MarketNavigationTypeHeirachy = 1,
MarketNavigationTypeMarket = 2
} MarketNavigationLevelType;

.. но я не могу вспомнить ценность этого. Если я не даю им значения по умолчанию - а потом кто-то позже переупорядочивает перечисление - каковы риски?

Если я всегда использую имя enum и даже не обращаюсь к ним по целочисленному значению, есть ли риски?

Единственная возможная проблема, о которой я могу подумать, - это если я инициализирую перечисление из значения int из БД - и перечисление переупорядочивается - тогда приложение сломается.

Ответы [ 2 ]

8 голосов
/ 14 мая 2010

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

Если вы не инициализируете их явно, значение первого перечислителя равно нулю. Для всех остальных, если инициализатор отсутствует, их значением является значение предыдущего перечислителя, увеличенное на единицу.

Есть две причины для того, чтобы дать им явные значения:

  • вы не хотите, чтобы у них были значения, которые они имели бы в противном случае
  • Вы хотите прояснить, какое значение они имеют (для вас или других разработчиков)

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

2 голосов
/ 14 мая 2010

В общем случае это имеет значение только в том случае, если enum работает с каким-либо внешним API или будет использоваться для обмена данными через файлы данных или иным способом. Если перечисление используется только в каждом приложении и нигде больше, тогда фактические значения не имеют значения.

...