|
![]() |
#1 |
Участник
|
А мне кажется, очень стрёмно делать ветвления в коде на основе текстовых строк - метками ли они задаются или нет. Фактически тут в код зашит строковый литерал, который в зависимости от языка, настроенного у пользователя, может быть подменен ядром на другой строковый литерал. Кто-то может залезть и поменять текст метки, потому что ему больше нравится другой вариант, и чего, все сломается?
Текстовые строки надо преобразовывать в Enum, если не преобразовалось - слать куда подальше, а если преобразовалось, то в коде уже принимать решения на основе значения Enum (в switch), включая обработку значений, которые не предусмотрены в коде (в default - выбрасывать ошибку). Если строк может быть очень много для Enum и они могут произвольно меняться, то можно настроечную таблицу завести и логику уже привязывать к найденной записи настроечной таблицы... Строковые литералы приемлемы, если они в макросах зашиты (скажем, названия элементов XML-схемы), а с метками их сравнивать - нафиг... ![]() PS. А еще бывают экзотические языки, на которые те или иные метки еще не перевели, и тогда сравнение будет идти с пустой строкой. В случае преобразования строки в енум мы от таких ситуаций абстрагируемся. Последний раз редактировалось gl00mie; 05.11.2014 в 20:24. Причина: PS |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#2 |
Участник
|
ну, так я о том и написал, что BP не разрешает делать такие трюки с метками!
кстати говоря, а как проверить, что мы при импорте из текстового поля получили существующее значение перечисления (enum)? как известно, первым идёт значение 0, оно же выбирается по умолчанию. как быть? вот это вот "если не преобразовалось" - это как?
__________________
Felix nihil admirari |
|
![]() |
#3 |
Участник
|
Цитата:
При создании enum не присваивать ни одному из его значений код 0. Значение по умолчанию, все равно останется ноль, т.к. enum - это int, но теперь оно не будет совпадать ни с одним из его реальных значений. Вариант 2. Перед использованием явно проинициализировать переменную enum несуществующим значением, например отрицательным. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Вариант 1.
При создании enum не присваивать ни одному из его значений код 0. Значение по умолчанию, все равно останется ноль, т.к. enum - это int, но теперь оно не будет совпадать ни с одним из его реальных значений. Вариант 2. Перед использованием явно проинициализировать переменную enum несуществующим значением, например отрицательным. Вариант 3 - добавить в enum значение с 0 под названием None |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#5 |
Участник
|
речь изначально шла об импорте значений из файла. соответственно нет нужды что-то менять на существующих enum. тем более для таких, как NoYes, например.
__________________
Felix nihil admirari |
|
![]() |
#6 |
Участник
|
Цитата:
Можно еще хранить признак корректности импорта где-то еще - в другом поле или даже в другой таблице. Но лучше не декларировать что в поле может быть только No и Yes и писать туда 3.145928 Последний раз редактировалось belugin; 07.11.2014 в 17:55. |
|
![]() |
#7 |
Участник
|
боюсь, я не понял, что ты сказал про декларацию. можешь пример привести?
__________________
Felix nihil admirari |
|