概要
チームメンバーがnullをreturnしていたのですが、想定している挙動が分からないので他に置き換えた方がいいのではと思い、説明のために整理したメモ。
nullのreturnは、例えばこのようなコードです。
public ZonedDateTime calculationDate(ZonedDateTime acceptAt) {
if (acceptAt == null) {
return null;
}
null返り値が保守作業に与える悪影響の調査
ソフトウェアシンポジウム2013で発表があった模様。
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=229
null返り値はバグを含みやすくなる。
分析の結果,null 返り値および null チェックが,規模や作業工程の種別に関係なく頻繁に修正されることを確認した.修正頻度が高いという ことは,バグを含みやすくなると考えられるため,null 返り値および null チェックが保守作業に悪影響を 及ぼしていることを示している.
null返り値は簡易に記述できるのが利点の一方で、バグを発生させる原因として知られている。
メソッド内で満たすべき条件を満たさなかった際に null を返す記述が多数存在する (null 返り値).エラー定数 や例外処理を用いる場合に比べ,null 返り値を用いる利点は以下のとおりである.
• null は特殊な値であるため,プログラムが満たすべき条件を満たさなかったことが一目でわかること.
• 満たさなかった条件に合わせたエラーメッセージを考える必要がないこと.
• 例外処理などに比べ,簡易な記述が行えること.
null 返り値はこのように開発者の助けとなる一方で,バグを発生させる原因として知られている.null 返り値 に関連する主なバグとして,null 値参照が挙げられる.
null返り値を安易に記述してしまう前に他の記述を考えるべきとある。
これらの分析により,様々なプロジェクトにおいて,null 返り値および null チェックが保守作業に悪影響を与えて いることがわかった.そのため,開発者は null 返り値を 安易に記述してしまう前に,他の記述で置き換える事がで きないかを考えるべき,といえる.具体的には,例外処理 を用いる方法,null の代わりに適切なオブジェクト(空の 配列,特殊なクラスなど)を返す,などが挙げられる
Javaでメソッドから戻る・戻り値を戻す returnの使い方と活用方法
nullかもしれないならOptionalでreturnするのも良さそう。
https://www.bold.ne.jp/engineer-club/java-return#-nullOptionalreturn
static Optional<String> getNullable() {
# まとめ
null返り値を使ってはいけないわけではないですが、まずは他の記述に置き換えられないか考えてみないとですね!