Зміст
В інформатиці, синтаксичний цукор є лінгвістикою в мові програмування. Він призначений, для того щоб зробити код легше, більш читабельним і виразним. Даний цукор робить мову "солодшим" для використання людиною. Тобто речі можуть бути виражені чітко, коротко або в альтернативному стилі, який деякі можуть віддати перевагу.
Синтаксичний цукор: що це таке?
![Синтаксичний цукор, визначення](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_2.webp)
Многі мови програмування надають спеціальний відділ граматики для оновлення елементів. Абстрактно, посилання на даний об`єкт-це процедура двох аргументів: масиву та нижнього індексу, який можна виразити як 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 році Матіас Феллайзен запропонував кодифікацію "виразної сили", щоб відповідати широко поширеним переконанням у літературі. Він визначив це як "більш значущий», щоб позначити, що без розглянутих мовних конструкцій програма повинна бути повністю реорганізована.
Відомі приклади синтаксичного цукру
![Синтаксичний цукор, приклади](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_3.webp)
У мові 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 написано для розміщення значень.
Критика
![синтаксичний цукор властивості](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_4.webp)
Деякі програмісти вважають, що ці можливості використання синтаксису або не важливі, або просто несерйозні. Примітно, що спеціальні лінгвістичні форми роблять мову менш одноманітною, а її специфікацію-більш складною, і можуть викликати проблеми в міру того, як програми стають більшими. Цей погляд особливо поширений у спільноті Lisp, оскільки він має дуже простий, регулярний і поверхневий синтаксис, який можна легко змінити.
Похідні терміни
![синтаксичний цукор що це](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_5.webp)
Синтаксична сіль. Метафора була розширена введенням цього терміна, який позначає функцію, розроблену для того, щоб ускладнити написання поганого коду. Зокрема, синтаксична сіль-це обруч, через який програмісти повинні перестрибнути, щоб довести, що вони знають, що відбувається, а не виражати дію програми. Наприклад, у Java та Pascal присвоєння значення з плаваючою точкою змінній, оголошеній як int, без додаткового синтаксису, який явно заявляє, що намір призведе до помилки компіляції, тоді як C і C ++ автоматично усікають усі числа з плаваючою точкою, призначені int. Однак це не синтаксис, а семантика.
У C # приховування успадкованого члена класу видає попередження компілятора, якщо ключове слово не використовується для вказівки на те, що приховування є навмисним. Це потрібно для того, щоб уникнути можливих помилок внаслідок схожості перемикача заяви синтаксису з тим, що з C або C ++, C # вимагає break для кожної непорожній Case мітки switch, навіть якщо він не допускає неявне падіння.
Синтаксична сіль може порушити своє призначення, зробивши код нечитабельним і, таким чином, погіршивши його якість. У крайніх випадках основна частина може бути коротшою, ніж накладні витрати, введені для задоволення вимог мови.
Альтернативою даного поняття є генерація попереджень компілятора, коли існує висока ймовірність того, що код представляється результатом помилки практика, поширена в сучасних компіляторах C / C ++.
Синтаксичний сахарин
![чашка кави з вершками](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_6.webp)
Іншим розширенням також є сироп. Він так само, як і сахарин означає безпричинний синтаксис, який не полегшує програмування.
Може здатися дивним називати мову «солодкою", але якщо працювати в Rubyist, то це буде виправдано. У даній програмі більше синтаксичного цукру, ніж у безлічі мов, тому що він робить акцент на людському розумінні, а не на комп`ютерному. Творець Ruby, Юкіхіро Мацумото, хотів зробити мову не тільки ефективною, але й захоплюючою. Компіляторам та інтерпретаторам може сподобатися такий високоструктурований, однозначний відділ граматики, але людям може бути важко це зрозуміти. Ось тут-то і з`являється синтаксичний цукор-він робить мову " солодше» і в листі, і в читанні.
Написання коду
![синтаксичний цукор python](https://cdn2.faqukr.com/fimg/sintaksicheskij-sahar-opredelenie-proishozhdenie-_7.webp)
Необхідно пам`ятати, що " синтаксичний цукор» - це не технічний термін, а конструкція, призначена для того, щоб допомогти описати спосіб вираження мови. Простіше кажучи, даний термін має на увазі оптимізований код для людей. Мета полягає в тому, щоб спростити синтаксис, щоб його було легко читати, навіть якщо це зменшує деяку технічну ясність. Звичайно, написання солодкого коду не означає, що можна пропустити важливий етап розуміння.
Як і в реальному житті, знання того, скільки цукру використовується, важливо для загального стану здоров`я. Цукор робить код простим і виразним, але також неоднозначним. Пов`язано це зазвичай з тим, що не кожен знає і застосовує таке поняття при програмуванні.