はじめに
IT初心者の私ですが、普段はJavaScript, Node.js(以下JS)を使った開発をしています。
ここ数日、Javaを学び直そうとしているのですが、とにかくセミコロンをつけ忘れてはコンパイラに怒られています。
「JSなら実行してくれるのに・・」
むしろ逆にJavaScriptがセミコロンのつけ忘れに寛容すぎるのでは?
そのような背景もあり、JavaScriptがどこまでセミコロンのつけ忘れを許してくれるのかを、簡単に検証してみました。
この記事でわかること
- JSだとOKだけどJava先生は怒る状態はどういうものか
- JSが怒らないセミコロンのつけ忘れのギリギリのライン
実行環境
- Java : paiza.io (openjdk version "15" 2020-09-15)
- JS : paiza.io(Node.js v12.18.3)
Javaで怒られたソースコード
まずこちらがJava学習中に怒られた案件です。
importjava.util.*;importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args)throwsException{// Your code here!List<Integer>names=newArrayList<Integer>();names.add(1);names.add(2);System.out.println(names.get(0));System.out.println(names.get(1))// ここのセミコロンつけ忘れで怒ってる}}// Main.java:12: error: ';' expected// System.out.println(names.get(1))//1 error
「後ろに何も処理書いてないんだからいいじゃん!セミコロンなしでも分かってくれよ~!わかるだろ~!?」と、
セミコロンを忘れがちな私は思うわけです。
実際JSでは、後ろに処理がなければ実行できる(できてしまう)のだし。
実際JSだとどこまで許されるのか
consta="hoge";console.log(a);// hoge
consta="hoge";console.log(a)// hoge
consta="hoge"console.log(a)// hoge
consta="hoge"console.log(a)// SyntaxError: Unexpected identifier
consta=("hoge");console.log(a)//hoge
セミコロンがなくとも、最悪改行さえしていれば実行できるようですね。
そしてこれはJavaも同様ですが、セミコロンで区切りさえすれば問題なく実行できます。
おわりに
これらの仕様に対して、良し悪しの解釈は人により分かれると思いますが、
「実行できる」とはいえ、私はセミコロンを書き込む癖をつけようと感じました。