~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 41F699A582D85EC85CCE52342F2A53EF__1716680160 ✰
Заголовок документа оригинал.:
✰ Syntactic sugar - Wikipedia ✰
Заголовок документа перевод.:
✰ Синтаксический сахар — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Syntactic_sugar ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/41/ef/41f699a582d85ec85cce52342f2a53ef.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/41/ef/41f699a582d85ec85cce52342f2a53ef__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 05:56:32 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 26 May 2024, at 02:36 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Синтаксический сахар — Википедия Jump to content

Синтаксический сахар

Из Википедии, бесплатной энциклопедии

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

Например, многие языки программирования предоставляют специальный синтаксис для обращения к элементам массива и их обновления . Абстрактно ссылка на массив — это процедура с двумя аргументами: массивом и вектором индекса, которую можно выразить как get_array(Array, vector(i,j)). Вместо этого многие языки предоставляют синтаксис, такой как Array[i,j]. Аналогично, обновление элемента массива — это процедура, состоящая из трех аргументов, например set_array(Array, vector(i,j), value), но многие языки также предоставляют синтаксис, например Array[i,j] = value.

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

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

Происхождение [ править ]

Термин «синтаксический сахар» был придуман Питером Дж. Ландином в 1964 году для описания поверхностного синтаксиса простого АЛГОЛ -подобного языка программирования, который был семантически определен в терминах аппликативных выражений лямбда-исчисления . [1] [2] сосредоточен на лексической замене λ на «где».

Более поздние языки программирования, такие как CLU , ML и Scheme , расширили этот термин для обозначения синтаксиса внутри языка, который можно было определить с точки зрения языкового ядра основных конструкций; удобные функции более высокого уровня можно «очистить» и разложить на это подмножество. [3] По сути, это обычная математическая практика построения из примитивов.

Основываясь на различении Лэндина между основными языковыми конструкциями и синтаксическим сахаром, в 1991 году Матиас Феллизен предложил кодификацию «выразительной силы», чтобы она соответствовала «широко распространенным убеждениям» в литературе. Он определил слово «более выразительный» как означающее, что без рассматриваемых языковых конструкций программу придется полностью реорганизовать. [4]

Известные примеры [ править ]

  • В COBOL многие промежуточные ключевые слова представляют собой синтаксический сахар, который при желании можно опустить. Например, предложение MOVE A B. и предложение MOVE A TO B. выполняют точно такую ​​же функцию, но второй делает выполняемое действие более понятным.
  • Расширенные операторы присваивания или составные операторы присваивания: например, a += b эквивалентно a = a + b в C и подобных языках, предполагая a не имеет побочных эффектов, например, если a является обычной переменной. [5] [6] Некоторые языки, например Python [7] может допускать перегрузку расширенных операторов присваивания, поэтому они могут вести себя иначе, чем стандартные.
  • В Перле , unless (condition) {...} это синтаксический сахар для if (not condition) {...}. Кроме того, за любым оператором может следовать условие, поэтому statement if condition эквивалентно if (condition) {statement}, но первый вариант более естественно форматируется в одну строку.
  • В языке Си , a[i] нотация — это синтаксический сахар для *(a + i). [8] Аналогично, a->x нотация — это синтаксический сахар для доступа к членам с помощью оператора разыменования. (*a).x.
  • The usingОператор в C# гарантирует правильное удаление определенных объектов. Компилятор расширяет оператор до блока try-finally . [9]
  • Язык C# позволяет объявлять переменные как var x = expr, что позволяет компилятору определить тип x из выражения expr, вместо того, чтобы требовать явного объявления типа. Аналогично, C++ позволяет auto x = expr поскольку C++11 и Java позволяют var x = expr начиная с Java 11.
  • Python Понимание списков (например, [x*x for x in range(10)] для списка квадратов) и декораторы (например, @staticmethod).
  • В Haskell строка, заключенная в кавычки, семантически эквивалентна списку символов. Необязательное расширение языка OverloadedStrings позволяет строковым литералам создавать и другие типы значений, например текстовые.
  • В tidyverse коллекции R пакетов канал , обозначаемый %>%, объявляет, что данные (или выходные данные функции), предшествующие каналу, будут служить первым аргументом для функции, следующей за каналом. [10] Так, x %>% f(y) эквивалентно f(x,y).
  • В SQL это просто JOIN эквивалентно INNER JOIN, причем последнее поясняет, что оператор соединения является, в частности, операцией внутреннего соединения, а не операцией внешнего соединения. Аналогичным образом можно опустить OUTER из LEFT OUTER JOIN, RIGHT OUTER JOIN и FULL OUTER JOIN.
  • Вызов метода в языках ООП в виде myObject.myMethod(parameter1, parameter2, parameter3) это синтаксический сахар для вызова глобальной функции как myMethod(myObject, parameter1, parameter2, parameter3). Ссылка на объект передается как скрытый аргумент, обычно доступный из метода как this.
  • Параметр, вызываемый по ссылке, представляет собой синтаксический сахар для технической передачи указателя в качестве параметра, но синтаксической обработки его как самой переменной, чтобы избежать постоянного разыменования указателя в коде внутри функции.
  • На Java importОбъявление позволяет компилятору находить классы, которые не указаны иным образом, с полными именами. Например import javax.swing.*; позволяет программисту ссылаться на объект Swing , например javax.swing.JButton используя более короткое имя JButton.
  • В для ES6 версии JavaScript стрелочные функции имеют короткую форму. (x) => x + 1, что эквивалентно более длинной форме (x) => { return x + 1; }.
  • В Scala тройные знаки вопроса (  ??? ) эквивалентно throw new NotImplementedError . Это полезно, чтобы отметить место для еще не написанного кода. [11]

