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

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

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

Синтаксичний цукор, визначення

Многі мови програмування надають спеціальний відділ граматики для оновлення елементів. Абстрактно, посилання на даний об`єкт-це процедура двох аргументів: масиву та нижнього індексу, який можна виразити як 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, Юкіхіро Мацумото, хотів зробити мову не тільки ефективною, але й захоплюючою. Компіляторам та інтерпретаторам може сподобатися такий високоструктурований, однозначний відділ граматики, але людям може бути важко це зрозуміти. Ось тут-то і з`являється синтаксичний цукор-він робить мову " солодше» і в листі, і в читанні.

Написання коду

синтаксичний цукор python

Необхідно пам`ятати, що " синтаксичний цукор» - це не технічний термін, а конструкція, призначена для того, щоб допомогти описати спосіб вираження мови. Простіше кажучи, даний термін має на увазі оптимізований код для людей. Мета полягає в тому, щоб спростити синтаксис, щоб його було легко читати, навіть якщо це зменшує деяку технічну ясність. Звичайно, написання солодкого коду не означає, що можна пропустити важливий етап розуміння.

Як і в реальному житті, знання того, скільки цукру використовується, важливо для загального стану здоров`я. Цукор робить код простим і виразним, але також неоднозначним. Пов`язано це зазвичай з тим, що не кожен знає і застосовує таке поняття при програмуванні.

Статті на тему