Почему нельзя объявить константу без указания значения
Перейти к содержимому

Почему нельзя объявить константу без указания значения

  • автор:

Типы данных — Основы JavaScript

Что произойдет, если мы попробуем умножить число на строку? JavaScript вернет NaN (не число) — то самое значение. Оно возникает там, где вместе используются несовместимые значения. В данном случае число и строка:

Внутри высокоуровневых языков программирования данные разделяются по типам. Любая строка относится к типу String, а числа — к типу Number и BigInt (очень большие числа). Зачем нужны типы? Для защиты программы от трудноуловимых ошибок. Типы определяют две вещи:

  • Возможные (допустимые) значения. Например, числа в JavaScript делятся на два типа: Number и BigInt. Первые — это все числа ниже определенного порога (его можно посмотреть), вторые — выше. Такое разделение связано с техническими особенностями работы аппаратуры.
  • Набор операций, которые можно выполнять над этим типом. Например, операция умножения имеет смысл для типа «целые числа». Но не имеет смысла для типа «строки»: умножать слово «мама» на слово «блокнот» — бессмыслица.

JavaScript ведет себя двояко, когда встречается с нарушениями. В некоторых ситуациях он ругается на недопустимость операции и завершается с ошибкой. В других — программа продолжает работать. В этом случае недопустимая операция возвращает что-то похожее на NaN , как в примере выше.

Каким образом JavaScript понимает, что за тип данных перед ним? Достаточно просто. Любое значение где-то инициализируется и, в зависимости от способа инициализации, становится понятно, что перед нами. Например, числа — это просто числа без дополнительных символов, кроме точки для рациональных чисел. А вот строки всегда ограничены специальными символами (в JavaScript три разных варианта). Например, такое значение '234' – строка, несмотря на то, что внутри нее записаны цифры.

JavaScript позволяет узнать тип данных с помощью оператора typeof :

Типы данных Number, BigInt и String — это примитивные типы. Но есть и другие. В JavaScript встроен составной тип Object (а на его базе массивы, даты и другие). С его помощью можно объединять данные разных типов в одно значение, например, мы можем создать пользователя, добавив к нему имя и возраст:

По-английски строки в программировании называются "strings", а строчки текстовых файлов — "lines". Например, в коде выше есть две строчки (lines), но только одна строка (string). В русском иногда может быть путаница, поэтому во всех уроках мы будем говорить строка для обозначения типа данных «строка», и строчка для обозначения строчек (lines) в файлах.

undefined

Объявление переменных возможно и без указания конкретного значения. Что будет выведено на экран, если ее распечатать:

На экране появится undefined , специальное значение особого типа, которое означает отсутствие значения. Undefined активно используется самим JavaScript в самых разных ситуациях, например, при обращении к несуществующему символу строки:

Смысл (семантика) значения undefined именно в том, что значения нет. Однако, ничто не мешает написать такой код:

И хотя интерпретатор позволяет такое сделать, это нарушение семантики значения undefined , ведь в этом коде выполняется присваивание, а значит — подставляется значение.

JavaScript — один из немногих языков, в которых в явном виде присутствует понятие undefined . В остальных языках его функцию выполняет значение null , которое, кстати, тоже есть в JavaScript.

Вопрос на самопроверку. Почему нельзя объявить константу без указания значения?

Числа с плавающей точкой

В математике существуют разные виды чисел, например, натуральные – это целые числа от одного и больше, или рациональные – это числа с точкой, например 0.5. С точки зрения устройства компьютеров, между этими видами чисел – пропасть. Попробуйте ответить на простой вопрос, сколько будет 0.2 + 0.1? А теперь посмотрим, что на это скажет JavaScript:

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

Рациональные числа не выстроены в непрерывную цепочку, между 0.1 и 0.2 бесконечное множество чисел. Соответственно возникает серьезная проблема, а как хранить рациональные числа? Это интересный вопрос сам по себе. В интернете множество статей, посвященных организации памяти в таких случаях. Более того, существует стандарт, в котором описано, как это делать правильно, и подавляющее число языков на него опирается.

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

Явное преобразование типов

В программировании регулярно встречаются задачи, когда один тип данных нужно преобразовать в другой — например, при работе с формами на сайтах. Данные формы всегда приходят в текстовом виде, даже если значение — число. Вот как его можно преобразовать:

parseInt() — это функция, в которую передается значение, чтобы его преобразовать. Функция ведет себя подобно арифметическим операциям, но делает особые действия. Вот еще несколько примеров:

Точно так же можно преобразовать строку в число с плавающей точкой с помощью parseFloat() :

JavaScript: undefined

Объявление переменных возможно и без указания конкретного значения. Что будет выведено на экран если её распечатать?

На экране появится undefined , специальное значение особого типа, которое означает отсутствие значения. Undefined активно используется самим JavaScript в самых разных ситуациях, например, при обращении к несуществующему символу строки:

Смысл (семантика) значения undefined именно в том, что значения нет. Однако, ничто не мешает написать такой код:

И хотя интерпретатор позволяет такое сделать, это нарушение семантики значения undefined , ведь в этом коде выполняется присваивание, а значит — подставляется значение.

JavaScript — один из немногих языков, в которых в явном виде присутствует понятие undefined . В остальных языках его роль выполняет значение null , которое, кстати, тоже есть в JavaScript.

Вопрос на самопроверку. Почему нельзя объявить константу без указания значения?

Ответ Константу невозможно изменить или переопределить. Ее значение необходимо указывать строго при определении.

Задание

Выведите на экран значение undefined , не указывая его явно (через присваивание или передав напрямую в console.log() ). Если не догадаетесь, как это сделать, подсмотрите решение учителя.

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

Определения

undefined — аналог отсутствия значения; указывает, что переменной не присвоено значение или она вообще не объявлена.

Java: объявление константы без значения

Всем привет, столкнулся с проблемой, что нельзя объявить кностанту без значения.

Компилятор ругается и требует дать константе значение. Но я это сделать не могу, т.к. значение нужно задать позже, которые мне нужно, и которые уже менять будет нельзя.

В такой декларации разрешается инициализация final или сразу или в конструкторе:

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

На то она и константа, что ее значение нельзя менять. Но можно создать под это дело свой класс, у которого будут методы set\get. метод set проверяет специальный флаг «установки значения» и не допускает повторной инициализации.

Набросок кода. (возможно есть опечатки)

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.7.43618

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Можно ли объявить константу класса?

bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in … Замечание: Начиная с PHP 7.1.0 для констант класса можно использовать модификаторы .

Можно ли переопределить константу?

Константы класса могут быть переопределены дочерним классом. Начиная с PHP 8.1.0, константы класса не могут быть переопределены дочерним классом, если он определён как окончательный (final). Интерфейсы также могут содержать константы .

Как определить константу C++?

x = 5; Но кроме переменных в языке программирования C++ можно определять константы. Их значение устанавливается один раз и впоследствии мы его не можем изменить. Константа определяется практически также, как и переменная за тем исключением, что в начале определения константы идет ключевое слово const.

Почему нельзя объявить константу без указания значения?

По тому что будет синтаксическая ошибка. А если представить с другой стороны, допустим можно.

Можно ли изменить значение константы?

Значение констант не может быть изменено новым присваиванием, а также не может быть переопределено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *