全2639文字

 Javaは、企業のITシステムの開発になくてはならないプログラミング言語としての地位を確立している。一方で、PythonやJavaScriptといった若い世代に人気がある言語と比較すると、煩雑な記法が多く堅苦しいイメージは否めない。

 こうしたイメージを一新してJavaの生産性を高める試みが「Project Amber(プロジェクト・アンバー)」だ。同プロジェクトではこれまで、Javaプログラムの可読性を高めるために数々の記法の改良を行ってきた。

 その成果の1つとして、2023年秋に公開予定の「JDK(Java Development Kit) 21」に導入されるのが、Javaプログラムの実行の起点である「mainメソッド」の大幅な簡略化だ。Javaの新機能は「JEP(JDK拡張提案)」として管理されており、mainメソッドの簡略化は「JEP 445」で規定されている。

 Javaの開発にかかわっている米Oracle(オラクル)のチャド・アリムラJava Developer Relations担当バイスプレジデントは、JEP 445導入の目的を「次世代のプログラマーの心をつかみたいという意図が一番大きい」と説明する。「プログラミング分野では、キラキラしたものにどうしても目が行きがちだ。PythonやJavaScriptはプログラムを簡潔に書けるため、プログラミング初心者はこれらが一番いいと勘違いしてしまう」と同バイスプレジデントは危機感をあらわにする。

Oracleのチャド・アリムラJava Developer Relations担当バイスプレジデント
Oracleのチャド・アリムラJava Developer Relations担当バイスプレジデント
(出所:Oracle)
[画像のクリックで拡大表示]

煩雑な記述が多いJavaのmainメソッド

 JEP 445ではmainメソッドの記述がどのように簡略化されるのだろうか。

 従来のJavaでは、簡単なメッセージを表示する「Hello world」のプログラムは次のように書く必要があった。

class HelloWorld {
  public static void main(String[] args) {
    System.out.println("hello, world¥n");
  }
}

 まず、mainメソッドを含むクラスを定義する必要がある。ここでは「HelloWorld」というクラスを定義している。

 またmainメソッドには「public」「static」「void」の3つの指定が必要だ。これらが1つでも欠けるとJavaプログラムは動作しない。

 publicは「アクセス修飾子」と呼ばれるもので、publicはすべてのクラスからのアクセスを許可することを意味する。mainメソッドのアクセス修飾子はpublicでなくてはならなかった。

 staticは、このメソッドがインスタンス(クラスからつくられたオブジェクト)に属するのではなくクラスに属することを示す。mainメソッドはstaticでなくてはならなかった。staticを省略すると、インスタンスに属するメソッドになる。

 voidは返り値の型の指定で、mainメソッドが値を返さないことを示す。Javaではメソッドの返り値の型は必ず指定する必要がある。

 かっこの中の「String[] args」はmainメソッドの仮引数の記述だ。実行時に指定された複数のコマンドライン引数をString型の配列で受け取る。Hello worldのような簡単なプログラムの実行時にコマンドライン引数を指定するとは考えにくいが、Javaの仕様上はこの記述も省略できなかった。