syntactic sugar (tsz. syntactic sugars)
“Syntactic sugar makes the code sweeter to write and read.”
Azaz: nem hoz be új viselkedést, csak megváltoztatja a kifejezés módját.
a
szintaktikai cukora // ugyanaz, mint *(a + i)
A operátor valójában egy pointer + offset dereferálás.
for (int x : v) { std::cout << x; }
Ez szintaktikai cukor a következőre:
for (auto it = v.begin(); it != v.end(); ++it) {
int x = *it;
std::cout << x;
}
auto f = (int x) { return x * x; };
Ez szintaktikai cukor egy névtelen funktor osztályra.
std::vector<int> v = {1, 2, 3};
Syntactic sugar a std::initializer_list<int>
konstruktor meghívására.
a + b // a.operator+(b)
A +
szép és természetes formája az operator+
függvényhívásnak.
obj.setX(3).setY(4).print();
Ez valójában több külön metódus hívása, ami *this
-t ad vissza.
?:
)int min = (a < b) ? a : b;
Ez szintaktikai cukor az if
-else
logikára:
int min;
if (a < b) min = a;
else min = b;
constexpr
, concept
, template
nem csak “cukrok”, hanem nyelvi kiterjesztések.virtual
, override
, noexcept
nem csak szintaktikai rövidítések, hanem fordító szintű viselkedést változtatnak meg.
Előny | Magyarázat |
---|---|
Jobban olvasható | Természetesebb szintaxis |
Rövidebb kód | Kevesebb gépelés, gyorsabb fejlesztés |
Hibamentesebb | Kevesebb hibalehetőség az ismétlődő mintáknál |
Kifejezőbb | Könnyebb kódértés másoknak is |
Hátrány | Megjegyzés |
---|---|
Elrejti, mi történik valójában | Pl. lambdák, auto,
|
Compiler magic-nek tűnhet | Néha félrevezető lehet tanulás közben |
Debug nehézségek | Nehezebb nyomon követni a lefordított viselkedést |
A kifejezést Peter J. Landin vezette be 1964-ben. Azt mondta, hogy a “cukor” olyan extra nyelvi elem, ami “édesebbé” teszi a programozást, de nem változtatja meg az alap viselkedést.
Tulajdonság | Leírás |
---|---|
Fogalom | Szebb, kényelmesebb szintaktikai forma |
Nem változtatja meg | A program jelentését |
Példák | a , for (x : v) , lambda, + , ? : , obj.method().method()
|
Haszon | Kód olvashatóság, írási kényelem |
Cél | Emberbarátabb nyelv a fordítóbarát helyett |