Именование констант, которые являются частью формулы - PullRequest
3 голосов
/ 23 сентября 2011

Для моего класса C ++ преподаватель сказал, что он даст нулевой балл любой программе, представленной с магическими числами. Он сказал, что даже для таких формул, как вычисление площади круга (где общеизвестно, что 3.14159 является значением Pi, мы должны либо использовать переменную const, либо директиву #define для представления Pi, а затем использовать ее в формуле ).

С учетом сказанного я делаю финансовый расчет, в котором я определяю сумму счета до вычета налогов. Фрагмент из функции:

mealCostBeforeTax = billAmount / (1.0 + taxRate_);

taxRate_ - это аргумент, передаваемый функции в виде десятичного процента (например, 0,08). Поэтому, чтобы определить сумму до вычета налога, я должен добавить 1 к ставке taxRate, сделав ее равной 1,08.

У меня такой вопрос, поскольку для инструктора 1.0 - магическое число. Какое имя подходит для этого значения?

Это приводит также к другому вопросу. Когда я использую формулы, есть ли ресурс или направление, на которое можно помочь, чтобы понять, как называются определенные константы в функциях или что они представляют.

Например, при преобразовании температуры в градусах Цельсия в градусы Фаренгейта формула имеет вид Tf = (9/5) * Tc + 32. Как узнать, что представляет 9/5, а также 32. Я бы предположил, что 32 - это точка замерзания воды по шкале Фаренгейта, но это всего лишь предположение. Я думаю, что 9/5 - это какое-то соотношение весов, но это предположения.

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

1 Ответ

4 голосов
/ 23 сентября 2011

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

В этом случае, я думаю, что решение будет заключаться в том, чтобы обернуть вычисление в функцию, а не пытаться придумать #define для 1. Бог поможет мне, если я когда-нибудь увижу другую программу, в которойутверждение типа #define one 1, потому что программист следует букве правила магического числа, а не намерению.

float getPreTaxCost(float totalCost, float taxRate);
{
  return totalAmount / (1.0 + taxRate);
}

Специально для распространенных формул, таких как преобразование F в C, это просто имеет смысл.Как правило, если существует очевидное имя для константы / определения, которое используется в вычислениях, обязательно используйте его вместо голого числа в коде.Однако не доводите проблему до крайности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...