はじめに
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学習中に怒られた案件です。
import java.util.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
List<Integer> names = new ArrayList<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だとどこまで許されるのか
const a = "hoge";
console.log(a);
// hoge
const a = "hoge";
console.log(a)
// hoge
const a = "hoge"
console.log(a)
// hoge
const a = "hoge"console.log(a)
// SyntaxError: Unexpected identifier
const a = ("hoge");console.log(a)
//hoge
セミコロンがなくとも、最悪改行さえしていれば実行できるようですね。
そしてこれはJavaも同様ですが、セミコロンで区切りさえすれば問題なく実行できます。
おわりに
これらの仕様に対して、良し悪しの解釈は人により分かれると思いますが、
「実行できる」とはいえ、私はセミコロンを書き込む癖をつけようと感じました。