Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

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

#c_sharp #enum


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

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

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


Ответы

Ответ 1



Да, конечно используется. Например, в проекте, над которым я сейчас работаю, ровно 125 enum'ов. Из двух вариантов bool IsBlack или enum PieceColor { White, Black } второй вариант кажется мне более предпочтительным. Например, вы не сможете при втором варианте случайно присвоить несвязанное булево значение: IsBlack = IsGameSaved скомпилируется, а Color = IsGameSaved — нет. Кроме того, если у вас функция выглядит как void MakeMove(bool isBlack) { ... } то глядя на код MakeMove(true), нужно ещё вспомнить, что же означает это самое true: белый цвет, чёрный, или вообще живого игрока в отличие от противостоящего ему искусственного интеллекта. С вызовом MakeMove(PieceColor.White) вопросов не возникает. Так что да, для удобства лучше использовать enum'ы.

Ответ 2



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

Ответ 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){ }

Комментариев нет:

Отправить комментарий