同じタイプの変数を配列にまとめることの利点JavaTips 〜Javaプログラミング編

» 2006年12月20日 10時00分 公開
[平野正喜@IT]

 Javaではint型やdouble型などの変数は基本型として扱われますが、配列にするとオブジェクトとして扱われます。基本型の変数をメソッドのパラメータにした場合、値渡しとなるため、値のコピーが実行され、コピーした値を変更しても元の値を変えることはできません。これに対して、オブジェクトの場合は参照渡しですので、値のコピーではなく参照が渡され、参照を用いてパラメータの値を変更することもできますので、処理効率が上がります。

 よって、複数の同じタイプの変数を受け渡す場合、変数ごとの意味にこだわらずに、1つの配列にして扱うと、モジュール強度が高く効率の良いメソッドになります。

 一例として、直方体の幅(x)、高さ(y)、奥行き(z)を得て、体積(v)と表面積(a)を返すメソッドを考えます。戻り値が2つありますので、広域変数を使いたくなければ、メソッドを分割するか、戻り値を構造化(クラス化)するなどの工夫が必要です。メソッドを分割する方法を用いると、下記のようなプログラムになります。

戻り値が2つあるのでメソッドを分割した冗長なプログラム 戻り値が2つあるのでメソッドを分割した冗長なプログラム

同じタイプの変数を配列にまとめることで効率化

 このプログラムを改良して、直方体の幅、高さ、奥行き、体積、表面積を1つの配列にして扱ってみましょう。配列はオブジェクトですので、参照渡しとなり、参照を用いてパラメータの値を変更することができますので、戻り値の明示が不要になります。

受け渡す値を1つの配列にしたシンプルなプログラム 受け渡す値を1つの配列にしたシンプルなプログラム

 なお、配列の添字による表記が分かりづらいと感じられる場合は、Javaのクラスライブラリによく見られるように、表意的な定数を用いるとよいでしょう。例えば、直方体の幅をDX、高さをDY、奥行きをDZ、体積をDV、表面積をDAとして表すと、以下のようになります。

受け渡す値を1つの配列にしたプログラムを表意的な定数を用いて改良 受け渡す値を1つの配列にしたプログラムを表意的な定数を用いて改良

 改良前のプログラムの可読性を損なわずに、処理の効率化ができます。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。