Habreth
Профи
(999)
5 лет назад
Переменная, как вы можете догадаться из названия, изменяется со временем. Если он не меняется, "нет потерь". Когда вы сообщаете компилятору, что значение не изменится, компилятор может выполнить целую кучу оптимизаций, например, непосредственно вложить значение и никогда не выделять пространство для константы в стеке.
Однако вы не всегда можете рассчитывать на то, что ваш компилятор достаточно умный, чтобы иметь возможность правильно определить, изменится ли значение после его установки. В любой ситуации, когда компилятор не может определить это со 100-процентной уверенностью, компилятор будет ошибаться со стороны безопасности и предположить, что он может измениться. Это может привести к различным последствиям производительности, например, избегать встраивания, не оптимизировать определенные циклы, создавая объектный код, который не является parallelism -другим.
Из-за этого, и поскольку читаемость также важна, вы должны стремиться использовать явную константу, когда это возможно, и оставлять переменные для вещей, которые могут реально измениться.
Как использовать константы вместо буквенных чисел:
1) Это делает код более читаемым. Всем известно, что 3.14 (надеюсь), не все знают, что 3.07 - ставка подоходного налога в ПА. Это пример знаний о доменах, и не все, кто будет поддерживать ваш код в будущем (например, налоговое программное обеспечение), узнают об этом.
2) Это экономит работу при внесении изменений. Переход и изменение каждые 3.07 до 3.18, если изменение ставки налога в будущем будет раздражать. Вы всегда хотите свести к минимуму изменения и в идеале сделать одно изменение. Чем больше одновременных изменений вы должны сделать, тем выше риск того, что вы что-то забудете, что приведет к ошибкам.
3) Вы избегаете рискованных ошибок. Представьте, что существовали два государства с ставкой налога на прибыль в размере 3,05, а затем одна из них изменилась до 3,18, а другая - на 3,07. Просто перейдя и заменив, вы можете столкнуться с серьезными ошибками. Конечно, многие значения целых или строковых констант более распространены, чем "3.07". Например, число 7 может представлять количество дней в неделю и что-то еще. В больших программах очень сложно определить, что означает каждое литеральное значение.
4). В случае текстового текста обычно используется символическое имя для строк, чтобы позволить пулам строк быстро меняться в случае поддержки нескольких языков.
Обратите внимание, что помимо переменных и "постоянных переменных" существуют также некоторые языки с перечислениями. Перечисление фактически позволяет вам определить тип для небольшой группы констант (например, возвращаемых значений), поэтому их использование обеспечит безопасность типов.
Например, если у меня есть перечисление на дни недели и на месяцы, я буду предупрежден, если я назначу месяц в день. Если я просто использую целочисленные константы, не будет предупреждения, когда 3-й день назначается на месяц 3. Вы всегда нуждаетесь в безопасности типа, и это улучшает читаемость. Перечисления также лучше определяют порядок. Представьте, что у вас есть константы в дни недели, и теперь вы хотите, чтобы ваша неделя началась в понедельник, а не в воскресенье.
29
Михаил ГуровУченик (114)
2 года назад
Отличный ответ (тот кто задал вопрос долбан, выбрал какое то го*н
о в роли ответа...)
ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО*
Высший разум
(362541)
5 лет назад
Переменная - это ячейка для данных, которые могут измениться.
Константа - это ячейка для данных, которые НЕ могут измениться.
Например, радиус окружности - это переменная. А число pi - константа, ни при каких обстоятельствах число ПИ не может меняться..
И если вдруг скажем значение константы где-то пытается измениться (по тексту программы вы пытаетесь константе что-то присвоить), то срабатывает exception и вы понимаете, что у вас где-то в коде косяк.
Вспоминается анекдот в тему: один студент написал реферат и в самом начале написал, что т. к. никто мой реферат читать не будет, принимаю значение ПИ равным четырем. И дальше все расчеты были исходя из этого. Но к несчастью, его реферат прочитали....
Aleks Nots
Просветленный
(26378)
5 лет назад
Вопрос задан как-то так, что "два в одном"
1 - Зачем числам давать имена, если можно просто писать числа?
2 - Зачем константы?
1
Допустим у Вас в программе используются два параметра
Пенсионный возраст = 60
курс доллара к рублю = 60
Если Вы для каждого числа используете свое имя:
float Pens_Vozr = 60
float Rubl_za_Dollar = 60
То в дальнейшем, когда пенсионный возраст станет 70 лет, а курс 120 рублей за доллар, Вы измените эти числа только в одном месте, и они изменятся во всех местах где они применяются.
А если писать просто числа, то разобраться где 60 надо менять на 70, а где на 120 и поменять во всей программе, весьма непросто и велика вероятность ошибиться.
2
Если в языке есть возможность обявлять переменную константой, то это позволяет обнаруживать попытки изменить ее значение и помечать эти случаи как ошибки в программе при ее компиляции.