Skip to content

Instantly share code, notes, and snippets.

@taichi
Last active December 14, 2015 11:29
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taichi/5079626 to your computer and use it in GitHub Desktop.
Save taichi/5079626 to your computer and use it in GitHub Desktop.
「作者の気持ち」以前に、揚げ足とる相手の最新状況くらい調べろ

「作者の気持ち」以前に、揚げ足とる相手の最新状況くらい調べろ

タイトルは元エントリを改変させて頂きました。

Java6は公式アップデートの終了した古いJavaです。
その古いAPIのみを対象としてJavaを批判するのはいささかフェアでない様に思われます。

現在最新のstable releaseである所のJava7では必要な部分だけ抜粋すると以下の様に記述出来ます。

Path p = Paths.get("/path/to/file");
Files.write(p, "content".getBytes());

このコードが、殆どのユーザにとって期待通りの動作をする為には、かなり大量の前提条件がありますけども、それについては敢えて言及しません。

参考までに元エントリに書かれたPythonのコードを引用します。

file = open('/path/to/file')
file.writelines(['content'])
file.close()

名前が冗長である事以外には、特にJavaの方が劣っている部分は無い様にみうけられます。
つまり、この部分に関しては古いJavaのAPI設計がダサかったと言う話であって、
Javaが持つ型システムがダサいと言う話にはならないかと思います。

所で、Javaが大分酷い言語であるという事に関しては条件付きですが同意します。

例えば、上記のコードを動く状態にする為には、少なくとも以下の様に記述しなければならないからです。
但し、このコードはコードゴルフに代表される様なテクニックでもってより短い表現にする事は可能です。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {

	public static void main(String[] args) throws Exception {
		Path p = Paths.get("/path/to/file");
		Files.write(p, "content".getBytes());
	}
}

PythonやRubyの様なスクリプト言語では、ここまで冗長なブートストラップエントリ無しにファイルを出力する事が出来ます。
これは、Javaが単純な作業を単純なコードで記述する事を目的としたプログラミング言語ではないからです。
その様な状況では、Groovyがオススメです。

一方で、スクリプト言語でない言語であれば凡そ似たような記述になるかと思いますが如何でしょうか?

Javaの型システムが歴史的経緯によって、一見すると酷い状態である事を説明するのは大変過ぎるので、別な誰かにお願いします。

改定履歴

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment