見出し画像

Retro-gaming and so on

Javaを勉強してる

実はここしばらくJavaを勉強してる。
Javaの印象と言うのは、ユーザーはフツーのマトモな人間が多い。けど、言語として見ると、書くのが長ったらしくて(※)、ハッキリ言って敬遠してたのだ。
良くある入門用の、Hello Worldプログラムを見てみよう。
例えばPythonだとこれで終わり、だ。

# Python
print("Hello, world!")

大好きなSchemeだとこう。

;; Scheme
(display "Hello, world!")

Common Lispだとこう。

;; Common Lisp
(format t "Hello, world!~%")

Rubyだとこう。

# Ruby
puts "Hello, world!"

Haskellだとこう。

{- Haskell -}
main = putStrLn "Hello, World!"

ところが、C辺りになると若干長くなってくる。

/* C */
#include <stdio.h>
#include <stdlib.h>

int main(void) {
 puts("Hello, world!");
 return EXIT_SUCCESS;
}

PascalもC程ではないが長い。

(* Pascal *)
program Hello;
begin
 writeln('Hello, world!');
end.

そしてJavaだ。何だこりゃ、って言う程長い。

// Java
public class Hello {
 public static void main(String[] args) {
  System.out.println("Hello, world!");
 }
}

単に"Hello world"って出力するだけにしたら長すぎる。あたまおっかしいんじゃねぇの?って言う程長い。
Javaの最大の問題、ってのはフツーの関数が無い辺りである。C言語で言うmain関数までオブジェクト指向で書く必要があって、要クラスなのだ。
オブジェクト指向自体がメンドくせぇのに全面それで書け、ってのは頭痛しかない。いやマジで。
著名なLispハッカー、ポール・グレアムが次のような事を書いている

私自身の感覚としては、オブジェクト指向プログラミングは時には 有用なテクニックであるが、書かれる全てのプログラムがそれでなくちゃいけない なんていうものじゃない。新しい型を自分で定義できることは必要だけれど、 全てのプログラムを新しい型の定義として書かなくちゃならないってことはないだろう。 

これは明らかにJavaに対しての当てこすりである。
とにかくコードがオブジェクト指向のせいで長くなる、ってのがJavaの欠点であり、IDE無しでは書けない言語である。結局EclipseとかNetbeans(の自動補完)頼りのプログラミング言語なのである。

僕は基本的にはオブジェクト指向は嫌いである。が、そろそろそれも克服せんと、って気になってきた。
そうすると、今だとC++やC#もあるが、オブジェクト指向の雄、と言えばやっぱJavaでしょう、ってんで遅まきながらJavaを勉強しだした次第である。
本当はC#にもかなり興味があったんだけど、
  • C#の良い入門書ってのを知らない(これはVBも含め、Microsoft系言語に良く出てくる問題である)。
  • LinuxのMonoが、入れてるScheme処理系と衝突して使いモンにならない。
と言うので見送った。
いや、Javaと違って、C#は現在は国際的な標準規格もあるし(Ecma 334)、最近だとそれが走る仮想マシンの標準仕様も出来たみたいなんで、今後ますます伸びるだろうから勿体無いんだけどね。動的型付け言語の雄がPythonだとしたら性的静的型付け言語の雄は間違いなくC#だろう。でもLinuxで走らせるのに問題生じる以上仕方がないのだ。
Javaは静かに人気が落ちている。教えて!gooでもJavaに関する質問は往年に比べると極端に減ってる。
Javaの不人気の一番の理由は、オープンソース支持者等がSun MicrosystemsがOracleに買われたせいで離れていったのが理由だろう。Oracleはオープンソース界隈ではウケが悪い。Javaの父も去ってしまった。
今後Javaは増々人気が無くなっていくだろうし、Javaを学ぶのは今しかチャンスがないのだ。

取り敢えずボチボチとスッキリわかるJava入門(第2版)を進めている。古本だがこれで良い。で、はじめてみると結構楽しくなってきた。
しかし、同時にJava、と言うプログラミング言語は、個人で個人の為に学ぶのもツラい言語ではあるんだな、とか思いながらやっている。基本的にこの言語は、どう考えても多人数で大規模開発を行う為に設計されたプログラミング言語である。一人でスクリプト書くには向かない言語なのだ。
例題とか演習問題とかやっても、そこらじゅうクラスファイルで溢れてしまう。こういう性質は多人数開発向けだろう。Aさんがあれを作ってBさんがこれを作ってる、みたいな。人が書いたクラスを継承して新しいクラスを作る、って事に関しては良く考えて作られてるのだ。逆に言うと、個人で使うにはオーバースペック、それがどうやらJavaらしい。

あと、スッキリわかるJava入門(第2版)の例題は気が効いてるが、後半に入ると、同時にうーん、って思うような例題ばっかになってる。個人的には、だが。
オブジェクト指向の例として、良くありがちな「図形の面積計算させるクラスを作ってオーバーライド」とか、「銀行口座のクラスを作る」なんてのはやってない。それは良い事なんだけど、題材がRPGモドキなのだ。目の付け所は良いと思う。
実際、テーブルトップRPGのルールブックとか読んでも確かにオブジェクト指向なら上手く実装出来そうな題材なのである。出てくるキャラクタ、モンスターなどは内部にいろいろとデータがある。こういう場合は継承していろいろと作っていった方が良い、ってのは良く分かるのだ。非常に良い題材だ。
かと言ってそんなに本格的でもなく、なまじテーブルトップのルールブックなんかを知ってるので、実装内容に対して「しょぼッ!」とか思ってしまうんだな(笑)。いや、そんなコマンドにならんだろ、みたいなツッコミをどうしてもしてしまう(笑)。
要するにその辺が「RPGを無理矢理Javaの説明の為に歪めて使っている」ってどうしても感じてしまって、それは著作者のせいじゃなく、あくまで僕の責任なんだけど、う〜ん、とかなってしまったりするのだ(笑)。ああ、そこはJava自体は関係ねーな(笑)。

ま、いずれにせよ、そこそこ楽しく勉強してるトコである。

※: ある程度一つのプログラミング言語に慣れると他のプログラミング言語のプログラムは、書けはしなくても読めるようにはなるもの、である。個人的にも、最初Cは書かんでもLispの知識だけである程度読めるようにはなった。ある程度の訓練は必要ではあるが。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事