引数のうちのどれかが設定されていることを保証したいケースがあり、init
内でのバリデーションを使用してみた。
例えば下のケースだと、氏名
あるいは姓
と名
を設定してfullNameを取得できるようにしたい、みたいな状況。
class User( private val _firstName: String? = null, private val _lastName: String? = null, private val _fullName: String? = null, ) { init { require((_fullName != null) or ((_firstName != null) and (_lastName != null))) } val fullName: String get() = (_fullName ?: (_firstName?.plus(_lastName)))!! }
すべての引数がOptionalなのでUser()
という宣言もできるが、すべてnullだとエラーになるのですぐ気づける。
もしrequireがなかった場合、fullName
が空文字になったりoptionalで宣言したりする必要があり、問題特定に時間がかかるかもしれない。
初期化時点で検知できるものはrequire
あるいはcheck
を使用して早めに検知していきたい。