nullを含む計算の理想仕様について (皆さんの考えについて意見交換をさせてください)
※web業務システム開発で使用する前提で意見交換させてください。
<質問背景(イメージ)>
とある業務システムにて、ユーザー側で簡単な四則演算を行えるシステムがあるとする。
そのシステムで例えば給与計算の四則演算の処理を下記のように記載するとする。
[基本給1] + [手当1] + [手当2] + [手当3] = [合計金額]
この場合、
200000 + 10000 + 5000 + 800 = 215800
となるとわかりやすいのですが、null(値なし / 空)が含まれる場合を考える。
一応期待としては、
200000 + 10000 + 5000 + null = 215000
となることがよいと考えている。
ですが、他のよく使われているプログラム言語ではアベンドしたり、nullになったり挙動はさまざま。
そして、四則演算に範囲を広げて考えると、少し悩ましい。
下記「本システムの挙動(予定)」のような挙動を仕様としてユーザーに公開しようとしている。
言語(例) | null + 3 | null - 3 | null * 3 | null / 3 | null + null |
---|---|---|---|---|---|
Java | NullPointerException | NullPointerException | NullPointerException | NullPointerException | NullPointerException |
javascript | 3 | -3 | 0 | 0 | 0 |
SQL(Oracle) | null | null | null | null | null |
Excel | 0 | 0 | 0 | 0 | 0 |
本システムの挙動(予定) | 3 | -3 | null | null | null |
<補足>
1)本システムはプロダクトファーストで提供するものであり「ユーザーの仕様に拠る」「要件に拠る」「人による」などの回答は今回は求めておりません。
(計算する対象によって要求が変わることは理解しています。どの方が便利そうと考えるかで意見を頂けると助かります)
2)「以前のプロジェクトではこうでした」という意見よりかは、「こうあるべきだ」「以前のプロジェクトはこうだったが、不便だったのでこうしてほしい」
「以前のプロジェクトはこうであり、こういうよいところがあったので、この仕様がはやりよいと思う」
等の意見があると嬉しいです。
3) 「nvl」や「a == null ? 0 :a;」等を各プログラム言語で書けばいかようにでも要件に合う計算ができることはわかっていますが、
標準挙動として頻度の高い利用方法をデフォルトとしたいイメージです。
不明点や質問の意図について、なにかあればお知らせください。
nullの四則演算に疑問をもった方々ふくめ
様々な方と意見交換できると嬉しいです。
<20181203 17:19追記>
**
「課題が明確ではない」「問題・課題が含まれていない」と指摘を受けたため、補足および、下記のように質問を変えます。
**
<補足>
今回提供するシステムは会社で使用する業務システムを簡単に構築できるサービスです。
オンライン版エクセル(業務特化)。
null(空欄)は許容して計算をさせたく、空欄があるたびに例外処理を記載したくない意図があります。
そのため、[基本給1] + [手当1] + [手当2] + [手当3]を nvl([基本給1],0) + nvl([手当1],0) + nvl([手当2],0) + nvl([手当3],0)
などと記載したくない意図があります。
<質問内容を明確にします>
現状下記挙動がよいかなと考えております。
null(ブランク)が含まれる足し算を行いたいことがニーズです。
(ブランクを不可 / エラーチェックにはしない前提でお考え願います。「明示的な0」と「指定しない」を区別したいなどの背景があるものという前提で質問させてください。)
そのうえで、下記挙動の場合、
言語(例) | null + 3 | null - 3 | null * 3 | null / 3 | null + null |
---|---|---|---|---|---|
本システムの挙動(予定) | 3 | -3 | null | null | null |
を考えております。
nullを「0と解釈するケース」と「nullと解釈するケース」が混ざっていることに違和感がありつつも、
実際、
[ 3 ] + [ ] + [ 5 ] = [ 8 ]
としたいが
[ ] + [ ] + [ ] = [ 0 ]
は違和感があり、
[ ] + [ ] + [ ] = [ ]
としたいニーズがあります。
**<明確な質問>
他のプログラム言語のいずれかで上記と同じポリシーの言語仕様のプログラミング言語(またはツール等)をご存知の方いましたら教えてください。
**
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/03 12:19
2018/12/03 12:22
2018/12/03 13:51
2018/12/03 13:51