2014年10月23日木曜日

マルチリンガルになりたい!① Java編

徒然なるままに、日暮らし電子箱(ぱそこん)に向かいて、
画面に映る由無し事を、そこはかとなく書きつくれば、
怪しうこそ物狂おしけれ

吉田兼好「徒然草」より(嘘)


■ ごあいさつ
お初にお目に(?)かかります。A-AUTO 50開発チームの本田と申します。
A-AUTO 50のコアな部分からWebサイトに至るまで、チーム内でも比較的多岐に渡る開発に携わっております。


■ ところで・・・
今の世の中はまさにグローバルな時代と言えます。もはや英語は話せて当たり前、中国、フランス、ドイツ、ロシア語など、三つ以上の言語を操れる人も徐々に増えつつあります。
そんな時代にあってもかたくなに日本語しか話さない人間もいます。私です。


■ 本連載について
現実ではモノリンガルな私でも、せめてプログラマとしてはグローバルに、マルチリンガルに生きてみたいものです。そんな夢を込め、本連載では様々なプログラム言語を取り上げ、その特徴や豆知識を紹介してみようと思います。
普段使い込んでいる言語からとりあえず触ってみた言語まで、さまざまな言語を扱う予定なので乞うご期待!

さて、記念すべき第一回で扱う言語は・・・「Java」です。


今の仕事をする上で、Javaは最も使用頻度の高い言語となっています。
前置きが長い割に見慣れた言語が出てきて拍子抜けした方もいそうですが、今一度この言語について見直してみましょう。


■ Javaという名前について
この言語、有名な割に名前の由来が諸説あってはっきりしない言語なんですね。
有力な説としてはコーヒーのブランド由来だとか。クラスファイルの頭4バイトが必ず0xCAFEBABEになるのを実際に目の当たりにすると、信じたくなりますね。


余談ですが、大学生時代にとあるプログラミングコンテストの運営に関わった際、Javaを使った競技の入賞者への景品として用意したのは「JAVAコーヒー」でした。


■ Javaを使う5つの理由
Javaの良いところとして、使いたくなるような理由をとりあえず挙げてみました。

① とにかく使われている
Javaの人気・使用率は、相変わらず世界的に1位を保っています。
(ソースはこことかこことか)

② マルチプラットフォーム
仮想マシンさえ入れればどこでも同じように動きます!
というほど現実は甘くは無いのですが、それでも比較的マルチプラットフォーム対応が楽な言語なのは間違いないと思います。
スクリプト言語などもプラットフォームを気にしませんが、大概はパフォーマンス面で差が出ます。

③ 安定したオブジェクト指向言語
静的型付け、型安全かつ(インタフェースを除いて)多重継承が禁止。
恐らくJava程に安全かつ安定してオブジェクト指向を扱える言語は、殆ど無いのでは?

④ 豊富な標準ライブラリ
初めてJavaのAPIリファレンスを見た時は感動したものです。
これほどに多様なライブラリが、パッケージで綺麗に整理された言語はなかなか無さそうです。

⑤ サーブレット
一つの言語で、デスクトップアプリケーションとWebアプリケーション両方に広く使われる言語というのは他に類を見ません。やろうと思えばC言語でCGIを用いたWebアプリケーションを組んだりする事はできますが・・・あまりやりたく無いですね。


■ Javaを使わない5つの理由
良いところばかり挙げるのはアンフェアなので、逆に悪いところも挙げておきましょう。

① コードが長くなる
何をするにもクラスとパッケージが絡むせいか、コード量はかなり長くなる傾向にあります。
WikipediaのHello worldプログラムの一覧を見るだけでも、モダン言語の中ではかなり長い方に思えます。

②setter, getter定義祭り
「コードが長くなる」要因の一つでもありますが、Javaを使っているとsetter・getterを大量に書きます。
Rubyのアクセサメソッド自動定義や、C#のプロパティの様な仕組みは無く、とにかく自分で書きます。(Eclipseさんがある程度手伝ってはくれますが)
え、そうなるのは私の設計が悪い?精進します・・・。

③演算子オーバーロードがない
プリミティブ型やStringは置いといて、Javaの世界はクラスとメソッド、ほぼこれが全てです。
演算子なんて軟弱な物はありません。今日も私は+演算子ではなくaddメソッドを使います。
こうしてまたコードが長くなります・・・。

④チェック例外の存在
Javaを書いていると、とにかく例外処理を書かされます。書かないとエラーになるからです。
一見これは安全な仕組みに見えるのですが、半分ぐらいはまず発生しないとか、どうでもいい例外だったりもします。
面倒なので、とりあえずprintStackTraceして終わり!という人も沢山います。
Java7からは複数例外のキャッチができたり、Closableが追加されたりして多少は楽になりましたが・・・。

⑤かゆいところに手がとどかない
上手く説明しにくいのだけれど、Javaを使ってると普通にありそうな物が無い、という事態に遭遇する事がある。
例えばFileクラスにはrenameToメソッドはあってもcopyToメソッドが無い。何故だ・・・。


■ Javaに関する(比較的)新しい動き
Javaの生まれは1995年(Wikipedia調べ)です。C言語等と比べると比較的新しい言語では有りますが、それでも「Javaは古い」「Javaはオワコン」「Javaはじきに廃れる」などという声が聞こえてくるようになりました。

まあ、現在の使用率を考えるとそう簡単に廃れる事は無さそうだとは思いますが・・・。

そんなJavaですが、黙って時代に置いて行かれたりはするつもりが無い様です。記事の締めくくりとして、比較的注目度の高いJava周りの取り組みを、二つほど取り上げておきます。

・Play Framework
昨年あたりから名前を良く聞くようになったWebフレームワークです。Ruby on Railsから大きな影響を受けています。
触った事の無い方は一度触ってみていただきたいのですが、開発生産性を上げるような仕組みが、これでもかと取り込まれています。

機能としても特に非同期IOを簡単に扱えるようになっていて、モダンWebアプリケーションの開発と非常に相性が良いと思います。

難点は、うっかりJavaではなくScalaに目覚めてしまいそうになるところでしょうか。

・Java 8
今年の3月にリリースされたJava 8ですが、かなり意欲的なバージョンとなっています。
目玉は何と言ってもラムダ式のサポートです!来年あたりには、ラムダ式を用いた新たなフレームワークが出てきて話題になったりするのではないでしょうか。Play Frameworkを超える感動もあるかもしれません。


■ 次回予告
今回は初回という事で少々張り切って書きすぎてしまいました。次回はもう少し規模を縮小してお送りいたします。
題材は今回があまりにもメジャーな言語だったので、少しマイナーなところを攻めてみる予定です。
お楽しみに!

0 件のコメント:

コメントを投稿