糖衣構文
出典: フリー百科事典『ウィキペディア(Wikipedia)』
糖衣構文(とういこうぶん)は、プログラミング言語において、読み書きのしやすさのために導入される構文。構文糖(こうぶんとう)あるいは構文糖衣ともいう。
英語の syntactic sugar (シンタクティックシュガー、syntax sugar (シンタックスシュガー)とも)の訳語で、語源は英単語の sweet が、「甘い」の他に「扱いが楽」という意味をもつことから。
目次 |
[編集] 解説
糖衣構文はなくても言語の記述能力(論理的な、できること/できないことの境界)は変化せず、他の構文を利用することによって等価な記述をすることができる。――というのが、ソフトウェア工学が唱える建前である。
一般に糖衣構文と呼ばれているものの中にも、糖衣構文の使用時/未使用時の間で細かな処理の違いがあったり、無視できない性能差などがあったりする場合がある。 このため現実には機能上完全に等価とは言えないことのほうが多く、実際には「ほとんど同じ」という程度のあいまいな等価性と考えたほうが正確である。
なお、より厳密な意味でのプログラミング言語の機能等価性は、アラン・チューリングによって述べられており、チューリング等価として知られている。
読み書きの負荷を軽減する目的で始まった糖衣構文は、プログラマの意図をコード中に反映させて残すための手段としても活用できることが知られている。
ある目的のためによく用いられる記法が二つ以上ある場合、プログラマはそのどちらかを選ぶことになる。 このとき(初心者でない)プログラマは統一性のある個人的/職場的/言語的なルールに従って記法を選択するのが普通であるため、 どの記法が選択されたかによって、当時コードを記述したプログラマの意図を推し量ることができるのである。
Perl等のスクリプト言語では糖衣構文が数多く言語仕様に定義されているため、こういった活用が成されている状況が多い。
[編集] 糖衣構文の例
[編集] 配列へのアクセス
C言語の配列の記法a[i]
は、*(a + i)
の糖衣構文である。前者の方が読みやすいのは、明瞭である。また、配列の操作であって純粋なポインタ演算ではないことを示唆できる。(なお、i[a]
と表記しても同じ結果となる。このことをもって、「C言語には本当の『配列』は無い」とする意見がある。)
[編集] for文
for(i=0;i<=10;i++){ P }
は、次のように等価な(ただしcontinue文の扱いに差がある)処理を書くことができる。ただしPは処理を表す。
i=0; while(i<=10){ P i++; }
[編集] 中置記法
Haskellのような関数型言語では、中置記法a+b
は、関数を適用する文(+) a b
に対する糖衣構文である。
[編集] 配列の宣言と初期化
Javaの配列の宣言と初期化の記法
String[] strs = new String[3]; strs[0] = "a"; strs[1] = "b"; strs[2] = "c";
は
String[] strs = { "a", "b", "c" };
と書ける。String
以外のオブジェクトでも可能である。 後者は「あらかじめ決まったいくつかの文字列から文字列の配列を作りたい」という記述者の思考を、より良く反映している。
[編集] Perlにおける条件文
Perlの条件文の記法
if ($boolean) { print "Syntax sugar\n"; }
は
print "Syntax sugar\n" if $boolean;
と書ける。
Perlの開発者ラリー・ウォールによればこれは糖衣構文であるが、FORTRANやPascalやCやJavaに慣れ親しんだプログラマの中には、これを読みにくいと感じる者も多い。それは、「読み書きのしやすさ」が主観に基づくためである。