じゃばすくりぷとの書き方 ~そのさん~
ご挨拶
どうもご無沙汰しています。
先日初めてメンティさんと契約する運びとなりました。
MENTAを通してというか、こういうプラットフォームを通じて受注したのは初めてなので何かと刺激を受けています。
では、そのさん
今日はJavascriptのステートメントの終了を表すセミコロンの話です。
まずこの話をするにあたってですが、
先日、職場の若手エンジニアさんのNode.jsで書かれたコードをレビューしているときに末尾のセミコロンがついていないことに気づきました。
おやおや、お漏らしさんかな? と思っていたのですが、
よくよく見るとドバドバに漏れていたので、これはなんだか怖いなぁ…おかしいなぁと思って調べたら
どうも文末にセミコロンを使わないと記法があるそう。
(※結果的には意識したわけでなくコピペでしたが。)
今はまだ悪魔的、記法
セミコロンの省略はJavaScript Standard Styleと呼ばれる記法の中の一つのルールとして運用されているようで、JavaScript Standard Style自体はnpm、GitHub、Elastic、Express、Electron
などで使用されているそうです。
Javascriptの構文的にはセミコロンは必須ですが、
Javascriptには自動セミコロン挿入(Automatic Semilocon Insertion)という機能があるので省略して書いちゃえ、そのほうが美しいだろう!It's a Beautiful!!
ってことらしいです。
やー、カルチャーショックです。
ミニファイする時どうすんだ!と思ったけど、
それはミニファイする側の問題か。なんて勝手に納得。
実際に書いてみる
// どうしようもなく意味のない処理
let ret = function () {
let ary = []
ary.push(1)
ary.push(2)
for (let obj of ary) {
console.log(obj)
}
return true
}()
console.log(ret)
あれ?うーん、実際に書いてみて見慣れとどっちでもよかったりするなぁ。
上述したように結構メジャーどころが使用しているので既に大勢に流されてしまいそうですが、まだ自分は文末にセミコロンがないとソワソワする前時代脳なので、しばらくの間はあったほうがよいかなとか思ってます。
兎にも角にも、混ざるのだけは嫌だな!
へぇ・・javascriptもこっそりと人知れずこの流れに追従してたのですね。
僕もJava専門だった頃にpythonを始めて、この末尾のsemi-colon省略に違和感を覚えました。
Goをやる頃にはpythonで慣らされてたので見た目に関しては違和感こそは感じませんでしたが、
中括弧の代わりにindentでblockを表現するpythonと違い、Goは他の言語同様に中括弧でblockを表現するため
ASI(Automatic Semilocon Insertion)がAllman styleでの書き方を拒絶することが判明し、
そこで初めてpythonとASIの相性の良さを認識できました。
調べてみると、JavascriptもGo同様にAllman styleが拒絶されるケースがありますね。
尤も、Javascriptの場合はGoと違いreturnの後に改行することが問題(Javascriptは改行コード単位を
文として扱う)なため、これはreturn値でAllman styleを使うケースに限られるみたいですが。
他にもASIの仕様の理解不足が引き起こす、見つけにくい嫌らしいbugのパターンがあるようで、下記のページの説明が詳しいです。
https://blog.tai2.net/automatic_semilocon_insertion.html
個人的には、コーディングのちょっとした手間よりも、言語が「大きな政府」ならぬ「大きな言語」となって
ブラックボックスを拡大し、その理解不足によるbug埋め込みの危険性が増す方が、遥かに害悪だと
思うのですが、世の中、変な方向に動きつつあるようですね。