本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合の宛先:
郵便番号:165-0027
住所:東京都中野区野方5-30-13 ヴィラアテネ401
宛名:江添亮

JavaScriptのコメントと改行

今回の記事は、JavaScriptのコメントの文法についての、とてつもなく些細な内容になる。

まず、「改行」の定義について

ECMAScript規格では、俗に改行と呼ばれているものは、正式には、行終端子(Line Terminator)と名づけている。行終端子は5個あり、これは4種類の文字からなる。なぜ4種類の文字で5個あるのか。ひとつは組み合わせなのだ。

行終端子を構成する4種類の文字は、\u000A(Line Feed), \u000D(Carriage Return), \u2028(Line separator), \u2029(Paragraph separator)である。

しかし、慣習的に、CRに続くLFを、ひとつの「改行」とみなすことが横行している。JavaScriptはこの慣習を追認する形で、CRLFの2文字をひとつの行終端子として認識する。

さて、本題に入ろう。JavaScriptのコメントには、一行コメントと、複数行コメントがある。

// 一行コメント

/* 複数行
コメント*/

コメントは空白文字とみなされる。

一行コメントは、//から行終端子までがコメントとなる。ただし、行終端子はコメントに含まれない。

複数行コメントの中に行終端子があった場合、複数行コメントは、行終端子とみなされる。

なぜ行終端子が残るのかというと、自動セミコロン挿入(automatic semicolon insertion)のためだ。


function f()
{
    var i = 0 ;
    i // 一行コメント
    ++ ; // エラー
}

一行コメントは、行終端子として認識されるので、自動セミコロン挿入が働く。したがって、上記のコードは、正しく文法エラーになる。

JavaScriptの自動セミコロン挿入については、このブログでも4年前に取り上げたが、当時はまだ規格の読解力が今ほどではなく、やや稚拙であるので、この機会に、規格を§7.9まで読み進めたあとで、解説しようと思う。

ドワンゴ広告

この記事は意識高い系ドワンゴ社員である筆者が、超チューニング祭のために、自発的に06:33に出社してECMA-262 Edition 5.1を読みながら書いた。

昨日は、実質七時間しか睡眠を取っていない故に「つれー」状態にある。実質七時間なのだ。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0