【コラム】
さて、今回以後しばらくの間は、EoDに焦点をあててJavaを紹介していく予定だ。EoDは、Javaによるプログラミングをもっと簡単にしていこうという取り組みで、J2SE 5.0ですでに多くのEoDが実現されている。その中からまずは、Autoboxing/Unboxing機能を取り上げたい。
Javaプログラミングで面倒だといわれていたことに、整数や実数などの基本データ型(プリミティブ型)を、コレクションフレームワークで直接扱えないということがある。コレクションフレームワークとは、さまざまなオブジェクトの入れ物を集めたもののことで、Javaの場合はjava.utilパッケージにまとまっている。
このコレクションフレームワークが使えるとなにかと便利である。データを追加するだけで自動的に整列されたり、検索ができたりと、重宝する。プログラミング中で使いたくなることが多いのだ。当然、整数だったり実数だったりといったものもコレクションフレームワークで扱いたくなる。
しかし、整数や実数といった値をコレクションフレームワークで扱いたいと思ったら、いったんそれらを変換してやらないといけない。なんでそんなことが起るかといえば、Javaが基本的に2種類の型を持っているからである。
Javaには、大きく分けて基本データ型とオブジェクト型という2つの型がある。
基本データ型というのは、byte・short・int・long・float・double・char・booleanという型のことで、数値や文字を表すために用いられる。入れ物としての大きさが定められていて、入れ物としての機能だけしかなく、メソッドを持ったりといった機能はない。
逆に、オブジェクト型は、オブジェクトを保持している変数の型のことで、生成されるオブジェクトによってその振る舞いを変える。
Javaはオブジェクト指向という考えにのっとって設計されたプログラミング言語である。純粋なオブジェクト指向言語であれば、すべてのデータをオブジェクトとして扱えるように設計するべきだが、Javaはそうはなっていない。これはJavaが開発された背景に影響されるところが多いのだが、ここでそれを云々するのはやめておく。結果からいえば、そのように設計したことで、多くの開発者の心を奪うことができたわけだ。
Javaが発表された当初、人気が高まった背景の一つにはこの基本データ型がある。基本データ型は、C/C++言語のそれと同じようなもので、そうしたプログラマにウケがよかったのである。書き方も似ているから、C/C++のように基本データ型を使ってプログラムが作成できるということで、プログラマが比較的すんなりとJavaを受け入れることができたわけだ。
Javaは、基本データ型をオブジェクト型に対応させたByte・Short・Integer・Long・Float・Double・Character・Booleanというクラスを用意している。つまり、基本データ型を引数に与えてラッパオブジェクトを生成して、それを使うように、ということだ。
基本データ型のおかげで、プログラマ獲得の門戸を広げたJavaだが、実際にプログラミングを行うようになると、基本データ型とオブジェクト型という2つの型があることで、なにかと面倒なことがあることもわかってきた。冒頭で例を挙げたが、基本データ型とオブジェクト型の間で、さきほどのラッパクラスを使ってデータ変換をおこなう必要があるわけだ。
変換が手間だということ以外に、実はもう一つの懸念がある。基本データ型が受け入れられた理由の一つに実行速度がある。基本データ型は処理が高速なのである。Javaに限ったことでもないが、オブジェクトの生成には時間(生成コスト)がかかる。なるべく余計なオブジェクトを生成しないというのは、高速なJavaプログラムを組む上での鉄則の一つだ。
しかし、基本データ型をラッパオブジェクトに変換するとなると、その都度オブジェクトを生成することになる。これはせっかく基本データ型を使っているというのに、実行速度が遅くなりかねないことを意味している。実は今回のEoDでは、変換における処理コストの問題は解決していない。変換の手間の問題は解決がはかられている。これは注意しておかなければいけない点だ。
こうした面倒なところを、もっと簡単にできるようにしましょうというEoDが、Autoboxing/Unboxing機能だ。端的にどういうことができるようになるかといえば、リスト2のようなソースコードが記述できるようになる。
基本データ型であるintと、オブジェクト型であるIntegerは、それぞれ違う型なので、値を代入するには、まず変換をしてやらなければならない。
Autoboxing/Unboxing機能というのは、その変換を自動的にやってくれる機能なのだ。この機能が使えると、整数や実数を、あたかもオブジェクトのようにコレクションフレームワークで扱えるようになる。これは思った以上に便利だ。
次回はこのAutoboxing/Unboxing機能についてもう少し詳しく見ていくことにする。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |
|
鍼灸(しんきゅう)師が教える。オフィスで口臭予防ツボ・ベスト3 [17:00 5/27] キャリア |
|
[梶浦由記]米「アニメ・エキスポ」に2度目の参加決定 [17:00 5/27] ホビー |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第107回 今回のお題は…「chemical」 [17:00 5/27] キャリア |
|
[乃木坂46]キャプテン桜井が“ライバル”AKB総選挙予想 1位まゆゆ、2位はさしこ、3位たかみな [16:58 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。