Критика [ править ]

Некоторые программисты считают, что эти функции удобства использования синтаксиса либо неважны, либо совершенно несерьезны. Примечательно, что специальные синтаксические формы делают язык менее единообразным, а его спецификацию более сложной и могут вызывать проблемы по мере того, как программы становятся большими и сложными. Эта точка зрения особенно широко распространена в сообществе Lisp , поскольку Lisp имеет очень простой и регулярный синтаксис, а поверхностный синтаксис можно легко изменить. [12] Например, Алан Перлис однажды пошутил в « Эпиграммах по программированию », ссылаясь на языки, разделенные скобками , что «Синтаксический сахар вызывает рак точек с запятой ». [13]

Производные термины [ править ]

Синтаксическая соль [ править ]

Метафора была расширена за счет введения термина « синтаксическая соль» , который указывает на функцию, предназначенную для того, чтобы усложнить написание плохого кода. [14] В частности, синтаксическая соль — это обруч, через который программисты должны перепрыгнуть, чтобы доказать, что они знают, что происходит, а не для того, чтобы выразить действие программы.

В C# при сокрытии унаследованного члена класса выдается предупреждение компилятора, если только new Ключевое слово используется для указания того, что сокрытие является намеренным. [15] Чтобы избежать потенциальных ошибок из-за сходства синтаксиса оператора переключения с синтаксисом C или C++, C# требует break за каждый непустой case этикетка switch (пока не goto, return, или throw используется), даже несмотря на то, что он не допускает неявного провала . [16] (С использованием goto и указание последующей метки приводит к провалу , подобному C/C++ .)

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

Альтернативой синтаксической соли является генерация предупреждений компилятора, когда существует высокая вероятность того, что код является результатом ошибки – практика, распространенная в современных компиляторах C/C++.

Синтаксический сахарин [ править ]

Другими расширениями являются синтаксический сахарин и синтаксический сироп , что означает необоснованный синтаксис, который не упрощает программирование. [17] [18] [19] [20]

Типы сахаристых [ править ]

Типы данных с базовой синтаксической поддержкой называются «сахарными типами». [21] [22] [23] Общие примеры включают строки, разделенные кавычками, фигурные скобки для типов объектов и записей, а также квадратные скобки для массивов.

