3

Я в основном пишу на Python и там перед объявлением переменной нет никакого var или let, однако во многих других есть. В связи с чем есть пара вопросов.

  1. Зачем нужны данные ключевые слова?

  2. Почему let чаще всего употребляется в качестве константы?(почему создатели языка не использовали слово const)

Andru
  • 1,284
  • 3
    откуда вывод что let чаще всего употребляется в качестве константы? – Grundy Jun 04 '18 at 06:49
  • 3
    в разных языках значение ключевых слов может разительно отличаться. Без уточнения конкретных языков - вопрос слишком широк – Grundy Jun 04 '18 at 06:51
  • 1
    Ну... если так уже спрашивать, то выписывайте все языки в один столбец, и наличие let - c другой стороны. let есть в бейсик, js. let нету почти везде, в питоне, с, с++, с#, pascal, delphi, asmx86, sql(общий). – nick_n_a Jun 04 '18 at 07:02
  • Поддерживаю Grundy. let чаще используется для присвоения (по крайней мере JS strict-mode, Basic). – nick_n_a Jun 04 '18 at 07:08
  • Swift, Rust. Там константы. В swift переменные объявляются через var а в Rust надо mut добавить. – Andru Jun 04 '18 at 07:10
  • Касательно JavaScript - директива let позволяет объявить локальную переменную с областью видимости, ограниченной текущим блоком кода . В отличие от ключевого слова var, которое объявляет переменную глобально или локально во всей функции, независимо от области блока. – And Jun 04 '18 at 07:15
  • 1
    Ответ на первый вопрос: подобные ключевые слова задают особенности поведения переменной и ее доступности из разных частей кода (для обнаружения ошибок в именах переменных на этапе компиляции и для исключения случайного повреждения значений переменных из за того, что забыли, что какое то имя где то уже было использовано). На второй: а почему именно let интересует, разработчики языка вольны в названии того или иного поведения. в perl например бывают my, local и our – Mike Jun 04 '18 at 11:37
  • 1
    @nick_n_a - позанудствую: let таки есть в C#. – Alexander Petrov Jun 04 '18 at 20:21

1 Answers1

3

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

синтаксический разбор очень сильно упрощается, если все операторы синтаксически устроены одинаково:

оператор операнд [,операнд]

например, Ассемблер

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

например, Basic с его ключевым словом LET

Поэтому подобные ключевые слова нужны были чтобы упростить синтаксические анализаторы языков "высокого уровня" и уложиться в жесткие ограничения того времени по памяти. После победы структурного стиля и повальной строгой типизации, объявлять переменные стали при помощи типов переменных. И вот теперь мы снова возвращаемся к автоматическим типам и операторам auto, var, val, let. Но уже с новым смыслом и новым содержанием.


Let мало где употребляется в контексте "констант". разве что в современных Джавах. Let - это скорее дань уважения Бейсику, где этот оператор означал операцию присвоения. Бейсик в свое время выполнял ту роль, которую сейчас выполняет Java - простой язык высокого уровня, не привязанный к архитектуре конретного железа. Бейсик оказал сильное влияние на ИТ. И, уж чего греха таить, поспособствовал значительному расширению числа программистов - "Каждая кухарка может кодить на Бейсике"

mazzy
  • 383