エンジニアBLOG

2024/09/20

これからのJava入門の話をしよう

1. 前置き

今でも様々な開発現場で使われているJava。
エンジニアの仕事を通してこの言語に触れることもあるかと思いますが、学習するにはハードルが高いと感じるのではないでしょうか?
プログラムに初めて触れる方は、最初からよくわからない呪文に困惑されることでしょう。わかります。
今回はそんなJavaのHelloWorldを見る回です。
どうも、普段は業務でPython、AWS周りを担当することが多いけど、実はJavaの方が好きなタニモトです。

2. 世界のはなしをしよう

早速、JavaのHelloWorldを見てみましょう。

image

…どうしてこんなに文法が長いのか。
比較のためにPython3も見てみましょう。

image

…とてもシンプルで分かりやすい…!

3. やっぱり、ハードルが高いJava

「Hello World!」を出力したいだけなのにハードルが高い。
学ぶ側もハードルが高いが、教える側も「あー…それは後で理解できると思うのでそのまま書いといてください」と言うしかできない。
HelloWorldのような小さなプログラムでは本来必要としない機能が多いことが、学習のハードルを上げている一つの要因です。代表的なものを順番に見てみましょう。

1. classの宣言とアクセス修飾子
カプセル化するときに役立ちますが、大規模向けの構造なので、HelloWorldのような小さいプログラムでは意味がない文言ですね。

2. String[] args
mainメソッドはJavaの中でも特殊で、javaコマンドのエントリポイントとなる特別なメソッドです。String型の配列またはString型の可変長引数以外にした場合は実行時に呼び出されません。
記述は `String[] args`のほか、`String... args`でもどちらもよいですが、実行時に引数を指定しないHelloWorldでは使われることはありません。

3. static修飾子
クラスとオブジェクトのモデルの一部ですが、静的メンバーとインスタンスメンバーの違いとか、オブジェクトをインスタンス化する方法を学ぶ必要があります。

4. System.out.println
謎の呪文。
Systemクラスのstaticフィールドであるoutのprintln()メソッドに文字列リテラルを渡して…はい。
ちなみに「謎の呪文」と表現していますが、公式が「the mysterious incantation」と記載しているので私は悪くない。

4. 改善されたJavaのHelloWorld

Java 21から正しい順序で概念を学習できることを目的に整理されてきています。
2024年9月リリース予定のJava 23ではサードプレビューとして公開されているので見てみましょう。
※あくまでプレビューなので本実装ではなく、今後、追加・修正の可能性もあります。

1. インスタンスのmainメソッド
インスタンスのmainメソッドを許可するように起動プロトコルが強化されています。また、パラメータを持つ必要もなくなりました。
アクセス修飾子のprivateだけは特殊なのでそれ以外であればOKです。

image

2. 暗黙のクラス宣言
ソースファイルで暗黙的にクラスを宣言できるようにします。
クラス宣言が無い場合はObjectの匿名クラスとして扱います。

image

3. テキスト入出力関連の自動インポート
暗黙的に宣言されたクラスでは、テキスト入力と出力に役立つメソッドを自動的にインポートします。

image

※ 本機能はJava 23時点でプレビュー機能で、デフォルトでは無効になっています。次の方法で実行できます。
 1. コンパイルして実行する場合
  javac --release 23 --enable-preview HelloWorld.java
  java --enable-preview HelloWorld
 2. ソースコードランチャーを使用する場合
  java --enable-preview HelloWorld.java;
 3. jshellを使用する場合
  jshell –enable-preview

5. 最後に

Java 21以降に順次プレビュー機能が公開されているmainメソッド周りの改善で、初めてJavaやプログラミングに触れる方へ、段階的に学習できるように整備されてきました。
また、Javaに慣れている人にとっても、システムのコアになっているアルゴリズムのプロトタイプを作成する場合など、小さなプログラムを作成するのに有効な機能になっています。
もうすぐ30周年になるJavaですが、プラットフォームを選ばずプログラムを作成できるのが大きな魅力だと思います。ライブラリも豊富で、大規模なプログラムを作成ための選択肢が豊富な一方、まだまだハードルが高い言語であることに変わりはありません。

ですが、日本でも書籍や初心者でも参加しやすいコミュニティなど、学習できる機会は多いので、これを機に始めてみてはいかがでしょう。