はじめに
猫は、好きな言語としてC#、嫌いな言語としてJavaをプロフィールに書いています。別に、Microsoftに愛着を持っているかというとそうでもないです。C#を触る前は、C言語のポインタの苦痛に苛まれ、逃げた先のJavaは以下の通りの理由で嫌いになり、Delphiには感銘を受けていたので、この言語が好きになったという理由の1つに上がるかもしれません。このQiitaにはたくさんの経験豊富なプログラマーさんもいるので、もしかすると同調してくれる方や嫌らしく貶してくれるくれる方もいると思うので、嫌いになった理由を書かせていただきます。
バイト配列という基本操作に苦慮する
バイト配列、1byte(8bit)のデータをいくつも並べたデータ列のことです。通常、バイトは0~255までの数値を扱います。
当然のごとく、C言語をはじめほとんどの言語ではバイト配列を簡単に扱える...はずです(経験ある言語では大体できる)
unsigned char color[3];
であったり
byte[] color = new byte[3];
であったり、
$color = [ 255, 255, 255 ]; // (ん?なんか違うきがする)
であったり、書き方は変わったりするかもしれません。でも、ちゃんと0-255までを扱ってくれる配列を作れるものです。
ところが、嫌いになった言語で、C#言語のように
byte[] color = { 126, 127, 235 };
と書きたいと思っても、Javaでは思った通りの結果は得られません。
Javaはunsigned型の定義(通称、符号無し)ができません。クラスを使うか、shortやintを使う必要があるとのことで、変換やらでいろいろ苦労し、使いたくない!って思ったわけです。
ただ、最近のJavaはもしかすると出来るようになってるよ!という反応があるかもしれません。かれこれ、10年以上触れていないので...どうなのでしょうか。
ということで、嫌いになった原因の一つであります。(まだある...)
階層+クラス=ファイル
1つのファイルに定義できるクラスは基本1つであるということ。サブクラス的なものは、たしか内蔵できたと思うのですが、基本は1つでした。クラスを作ればファイルが増える。ろくなこともしない、ただのインターフェイス的なクラスを作っても、試作クラスを作るときも....ファイル量産です。そして、階層も影響することもあって、苦痛でした(※10年前の話です)。
今もそうなのかな...。
インストールとIDEが苦痛
当時は開発にEclipseを使っていました。今はもはや主流ではないのかもしれませんが、これまたWindows殺しで、コンパイル動かすたびに死ぬという。コンソールでしなさいと言わんばかりの嫌がらせ。その前に、JDK入れるまでに死んでいた気がする...。
この頃に、Microsoft .NET Framework 1.0 がリリースされ、同時期に触っていたのですが、やはりその結果、VS最強だなぁという結論に至り、結局Java使うことなくC#のWindowsFormで遊ぶようになり、そのままDelphiのWindowsアプリ開発楽ちんすぎるスタイルやPHP、D言語等ふらつきながら言語そのものを楽しんでいたら、Javaを使うことは数年なくなりました。
Android のJava
お仕事でJavaを使うことが数年前にありました。
そう、再び byte 配列で悩まされ、Android Studio がまだなかったので、Eclipseで泣かされ、結局大っ嫌いになりましたとさ...。
まとめ
Oracleに買収され、有償化され、振り回されてるJava言語。そして様々な言語の良い点を取り入れ発展しまくる C# に...追いつこうとしてよくわからない言語仕様になってるJava...。もし、Androidでのネイティブ開発を依頼されたら、KotlinかXamarin(C#)押しでいきます。Javaはもう、お腹いっぱいです、ということで、嫌いになった原因でした。