Как говорили люди, добавление этого слова на самом деле не дает полезного синтаксического сахара, потому что стоимость чтения (или if (!) Мала, к этому привыкли все разработчики C, и, используя такой макрос, вы напугаете большую часть Разработчики на C. Кроме того, делать язык похожим на другой - не лучшая идея.
НО, синтаксический сахар имеет значение. Как уже говорилось, в C ++ boost добавляет много синтаксического сахара с помощью шаблонов, а stl также предоставляет сахар Somme (например, std::make_pair(a, b)
является синтаксическим сахаром для std::pair<decltype(a), decltype(b)>(a, b)
.
По мере улучшения языка добавляются как функциональные возможности, так и синтаксический сахар, чтобы улучшить читаемость, удобство записи и эффективность разработчиков. Например, в спецификации C ++ 11 было добавлено «for (elements in datastructure)» (см. Ниже), а также ключевое слово «auto», которое позволяет вывод типов в течение недели (я говорю «слабый», потому что вам нужно ввести много типов во многих местах, где тип на самом деле «очевиден» и избыточен).
Кроме того, в haskell использование монад без нотации do (синтаксический сахар) было бы настоящей проблемой, и никто бы не стал их использовать 1.
Пример без синтаксического сахара:
//C++ < 11
std::vector<int> v;
v.push_back(3);
v.push_back(7);
v.push_back(9);
v.push_back(12);
for (std::vector<int>::iterator it = v.begin();
it != v.end();
it++)
{
std::cout << *it << std::endl;
}
И с синтаксическим сахаром:
//C++ >= 11
std::vector<int> v {3, 7, 9, 12};
for (auto elm : v)
{
std::cout << elm << std::endl;
}
Немного читабельнее, не так ли?
Пример haskell для монады ввода-вывода (из HaskellWiki):
f :: IO String
f =
ask "What's your name ?" >>= \name ->
putStrLn "Write something." >>= \_ ->
getLine >>= \string ->
putStrLn ("Hello " ++ name ++ " you wrote " ++ string) >>= \_ ->
return name
g :: IO String
g = do
name <- ask "What's your name ?"
putStrLn "Write something."
string <- getLine
putStrLn ("Hello " ++ name ++ " you wrote " ++ string)
return name
Вот ссылка на ideone: http://ideone.com/v9BqiZ
1: на самом деле язык более гибкий, чем C ++, и позволяет создавать операторы (например, & ^, +.,: + :, ...), так что мы могли представить, что кто-то снова быстро вводит синтаксический сахар :).
person
Jeremy Cochoy
schedule
22.07.2013
sugar.h
, содержащий определения типа Паскаля ... - person mbx   schedule 09.04.2011unless
с предложениемelse
(однако мне нравится, когда / если в lisp). Меня не особо впечатлил циклuntil
, но, возможно, потому, что я никогда его раньше не использовал. - person 6502   schedule 09.04.2011while
можно легко реализовать черезif... goto
, но первый for кратко выражает ваше желание зацикливаться. - person Dennis Zickefoose   schedule 10.04.2011until
. - person Zach Rattner   schedule 22.04.2011#define
, а сделать транспилятор, чтобы люди могли читать его на C. - person Caveman   schedule 01.10.2018