Loading AI tools
Z Wikipedii, wolnej encyklopedii
Lukier składniowy (lukier syntaktyczny, cukier syntaktyczny) (ang. syntactic sugar) – w programowaniu dowolna cecha składni języka, którą można wyeliminować przez proste przekształcenia składniowe, istniejąca jedynie dla wygody programisty. Dzięki lukrowi składniowemu programy stają się czytelniejsze oraz uzyskują bardziej zwartą formę. Termin wymyślony przez Petera Landina[1].
Ten artykuł od 2012-07 wymaga zweryfikowania podanych informacji. |
x[i]
to tylko lukier składniowy dla nieintuicyjnego *(x+i)
. W języku C wyróżnione pojęcie tablicy istnieje jedynie z punktu widzenia programisty; dla kompilatora jest ono tożsame z pojęciem wskaźnika. W rezultacie wyrażenie x[i]
jest w pełni równoważne wyrażeniu *(x+i)
.++c
teoretycznie może być lukrem składniowym dla instrukcji c=c+1
lub c+=1
. Wszystkie trzy formy zapisu powodują inkrementację zmiennej c
i zwracają wyrażenie równe jej nowej wartości, chociaż w rzeczywistych kompilatorach równoważność tych wyrażeń zależy od procesora i stosowanej optymalizacji, a instrukcje te mogą różnić się czasem wykonania, a także liczbą bajtów w kodzie maszynowym.W języku C++ powyższe przykłady mogą być traktowane jako lukier składniowy jedynie dla prostych typów danych. Jeśli zmienna c
byłaby obiektem, operatory ++
, =
, +
oraz +=
mogłyby zostać zdefiniowane lub przeciążone w taki sposób, że wykonanie wymienionych działań prowadziłoby do niejednakowych efektów. To samo dotyczy użytych w pierwszym przykładzie operatorów [ ]
, *
i +
.
x += y
oznacza x = x + y
, co z kolei oznacza x = x.+(y)
, gdzie +
to metoda będąca
przeciążonym operatorem.
with
stanowi lukier składniowy, umożliwiający zapisanie kodu odpowiedzialnego za pracę z pojedynczym obiektem w bardziej czytelnej formie. Przykładowo: Form1.MDIChildren[0].Panel1.Caption:='Tytuł';
Form1.MDIChildren[0].Panel1.Width:=500;
Form1.MDIChildren[0].Panel1.Height:=400;
można zapisać następująco:
with Form1.MDIChildren[0].Panel1 do
begin
Caption:='Tytuł';
Width:=500;
Height:=400;
end;
W wersji ECMAScript 6, gdzie zostały dodane funkcje strzałkowe, gdy zwracane jest pojedyncze wyrażenie można pominąć słowo kluczowe return i użyć krótszej składni:
const f = (x) => x + 2;
Jest odpowiednikiem dłuższego zapisu:
const f = (x) => {
return x + 2;
};
W programowaniu funkcyjnym często wykorzystywane są listy elementów, dlatego standardowe operacje sprawdzania (nie)pustości głowy (początku) listy oraz wyciągania tejże głowy z listy, zastępowane są cukrami syntaktycznymi.
Komentarze i opcjonalne białe znaki, zwiększające czytelność programu, to również lukier składniowy – w żaden sposób semantycznie nie wpływają na przebieg kompilacji i tworzony kod wynikowy programu.
Lukru (cukru) składniowego nie należy mylić z np. strukturyzacją programu, tj. umieszczaniem części kodu np. w funkcjach, tworzeniem obiektów posiadającym klasy wirtualne, gdyż zabiegi te mają odzwierciedlenie w kodzie maszynowym programu (np. jako wywołanie stosu dla funkcji, zapamiętanie adresu powrotu) – lukier składniowy jest tylko szybszym/wygodniejszym/czytelniejszym sposobem zapisu kodu i jest on zastępowany „czystym” językiem na poziomie interpretacji kodu – kompilacji poddany zostaje kod nie zawierający już lukru syntaktycznego.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.