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

210 0 Новини високих технологій

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

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

Синтаксичний цукор: визначення, походження і приклади
Багато мови програмування надають спеціальний відділ граматики для оновлення елементів. Абстрактно, посилання на даний об'єкт — це процедура двох аргументів: масиву і нижнього індексу, який може бути виражений як get_array(Array, vector(i, j)) . Замість цього, багато мови надають синтаксис, такий як Array[i, j] . Точно так само оновлення елемента масиву, наприклад, set_array(Array, vector(i, j), value) представляє собою процедуру з трьох аргументів, але багато професіонали надають такий код, як Array[i, j]= value .

Конструкція в мові називається «синтаксичним цукром», якщо вона може бути вилучена з програми без будь-якого впливу на функціональність і виразність.

Різні процесори, у тому числі компілятори і статичні аналізатори, часто розширюють підсолоджені конструкції до більш фундаментальних пристроїв перед обробкою. Такий процес називається «десагеринг».

<script async="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">

<script> (adsbygoogle = window.adsbygoogle ||[]).push({});

Походження

Термін «синтаксичний цукор» був введений Пітером Дж. Ландином в 1964 році для опису поверхневого відділу граматики простого ALGOL, мови програмування, який був визначений семантично у термінах аплікативного виразів лямбда-числення, зосереджених на лексичної заміни ? з «де».

Більш пізні мови програмування, такі як CLU, ML і Scheme, розширили термін для позначення похідної в мові, яка може бути визначена як синтаксичний цукор c точки зору ядра основних конструкцій. Зручні функції більш високого рівня можуть бути «дезагрегированы» і розкладені на підмножину. Це, насправді, звичайна математична практика побудови з примітивів.

Спираючись на відмінність Ландін між основними мовними конструкціями і властивостями синтаксичного цукру, в 1991 році Матіас Феллайзен запропонував кодифікацію «виразної сили», щоб відповідати широко поширеним переконанням в літературі. Він визначив це як «більш багатозначний», щоб позначити, що без розглянутих мовних конструкцій програма повинна бути повністю реорганізована.

Відомі приклади синтаксичного цукру

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

У мові COBOL багато з проміжних ключових слів є «солодкими», тобто при бажанні можуть бути опущені. Наприклад, пропозиція MOVE A B. TO MOVE A B. точно виконують одну і ту ж функцію, а друге робить дію, яке повинно бути виконано, більш чітким.

<script async="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">

<script> (adsbygoogle = window.adsbygoogle ||[]).push({});

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

Популярі новини
Загрузка...