Зачем нужен enum из двух объектов, если есть булевский тип?

пятница, 29 мая 2009 г. ·

На своем проекте заметил странное явление, в коде встречалось несколько перечислений примерно такого вида:

enum MyEnum
{
Value1,
NotValue1
}

Я думаю идея понятна. Есть два взаимоисключающих значения. Для этих значений заводится перечисление. Возникает закономерный вопрос: "Зачем?". Кроме лишнего кода этот шедевр больше ничего не привносит в проект. Каждый раз, когда нужно проверить какое-то условие, приходится код примерно такого вида:

if (myValue == MyEnum.Value1)

И так постоянно. Налицо дублирование кода, хоть и в мелких маштабах. От того, что это дублирование мелкое, легче не становится.

Мое мнение, что данное перечисление лучше (и логичнее) было бы заменить на булевое значение. Например сделать что-то наподибие такого:

bool IsValue1

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

Кто будет пойман с поличным (при написании очередного такого перечисления) или случайно (проблем посмотреть, кто этот файл создал в системе контроля версий нет) будет выставлен на публичное осмеяние =))

2 коммент.:

Andrew Kazyrevich комментирует...
30 мая 2009 г. в 10:16  

bool хорош когда предполагается "или-или": так, ответ может быть либо правильный либо неправильный

class Answer
{
  bool Correct {get; set;}
}

но гораздо чаще проблема шире, чем простое "или-или" - хотя значений все так же может быть два: например, блоггер может жить или в Минске, или в Праге (пускай других вариантов пока нет)

class Blogger
{
  City City {get; set;}
}

enum City
{
  Prague,
  Minsk,
}

тут можно было бы использовать bool - но enum логичнее, т.к. "Minsk" это не "!Prague" с точки зрения дизайна.

--
Андрей
codevanced.net

Andrei комментирует...
1 июня 2009 г. в 00:14  

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

Обо мне

Моя фотография
Кто к нам с чем и зачем, тот от того и того!