Что такое "символические константы"и" магические константы"?
в туре по C++ Бьярне Страуструпа некоторые советы перечислены в конце каждой главы. В конце первой главы одна из них гласит:--1-->
избегайте "магических констант"; используйте символьные константы;
Что такое магические и символические константы?
3 ответов
somethingElse = something * 1440; // a magic constant
somethingElse = something * TWIPS_PER_INCH; // a symbolic one
первый является примером магической константы, она не передает никакой другой информации, кроме ее значения.
последнее гораздо полезнее, поскольку намерение ясно.
использование символьной константы также очень помогает, если у вас есть несколько вещей с одинаковым значением:
static const int TWIPS_PER_INCH = 1440;
static const int SECTORS_PER_FLOPPY = 1440; // showing my age here :-)
таким образом, если один из них изменения, вы можете легко определить, какие один 1440
в коде надо изменить. С помощью магии!--2-- > s рассеяно в коде, вы должны изменить его в нескольких местах и выясните, какие твипы и какие сектора.
A magic constant
будет числовым значением, которое вы просто вводите в некоторый код без объяснения того, почему он существует. Придумать хороший пример непросто. Но давайте попробуем так:
float areaOfCircle(float radius) {
return radius * radius * 3.14159
}
здесь я использовал "магическую константу" 3.14159 без какого-либо объяснения того, откуда она берется. Было бы лучше сказать
const float pi = 3.14159
float areaOfCircle(float radius) {
return radius * radius * pi;
}
здесь я дал человеку, читающему код, некоторое представление о том, откуда взялась константа и почему она использовалась... не похоже. чтобы "волшебным образом" появиться из ниоткуда.
магия:
int Q() { return 42; }
символично:
const int TheMeaningOfLifeAndEverything = 42;
int Q() { return TheMeaningOfLifeAndEverything; }