LoginSignup
0
0

More than 3 years have passed since last update.

セミコロンのつけ忘れを、JSはどこまで許してくれるのかを試してみた

Posted at

はじめに

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も同様ですが、セミコロンで区切りさえすれば問題なく実行できます。

おわりに

これらの仕様に対して、良し悪しの解釈は人により分かれると思いますが、
「実行できる」とはいえ、私はセミコロンを書き込む癖をつけようと感じました。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0