Синтаксический сахар: определение, происхождение и примеры

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

Синтаксический сахар: что это такое?

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

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

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

Происхождение

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

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

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

Известные примеры синтаксического сахара

В языке COBOL многие из промежуточных ключевых слов являются «сладкими», то есть при желании могут быть опущены. Например, предложение MOVE A B. и MOVE A TO B. выполняют точно одну и ту же функцию, но второе делает действие, которое должно быть выполнено, более четким.

Расширенные операторы составного присваивания: например, a += b эквивалентно a = a + b в C и аналогичных языках, предполагают, что a не имеет побочных эффектов, например, a является регулярной переменной if.

В Perl, unless (condition) {...} является синтаксически if (not condition) {...}. Кроме того, за любым оператором может следовать условие, что statement if condition эквивалентно if (condition) {statement}, но первый более естественно отформатирован в одной строке.

В языке «Си» указатели на начало элемента памяти могут записываться без применения специальных синтаксисов: *(a + i). Хотя в этом языке существует и специальный синтаксис для этого процесса: a[i]. Аналогично, a->x, запись является синтаксическим сахаром для доступа к членам с помощью оператора разыменования (*a). x.

Using

Заявление в C # гарантирует, что некоторые объекты утилизированы правильно. Компилятор расширяет оператор в блок try-finally.

Язык C # позволяет объявлять переменные как var x = expr, что разрешает компилятору выводить тип x из выражения expr, вместо того чтобы требовать явного объявления.

Списки также содержат синтаксический сахар Python (например, [x*x for x in range (10)] для списка квадратов) и декораторы (@staticmethod).

В Haskell строка, обозначенная кавычками, семантически эквивалентна числу символов.

В пакете rvest встречается обозначение %>%, и говорит о том, что данные (или выход функции), предшествующие ему, будут служить в качестве первого аргумента следующего инструмента. Это обеспечивает более линейный поток и дизайн манипулирования данными. Tidyverse написано для размещения значений.

Критика

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

Производные термины

Синтаксическая соль. Метафора была расширена за счет введения этого термина, который обозначает функцию, разработанную, чтобы затруднить написание плохого кода. В частности, синтаксическая соль — это обруч, через который программисты должны перепрыгнуть, чтобы доказать, что они знают, что происходит, а не выражать действие программы. Например, в Java и Pascal присвоение значения с плавающей точкой переменной, объявленной как int, без дополнительного синтаксиса, явно заявляющего, что намерение приведет к ошибке компиляции, в то время как C и C ++ автоматически усекают все числа с плавающей точкой, назначенные int. Однако это не синтаксис, а семантика.

В C # при сокрытии унаследованного члена класса выдается предупреждение компилятора, если только ключевое слово не используется для указания того, что скрытие является преднамеренным. Это нужно для того, чтобы избежать возможных ошибок вследствие схожести переключателя заявления синтаксиса с тем, что из C или C ++, C # требует break для каждой непустой case метки switch, даже если он не допускает неявное падение.

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

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

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

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

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

Написание кода

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

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

Комментарии