Синтаксичний цукор: визначення, походження та приклади

Синтаксичний цукор: визначення, походження та приклади

В інформатиці, синтаксичний цукор є лінгвістикою в мові програмування. Він призначений, для того щоб зробити код легшим, більш читабельним і виразним. Цей цукор робить мову "більш солодкою" для використання людиною. Тобто речі можуть бути виражені чітко, коротко або в альтернативному стилі, який деякі можуть віддати перевагу.

Синтаксичний цукор: що це таке?

Багато мов програмування надають спеціальний відділ граматики для оновлення елементів. Абстрактно, посилання на цей об 'єкт - це процедура двох аргументів: масиву і нижнього індексу, який може бути виражено як


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, розширили термін для позначення похідної в мові, яка може бути визначена як синтаксичний цукор з точки зору ядра основних конструкцій. Зручні функції більш високого рівня можуть бути "дезагреговані" і розкладені на підмножину. Це, насправді, звичайна математична практика побудови з примітивів.

Спираючись на відмінність Ландіна між основними мовними конструкціями і властивостями синтаксичного цукру, в 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 робить код простим і виразним, але також викликає неоднозначність. Це зазвичай пов 'язано з тим, що не кожен знає і застосовує таке поняття при програмуванні.