Примечания [ править ]

  1. ^ Ландин, Питер Дж. (1964). «Механическая оценка выражений» (PDF) . Компьютерный журнал . 6 (4). Компьютерный журнал : 308–320. дои : 10.1093/comjnl/6.4.308 . Проверено 21 июля 2014 г.
  2. ^ Abelson & Sussman 1996 , Глава 1, сноска 11 .
  3. ^ Барбара Лисков, «История CLU», Технический отчет Лаборатории компьютерных наук Массачусетского технологического института 561 (1993)
  4. ^ Феллейзен, Матиас (декабрь 1991 г.). «О выразительной силе языков программирования» . Наука компьютерного программирования . 17 (1–3). Спрингер-Верлаг: 35–75. дои : 10.1016/0167-6423(91)90036-W . Проверено 19 июля 2014 г.
  5. ^ «Задание соединения С» . msdn.microsoft.com . Майкрософт . Проверено 20 июня 2016 г. Однако выражение составного присваивания не эквивалентно расширенной версии, поскольку выражение составного присваивания оценивает выражение1 только один раз, а расширенная версия оценивает выражение1 дважды: в операции сложения и в операции присваивания.
  6. ^ Гаравалья, Эмилио (26 июля 2015 г.). «Почему такие сочетания клавиш, как x += y, считаются хорошей практикой?» . stackexchange.com . Проверено 20 июня 2016 г. оптимизацию можно [выполнить], если «поиск x» не имеет побочных эффектов
  7. ^ «Модель данных Python» . docs.python.org . 21 декабря 2020 г.
  8. ^ Раймонд, Эрик С. (11 октября 1996 г.). Новый словарь хакера – 3-е издание . МТИ Пресс. п. 432. ИСБН  978-0-262-68092-9 . Проверено 5 августа 2012 г.
  9. ^ «Использование оператора (Справочник по C#)» . Проверено 16 сентября 2014 г.
  10. ^ "Магриттр: Виньетка" . Проверено 24 декабря 2018 г.
  11. ^ «Переполнение стека: что означает тройной вопросительный знак в Scala?» . Проверено 23 января 2024 г.
  12. ^ Abelson & Sussman 1996 , Глава 1, сноска 11 .
  13. ^ Перлис 1982 , Эпиграмма №3.
  14. ^ «Жаргонный файл — синтаксическая соль» . 12 июня 2003 г. Архивировано из оригинала 12 июня 2003 г. Проверено 19 марта 2018 г.
  15. ^ «новый модификатор (ссылка на C#)» . microsoft.com . Майкрософт . Проверено 3 августа 2015 г.
  16. ^ "переключатель (Справочник по C#)" . microsoft.com . Майкрософт . Проверено 3 августа 2015 г.
  17. ^ «синтаксический сахар» . catb.org . Проверено 3 августа 2015 г.
  18. ^ Бойтен, Эрке А.; Мёллер, Бернхард (26 июня 2002 г.). Математика построения программ . Спрингер. ISBN  9783540438571 . Проверено 3 августа 2015 г.
  19. ^ Дин, Томас (2004). Разговор с компьютерами: исследования в области науки и компьютерных технологий . Издательство Кембриджского университета. п. 115 . ISBN  9780521542043 .
  20. ^ Харрисон, Уильям; Шеард, Тим (8–10 июля 2002 г.). «Математика построения программ» (PDF) . Математика построения программ: 6-я Международная конференция, MPC 2002, Замок Дагштуль, Германия, 8–10 июля 2002 г. Труды . Международная конференция по математике построения программ. Конспекты лекций по информатике. Том. 2386. Замок Дагштуль, Германия: Springer Berlin Heidelberg. п. 93. дои : 10.1007/3-540-45442-X_6 . ISBN  978-3-540-43857-1 . S2CID   10059915 . Архивировано из оригинала (PDF) 31 марта 2017 г.
  21. ^ Чу, Рави (2013). Вложенные типы уточнений для JavaScript (доктор философии). Калифорнийский университет в Сан-Диего.
  22. ^ «Документация LLVM по языку C» . clang.llvm.org . Проверено 30 июня 2020 г.
  23. ^ «Тайная жизнь типов в Swift» . medium.com/@slavapestov . 14 июля 2016 года . Проверено 30 июня 2020 г.

Ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 41F699A582D85EC85CCE52342F2A53EF__1716680160
URL1:https://en.wikipedia.org/wiki/Syntactic_sugar
Заголовок, (Title) документа по адресу, URL1:
Syntactic sugar - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)