Злоупотребление значением переменной? - PullRequest
2 голосов
/ 22 февраля 2011

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

Первоначально я думал, что мне не нравится многоцелевое использование значения переменной: a.) в качестве диапазона для использования в формуле;б.) как форма логики управления.

Как называется неправильное использование переменной?Meta-''something 'или есть классический антипаттерн, который подходит?

В некотором смысле, когда поле базы данных установлено в значение null, чтобы представлять не использующее значение, и если оно не равно нулю, тогда используйте значение в этомfield.

Update: Примером может быть то, что если значение переменной> 0, я буду использовать значение, если оно <= 0, тогда я не буду использовать это значение и решу выполнить некоторыедругая логика. </p>

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Значения, подобные этим, часто называют «отличительными значениями».На сегодняшний день наиболее распространенным отличительным значением является null для ссылочных типов.Второй момент - использование выделенных значений для указания необычных условий (например, кодов ошибок или ошибок поиска).

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

Распространенными альтернативами использованию выделенных значений являются исключения илиотчетливо типизированные значения, которые нельзя случайно спутать друг с другом (например, типы Maybe или Option).

Несмотря на все это, выделенные значения могут по-прежнему играть важную роль в средах с чрезвычайно ограниченной доступностью памяти илидругие строгие ограничения производительности.

0 голосов
/ 10 марта 2011

Использование разных диапазонов возможных значений переменной для вызова разных функций было очень распространено, когда ОЗУ и дисковое пространство для данных и программного кода было мало. В настоящее время вы должны использовать функцию или дополнительное сопровождающее значение (логическое значение или перечисление) для определения действия, которое нужно предпринять.

Текущие ОС предлагают 1 ГБ ОЗУ для правильной работы, когда 256 КБ было очень много лет назад. Дешевое дисковое пространство выросло с сотен МиБ до кратных ТиБ за считанные месяцы. Не так давно я писал программы для 640 КБ ОЗУ и 10 МБ диска, и вы, вероятно, их ненавидите.

Я думаю, что было бы хорошо справиться с таким кодом, если ему всего несколько лет (рефакторинг!), И осудить его как плохую практику, если он недавно.

0 голосов
/ 22 февраля 2011

Я не думаю, что вы описываете чистое магическое число , но оно вроде как близко. Это похоже на ситуацию в до .NET 2.0, где вы использовали бы Int32.MinValue, чтобы указать нулевое значение. .NET 2.0 представила Nullable и как бы облегчает эту проблему.

Итак, вы описываете использование переменной, значение которой на самом деле означает нечто иное, чем ее значение - -1 означает практически то же самое, что и использование Int32.MinValue, как я описал выше.

Я бы назвал это магическим числом.

Надеюсь, это поможет.

...