Применение enum на реальных проектах

175
13 июня 2017, 23:38

Применяют ли на реальных проектах перечисления enum? Если да, то в каких use-case? Я читал, что с данными типами в будущем могут появиться проблемы, связанные с управлением версиями (тут источник)

У меня есть класс ChessFigure, у которого есть свойство Colour. Хочу сделать перечисление "Black" и "White", но не уверен, что это нужно (альтернатива: свойство сделать типа bool и переименовать его в IsWhite).

UPD. Цель, которую я преследую - создать удобно поддерживаемую библиотеку классов.

Answer 1

Да, конечно используется. Например, в проекте, над которым я сейчас работаю, ровно 125 enum'ов.

Из двух вариантов bool IsBlack или enum PieceColor { White, Black } второй вариант кажется мне более предпочтительным.

Например, вы не сможете при втором варианте случайно присвоить несвязанное булево значение: IsBlack = IsGameSaved скомпилируется, а Color = IsGameSaved — нет.

Кроме того, если у вас функция выглядит как

void MakeMove(bool isBlack) { ... }

то глядя на код MakeMove(true), нужно ещё вспомнить, что же означает это самое true: белый цвет, чёрный, или вообще живого игрока в отличие от противостоящего ему искусственного интеллекта. С вызовом MakeMove(PieceColor.White) вопросов не возникает.

Так что да, для удобства лучше использовать enum'ы.

Answer 2

Например у Вас есть сущность товара в магазине. У него допустим есть ряд состояний :

В наличии.
Снят с продажи.
Возможна доставка.

В базе Вы определенно будете это хранить в виде tinyint ( 0,1,2). А на коде, отражать через enum, что очень сильно облегчает читаемость кода, вам не надо будет помнить что такое 1, а что такое 2.

Answer 3

Если ты роботаеш с Api и у тебя есть набор допустимых значений, удобно использовать enum. e.g.

Returns candlestick chart data. Required GET parameters are "currencyPair", "period" (candlestick period in seconds; valid values are 300, 900, 1800, 7200, 14400, and 86400).

internal enum Period
    {
        S300 = 300,
        S900 = 900, 
        ...
    }

Удобние делать enum, что бы не делать лишних проверок

returnChartData(some arg, ..., Period perior){
}
READ ALSO
Ограничить выбор чекбоксов

Ограничить выбор чекбоксов

ЗдравствуйтеИмеется множества чекбоксов

250
Вызов функции по кнопке [требует правки]

Вызов функции по кнопке [требует правки]

Как вызвать функцию по нажатию кнопки?

301
Зациклить вывод индекса в массиве JavaScript

Зациклить вывод индекса в массиве JavaScript

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

306
Рассылка на сайте. Как защитится от скриптов, которые будут беспрерывно добавлять адреса

Рассылка на сайте. Как защитится от скриптов, которые будут беспрерывно добавлять адреса

Обычная почтовая рассылкаПользователь вводит свое имя и почту на сайте и ему приходят уведомления о новых новостях

233