雑談

JavaScala

数ヶ月前から Scala を勉強し始めた。
Java にはないたくさんの簡潔で便利な記述に歓喜した。


でも僕が歓喜したものっていうのは

List list = new ArrayList();

val list = List

って書けることだったり、

BufferedReader br = new BufferedReader(new FileReader("test.txt"));
String line = "";
while((line = br.readLine()) != null){
    System.out.println(line)
}

でやってたことを

val list = scala.io.Source.fromFile("test.txt").getLines.toList
list.foreach(println)

で書けるようになって楽になったなぁって程度のモノに過ぎなかった。


つまり、ただ便利なライブラリやシンタックスシュガーがあるってだけで根本の言語仕様がどうって話ではなかった。
便利なライブラリが標準で備わってるかどうかって結構どうでもいいと思った。
自作だろうがApache commonsだろうがimportして使えばいいだけだから。

そして言語仕様の視点で言語を見たときに、JavaとScalaで好きだと思える点がそれぞれ見えてきた。
いや、そこまで深くそれぞれの言語を知ってるわけではないから見えるまでいってないけど考えるようになった。

冗長なJava

実はこれらのことを考えるきっかけとなったものがあった。
「androidアプリ開発」
最近色んな人がandroidアプリ開発をきっかけに本格的にJavaに触れだした。
それによって「Javaは冗長だ」「だるい」「IDE前提の言語」だという意見を頻繁に聞くようになった。
実際僕もPHPやScalaを触るようになってそう思うようになっていた。
(「IDE前提の言語」について言えば、eclipseは実際に強力なので前提とまでは言わないけどオススメしたいという思いはある)
それからJavaの具体的に何が冗長でいけてないのかを考えるようになって、ネット上の記事を読み漁ったりした。
以下、参考になった記事

僕はこれらの記事を読んで大変感動した。
自分の中にモヤっとあるものを鋭い視点でズバッと突くkwatchさんとJava屋さんのやりとりがすごく面白かった。
両方の立場から客観的に読めた部分が多かったことも面白かった要因のひとつだった。

結論: Javaも好き

最後に挙げた id:t_yano さんの小クラス主義の話。
この記事を読んでJavaがどういう意図でクラス設計されていたかを知れた。

BufferedReader br = new BufferedReader(new FileReader("test.txt"));

こんな面倒なことをやらなきゃいけないのは言語が古臭いだけだと思ってたけどちょっと違った。
シンプルにコンパクトにクラスが作られてたからこその記述だったんだなぁって。
(良し悪しは別にして)シンプルにデザインされたそれらのクラス設計は冗長どころかある意味洗練されていたことを知った。


Javaの言語仕様の片鱗を見てJavaを再勉強したくなった。
今まで基礎文法を勉強するのに必死で言語仕様なんてほとんど考えたことなかったから。
Javaの記述って不細工で不器用だけど素直なところがあって……あたい、嫌いじゃない……


Scalaの勉強も面白くなると思う。
Javaに比べてScalaが記述量が減ったのはもうわかったしそれ自体は大歓迎。
じゃあ、それ以外のもっと根本の部分でJavaに比べて何が良くなって何を失ったの?って面に着目して勉強出来るようになった。


雑談として残しとこう。