技術ブログを開設する
ログイン
もっと気軽にアウトプットできる技術ブログプラットフォーム

Java以外にも.NETも実装されている以下の定数について、なぜ定数が用意されているかを調べた際のメモ。

Java:BigDecimal.ZERO / BigDecimal.ONE / BigDecimal.TEN   
.NET:Decimal.Zero    / Decimal.One    / Decimal.MinusOne

結論

調べましたが、これといった明確な答えは見つかりませんでした。

ネットの見解

まず、sstackoverflowで一番評価が高かった投稿について。

Why does Java’s BigInteger have TEN and ONE as constants? Any Practical use?
https://stackoverflow.com/questions/17544151/why-does-javas-biginteger-have-ten-and-one-as-constants-any-practical-use

こちらの回答を要約すると、「使用頻度が多いから」となっており、
具体的な意見として、 BigInteger.valueOf(10) よりも可読性が高いから、
パフォーマンス(インスタンス生成時の実行時間、消費メモリ)が良いから、
ぐらいの内容しか議論されておらず、これ以上の回答はないようです。

個人的には世のJavaコードの可読性を上げるために使用頻度の高い数値だけ定数化したのではないかと思ってます。

逆に定数で導入していない言語の状況

RubyのBigDecimalに対し定数、ZERO、ONE、TENを導入してはどうか?という提案を発見しましたが、
今のところ保留扱いにされていました。(保留の理由は不明。優先度が低いから?)

https://bugs.ruby-lang.org/issues/10782#change-52557

コミュニティの好みとか文化の違い?

補足:new BigDecimal(“10”)とnew BigDecimal(10)の違い

特に違いはないですが、BigDecimal内部で持っているprecision(精度)という値がintで初期化すると
常に0が入るみたいです。

ただ、その後の演算(例えば、devideなど)に影響しないようなので、
コーディングの際には気にする必要もないのかと思ってます。(FindBugsやSonarQubeでもそういったルールはない)

強いて違いを上げるとすれば、Long.MAX_VALUE を超える値を生成する場合はStringでの初期化一択になり、
1048576のような大きい数を初期化する場合はnew BigDecimal(1_048_576)のように書けるくらい?

関連記事

この記事へのコメント

まだコメントはありません
0
勉強したことのメモ
0
このエントリーをはてなブックマークに追加