sugar)は、プログラミング言語において、読み書きのしやすさのために導入される書き方であり、複雑でわかりにくい書き方と全く同じ意味になるものを、よりシンプルでわかりやすい書き方で書くことができるもののことである。構文上の書き換えとして定義できるものであるとも言える[1]。sugarの直訳に近い構文糖(こうぶんとう)という用語も使われる。外来語としてそのままシンタックス・シュガーとも呼ばれる。糖衣構文あるいは構文糖衣とするのは少々意訳的だがよく使われている[2]。語源は「取り扱いやすい」を意味するsweetの第一義が「(砂糖のように)甘い」であることから[3][4]。プログラムの意味としては同じものを、よりわかりやすい構文で書けるものである。cancer(結腸癌)とセミコロンを掛けてもいる[8])。逆に糖衣構文から元の構文に戻すことをdesugarとか脱糖という。糖衣構文の役割を考えると無駄な作業に思えるが、実際にどうなっているかを把握するためであるとか、場合によっては短く書けたり、また一般に柔軟性(自由度)は元の書き方のほうがすぐれる。脱糖したコードを把握しておくことが重要な一例として、Haskellのモナドが挙げられる。expressions[9])という糖衣構文があり、例えばmainのIOモナドを書く際などは全く「モナドらしい扱い」といったものは考えなくてよい。いう演算子[10])を、その対象について定義しなければならないからである。以下ではプログラミング言語ごとに代表的な糖衣構文の一部を挙げる。糖衣構文の多い言語は自由度が高く語彙が豊富であるとも言えるが、たとえ同じ意味のプログラム内容であってもプログラマによってまったく異なるソースコードを書くこともできてしまう。糖衣構文の少ない言語では、自由度が低い代わりに覚えるべき文法が少なくて済み、誰が記述しても似たようなソースコードになりやすい。C言語編集C言語の糖衣構文のうち、特筆性の高いものはポインタに関連する構文である。制御構造に関連する糖衣構文はC++、Java、C#といったC系の後発言語にもそのまま引き継がれている。この糖衣構文は、見た目の単純さだけではなく、括弧の手前に書かれるものが先頭アドレスで括弧の中がオフセットであるというように、コードの意味をより明確で分かりやすくもしている。count)と書くこともできる。後者は引数として配列を渡すことを想定していることがより明確になる。10)と書くこともできる。いう宣言とは、それぞれ違うものである)という事実を見失わせ、あらゆる場所で配列とポインタは可換であるというように誤った解釈や混同をしてしまう要因にもなっている。ように書くこともできる。書くこともできる(普通は書かないが)。構文的に問題なく、意味的にも全く同じだが、読者を驚かせる効果はある。IOCCCにおいて以前はよく見られた技法のひとつである。ポインタを介したメンバ選択演算子編集C言語では、構造体へのポインタからメンバーを参照する場合、アロー(矢印)演算子->を使うことができる。構造体の要素名である。ポインタをデリファレンスする*演算子と、構造体の値に対しメンバーを選択する.演算子を組み合わせて、次のように等価な式を書くことができる(が、倍の文字数と、カッコを必要とし、意味を持つ部分が*と.の2箇所に分散してしまっている)。(*p).memberなおC++では、演算子のオーバーロードにより、これらが等価ではない場合もありうる(基本的には等価になるようにオーバーロードされるべきではあるが)。分岐編集if文、switch文、条件演算子(三項演算子)はいずれも分岐を表現できるが、それぞれ制約が異なり、異なる長所・短所がある。詳細は各項目を参照のこと。ループ編集for文、while文、do-while文はいずれもループ構造を表現するための構文であり、本質的には同じだが、実行するループの内容や特性に応じて書きやすさが異なる。レコード型データは、実際にはタプル型データに対する糖衣構文であるが、要素を取り出したり、パターンマッチするのに糖衣構文が使われる。};と書ける[11]。String以外のオブジェクトでも可能である。後者は「あらかじめ決まったいくつかの文字列から文字列の配列を作りたい」という記述者の思考を、より良く反映している。C#編集C#は言語仕様の更新が比較的頻繁に行なわれており、その際に糖衣構文も数多く追加されている。3.0以降にはSQL構文風のクエリ文字列で表現することができるLINQクエリ構文が用意されているが、これは内部的にはラムダ式をパラメータに取るメソッドチェーンによる等価の反復処理表現(LINQメソッド構文)に置き換えられる。どちらの構文でも必要。以下のコードはそれぞれ等価であり、文字't'のみを抽出した新たなシーケンス(IEnumerable<char>型)を返す。c);インデクサ編集C#ではオブジェクト内部のコレクション呼び出し等に使うgetter/setterメソッド呼び出しを配列同様の添字表現に置き換えることのできるインデクサが糖衣構文として用意されている。}}実質的にはgetter/setterメソッドの実装と等価であるが、ListやDictionaryのようなコレクションクラスへのアクセスをより直接的に記述できる。Formsについて説明する。