プログラムにおける数の扱い方の常識:プログラマーの常識をJavaで身につける(3)(3/3 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、「数」に関する常識をJavaで身に付けていきます。
数学関数を使いこなそう! [java.lang.Math]
続いて、指数関数、対数関数、平方根、および三角関数といった基本的な数値処理を実行するためのメソッドを含んでいるjava.lang.Mathクラスを見ていきます。
java.lang.Math#max
java.lang.Math#maxは、与えられた値のうち大きい方の値を返します。数学的な目的以外にも、処理の流れの中で2つの数値のうち大きい方の値を取得したい場合にも使われます。
java.lang.Math#min
java.lang.Math#minは、与えられた値のうち小さい方の値を返します。処理の流れの中で2つの数値のうち小さい方の値を取得したい場合に使われます。
java.lang.Math#abs
java.lang.Math#absは与えられた値の絶対値を返します。与えられた値が負の値である場合に、正と負を逆にした値(マイナスを取り除いた値)が返されます。
java.lang.Math#pow
java.lang.Math#powは1番目のパラメータで与えた値を、2番目のパラメータで与えた値で累乗した結果の値を返します。なお、powメソッドはパラメータとしてdouble型を与えるようになっています。
例えば、3の4乗を求めるには、下記PowSample.javaの(6)ように記載します。下記ソースコードを実行してみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これ以外にも、数学的なメソッドが多数あります。数学が苦手でない人は、いろいろ試してみましょう。
用途による型の使い分けを判断するには?
ここまで、数に関するさまざまな型やクラスを説明してきました。では、これらプリミティブ型と参照型を、あるいはさまざまな数値型を、どのように使い分けるのでしょうか?
最初に利用を検討する型は、プリミティブ型でしょう。四則演算から繰り返しの際のループ変数など、幅広い用途において利用されます。
プリミティブ型のうちのいくつかは、多くのJava仮想マシンにおいて高速に計算できます。これは、Java仮想マシンの実装次第というところもあるのですが、プログラミング言語上の型が、実際のコンピュータ上のCPUが取り扱うことができる型に、直接対応付けられていることが多いためです。
では、参照型は不要でしょうか?
確かに、プリミティブ型と参照型の間の相互変換はプログラム上の記述が面倒なうえ、性能劣化の一因になることもあるので、なるべく避けておきたいところです。しかし、プログラムの中でいずれか一方に統一してしまいたいと思っても、現実的には、単純に統一できないことが多いです。むしろ、無理に統一しようとすると、思わぬ弊害を引き起こすことがあります。
このように、「数値型をどのように使い分けるか?」は意外に難しい問題です。このため、対象とする目的によって型を使い分ける、という視点が必要になります。私たちプログラマーは、実現しようとする目的に応じて、数を扱うための型を、例えば、次のように変えていきます。
- 業務系システム開発に従事する人は、デシマル型(java.math.BigDecimal)を頻繁に扱うことでしょう。
- 科学技術計算に従事する人は、浮動小数点型を使う場合があるでしょう。一方で、高速な計算と計算精度との狭間で苦労する場面もあることでしょう。
- 処理した結果をリレーショナルデータベースに対して入出力する場合には、リレーショナルデータベース上の型との対応関係を基に、プログラミング言語上の型を決定する必要があることでしょう。
いずれにしても、最終的にはプログラミングを行うチームでの規約やプログラマーとしての自身の経験などといったものから、総合的に型の適切な使い分けを判断していくしかないものと考えます。
次回は「時間」の常識について
次回は、時間や日付けの常識についてです。java.util.Calendarクラス、java.util.GregorianCalendarクラス、java.util.Dateクラスなどを使って、プログラム上の時間の概念について学んでいきましょう。
参考文献
▼『Java言語仕様 第3版』 ピアソンエデュケーション
▼『Javaプログラミング アプリケーション編 ステップアップラーニング』 技術評論社
筆者紹介
blanco Framework(コミッタ)
伊賀 敏樹(いが としき)
ハンドル:いがぴょん
1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。
ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)
主な著書
「やさしく学ぶ基礎からのJDBC」
「Javaプログラミング[アプリケーション編]ステップアップラーニング」
Copyright © ITmedia, Inc. All Rights Reserved.