Javaを必要に駆られて、5年ほどぶりに勉強しなおしてみているが、
Javaのダメなところがちょこちょこ見つかったので、
どのようにダメなのか書いてみた。
Staticが汚い
javaに限ったことではないが、こんなコードは非常に汚いように私には見えます。
class A{
public static void main(String[] args){
Home home = new Home();
}
}
class Home{
private static count = 0;
public Home(){
count++;
System.out.println(count+"回Newされました。");
}
}
まぁ汚い、これは[Home]が[new]されるたびに[Home]が持つ[count]がカウントアップされます。
これの何が良くないかというと[Home]が[new]されるたびに処理を変えることができ、
この[Home]では[count]の値によって処理が変化することはありませんが、
これが、[count]の値が、10 の倍数の時にファイル出力する というプログラムであった時、
いつ、どの時点でファイル出力されるのか分かりにくく、
汚い。。。という文章も汚い
変数宣言が汚い
これについてはC#とPHPをメインにJavaScriptを使ってるからかもしれませんが、
import java.util.ArrayList;
class B{
ArrayList> Cints = new ArrayList>(); //これが汚い
public static void main(String[] args){
}
}
class CInt{
int i = 0;
int b = 0;
}
正直アホかと[Cints]は[ArrayList<ArrayList<CInt>>]で初期化されてるので、
[Cints]の型は当然 [ArrayList<ArrayList<CInt>>]になるのは分かるはずだが、
Javaでは[ArrayList<ArrayList<CInt>> Cints]なんて長い宣言をしなければならず、これが、
[ArrayList]の2次元であるからまだ分かりやすいけど、これが3次元で、[CInt]がもっと長いクラス名であった時、
どこに変数が書かれているのかわかりにくく、非常に汚くなる。
確かに、次のような場合はこのように書かなくてはならないのはわかるが
class C{
Parent child = new Child();
public static void main(String[] args){
}
}
class Parent{
int i = 0;
}
class Child extends Parent{
Child(){
i = 10;
}
}
そういうのはプログラマがどうすれば綺麗になるのか考えて、取捨選択すればよいだけのことで、
強制的にこの[型]を使い、これで初期化する なんて明記しなくてはならないのはコードの見易さ的に
ダサいくて、
汚い。。。。という文章もやはり汚い