JavaScriptはセミコロンで区切られる
実はこのブログの投稿では、例示しているJavaScriptのコードの行末にセミコロンを入れていない。
理由は単純で、ブログのベースに利用している gatsby-starter-blog のコード自体が、 行末にセミコロンを入れていなかったからである。
JavaScript Primer によると、
JavaScriptは、文(Statement)ごとに処理していき、文はセミコロン(;)によって区切られます。 特殊なルールに基づき、セミコロンがない文も、行末に自動でセミコロンが挿入されるという仕組みも持っています。しかし、暗黙的なものへ頼ると意図しない挙動が発生するため、セミコロンは常に書くようにします。
とある。
明示的にセミコロンは書くべきなのだろうか。
自動セミコロン挿入
JavaScript Primer の引用に
特殊なルールに基づき、セミコロンがない文も、行末に自動でセミコロンが挿入されるという仕組みも持っています。
とあるが、JavaScriptには自動セミコロン挿入(ASI: Automatic Semicolon Insertion)というルールがあり、 「特殊なルール」というのは、このASIを指している。
ASIは、改行のある場所で構文エラーが検出されたときに自動的にセミコロンを挿入して再解釈する。
JavaScriptの設計者 Brendan Eich によると、ASIはあくまでセミコロンを誤って書き忘れた場合の訂正措置として搭載しているようだ。
どちらが正解か
いろいろ調べたが、実は正解はなく、宗教論争的なものだということが分かった。
何も考えずにセミコロンを入れても、省略しても、結果その人のスタイルで正解はない。
JavaScriptという言語の柔軟性、多様性といった良さなのだろう。 当面は明示的にセミコロンを行末に入れないスタイルで続けようと思う。