Kotlinには、ある条件を満たさないときだけ値を返す便利な関数takeUnless
があります。takeIf
の逆の動作をするもので、特定の値を除外したいときや、条件に合わないデータだけを通したいときに役立ちます。
基本的な使い方
Kotlin
val input = 10
val result = input.takeUnless { it < 5 }
println(result) // 出力: 10
- 条件
it < 5
がfalseなので、値はそのまま返ります。 - 条件がtrueなら、
null
が返されます。
条件に合った場合(nullになる)
Kotlin
val input = 3
val result = input.takeUnless { it < 5 }
println(result) // 出力: null
3
はit < 5
を満たしているため、除外されてnull
になります。
takeIfとの比較
Kotlin
val value = "kotlin"
val a = value.takeIf { it.startsWith("k") } // 条件を満たす → "kotlin"
val b = value.takeUnless { it.startsWith("k") } // 条件を満たす → null
takeIf
: 条件を満たすときだけ値を返すtakeUnless
: 条件を満たさないときだけ値を返す
実用例:バリデーションで不正な値を除外
Kotlin
fun processAge(age: Int?): String {
return age
?.takeUnless { it < 0 || it > 120 }
?.let { "年齢: $it" }
?: "不正な年齢です"
}
println(processAge(30)) // 年齢: 30
println(processAge(150)) // 不正な年齢です
まとめ
関数名 | 使いどころ |
---|---|
takeUnless | 条件を満たさない場合のみ値を返す |
takeIf | 条件を満たす場合のみ値を返す |
?.let | nullを排除して安全に処理する |
takeUnless
は、否定条件を扱う場面でコードの可読性を高めてくれる便利な関数です。特にバリデーションやフィルタリング処理などで重宝します。if文で書きがちな処理を1行で簡潔にまとめたいときに、ぜひ活用してみてください。