2行でいうと
! は読みにくい。
代わりに .not() を使おう。
! は読みにくい
例えば Double 型の変数 number の値が NaN でないかどうかを判定する場合を考える。
普通は次のように書くだろう。
if (!number.isNaN()) {
TODO()
}
しかし ! は視認性が悪いし
if (!illegal) {
TODO()
}
メソッドチェーンで処理が前から後ろに流れるように書いても
最後に処理が先頭に戻ることになり読みにくい。
if (!number.roundToInt().toString(16).contains('0')) {
TODO()
}
.not() を使おう
Kotlin では演算子をオーバーロードすることができる。
! 演算子をオーバーロードする場合であれば次のように
not オペレーター関数をオーバーロードするというような書き方になる。
!演算子をオーバーロードする例
object Left
object Right
operator fun Left.not() = Right
operator fun Right.not() = Left
オペレーター関数は普通の関数と同じように呼び出すことができる。
それを使うとこのように書くことができる。
if (number.isNaN().not()) {
TODO()
}
これで視認性もよく、流れるように読み書きできるようになった。
おまけ
次のような関数を定義しておくと
fun not(boolean: Boolean): Boolean =
boolean.not()
inline fun not(predicate: () -> Boolean): Boolean =
predicate().not()
inline fun <T> T.not(predicate: T.() -> Boolean): Boolean =
predicate().not()
次のような書き方ができる。
if (not(number.isNaN())) {
TODO()
}
if (not { number.isNaN() }) {
TODO()
}
if (number.not { isNaN() }) {
TODO()
}
場合によってはこの方が読みやすいこともあるだろう。
/以上