В інформатиці, синтаксичний цукор є лінгвістикою в мові програмування. Він призначений для того, щоб зробити код легше, більш читабельним і виразним. Даний цукор робить мову «більш солодким» для використання людиною. Тобто речі можуть бути виражені чітко, коротко або в альтернативному стилі, який деякі можуть віддати перевагу.
Синтаксичний цукор: що це таке?
Багато мови програмування надають спеціальний відділ граматики для оновлення елементів. Абстрактно, посилання на даний об’єкт — це процедура двох аргументів: масиву і нижнього індексу, який може бути виражений як 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. TO MOVE A 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 робить код простим і виразним, але також викликає неоднозначність. Пов’язано це здебільшого з тим, що не кожен знає та застосовує таке поняття при програмуванні.