Синтаксичний цукор (англ. syntactic sugar) — узагальнена назва, яка позначає доповнення синтаксису мови програмування, які не додають нових можливостей, а роблять використання мови програмування зручнішим для людини. Зазвичай це додаткові легкозасвоювані синтаксичні конструкції, часто схожі на інші мови програмування, до яких могла звикнути людина. Інколи синтаксичним цукром називають додаткові бібліотеки, у яких реалізовані готовий функціонал, застосування якого потребує написання малої кількості коду та під'єднання відповідних бібліотек. Синтаксичний цукор дає програмісту альтернативний спосіб запису іншої, вже наявної в мові синтаксичної конструкції і при цьому є більш зручним, більш коротким, схожим на інший поширений спосіб запису, або допомагає писати програми в хорошому стилі. З формальної точки зору, синтаксичний цукор нічого не змінює і (виразності) мові не додає, однак може помітно полегшити програмісту опис деяких операцій. Одночасно, синтаксичний цукор, особливо при його надмірному застосуванні, може погіршувати читання коду і ускладнювати його підтримку. Конструкції, які є синтаксичним цукром, можуть легко транслюватися в конструкції основного синтаксису.
Слід зазначити, що поняття синтаксичного цукру багато в чому є умовним. Його використання припускає, що з багатьох синтаксичних конструкцій можна виділити деякий «базовий набір», що забезпечує всю функціональність мови. Тоді додаткові синтаксичні засоби, які при бажанні можна виразити за допомогою базового набору, і будуть для цієї мови синтаксичним цукром. Однак багато конструкцій є взаємозамінними і далеко не завжди можна точно сказати, які саме з них є базовими, а які — додатковими. Наприклад, у мові є чотири види циклів: цикл з передумовою, цикл з післяумовою, цикл з кроком і безумовний цикл. Теоретично, перші три види циклів можуть бути легко виражені через останній. Чи є вони, в такому випадку, синтаксичним цукром? Зазвичай так не кажуть, хоча формально під вищенаведене визначення вони потрапляють.
Приклади
Масиви в Сі
Масиви в Сі являють собою блоки в пам'яті. Доступ до елементів масиву здійснюється через вказівник на початок блоку пам'яті (тобто, на початок масиву) і зсув елемента щодо початкової адреси. Це може бути записано без використання спеціального синтаксису для масивів (a
— вказівник на початок масиву, i
— індекс необхідного елемента): *(a+i)
, але безпосередні операції з адресами в пам'яті і зсувами є великим джерелом помилок програмістів, тому мова надає спеціальний синтаксис: a[i]
. Крім того, є можливість звернутися до i-го елементу масиву вже зовсім екзотичним способом: i[a]
, що аналогічно a[i]
, оскільки значення вказівника i+a
, очевидно, є таке саме, як і a+i
.
Тернарна операція в Сі
Інший відомий приклад спеціалізованої мовної конструкції — тернарна умовна операція мови Сі ?:
. Наступні два фрагменти коду роблять одне і теж:
int fn(); int a = 1; int b; if (a > 0) b = fn(1); else b = fn(2);
int fn(); int a = 1; int b = fn((a > 0)? 1 : 2);
Причина введення такої операції — бажання вставляти перевірку простих умов прямо у вирази і можливість прямо вказати компілятору, що результатом перевірки умови буде єдине значення. Конструкція дійсно скорочує запис, але от з приводу її зручності думки можуть бути різними. Багато хто вважає, що скорочення запису в даному випадку не виправдовує погіршення читання коду.
Перевизначення операторів
До синтаксичного цукру можна віднести і , яке підтримується багатьма мовами програмування. Загалом будь-яка операція може бути оформлена як процедура (функція, метод). Перевизначення операторів дозволяє виконувати операції, створені програмістом зовні так само, як і вбудовані в мову.
Властивості
Ще одним прикладом синтаксичного цукру є концепція «властивостей», яка підтримується багатьма сучасними мовами програмування. Мається на увазі визначення в класі псевдополів, які зовні ведуть себе як поля класу (мають ім'я, тип, допускають присвоювання та читання), але насправді такими не є. Кожне звернення до властивості перетвориться компілятором у виклик методу доступу. Властивості абсолютно не є необхідними (методи доступу можна викликати і безпосередньо) і використовуються виключно для зручності, оскільки код з використанням властивостей виглядає дещо простіше і зрозуміліше.
Критика
Не всі програмісти вважають наявність синтаксичного цукру в мовах програмування і використання його програмістами благом. Відома точка зору Ніклауса Вірта, яку поділяє частина спільноти програмістів: згідно з нею, будь-яке розширення мови, не викликане необхідністю, погіршує її, так як призводить до ускладнення транслятора і відповідно до зниження його надійності і продуктивності. Одночасно зростає складність вивчення мови і складність супроводу програм. Крім того, сам факт наявності додаткових синтаксичних засобів часто грає провокуючу роль: він спонукає програміста вдаватися до різних синтаксичних трюків замість того, щоб глибше аналізувати завдання і реалізовувати більш ефективні алгоритми. Ці погляди відображені в мовах сімейства Оберон, дуже простих і практично позбавлених синтаксичного цукру.
Відомий афоризм (Алана Перліса): «Синтаксичний цукор викликає рак крапок з комою». Крапка з комою («;
»), будучи обов'язковою частиною більшості популярних мов програмування, навіть якщо в новій мові вона не потрібна, залишається як необов'язковий елемент, так як більшість програмістів мають звичку її використовувати. В оригіналі афоризм обігрує співзвуччя англійських слів semicolon (крапка з комою) і colon, останнє з яких означає не тільки двокрапка, але і пряму кишку (colon cancer — рак прямої кишки).
Див. також
- (Синтаксична сіль)
Посилання
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет