takeUnlessで条件に一致しないときだけ値を取得する方法

Kotlin
記事内に広告が含まれる場合があります

Kotlinには、ある条件を満たさないときだけ値を返す便利な関数takeUnlessがあります。takeIfの逆の動作をするもので、特定の値を除外したいときや、条件に合わないデータだけを通したいときに役立ちます。


基本的な使い方

Kotlin
val input = 10

val result = input.takeUnless { it < 5 }

println(result) // 出力: 10
  • 条件it < 5falseなので、値はそのまま返ります。
  • 条件がtrueなら、nullが返されます。

条件に合った場合(nullになる)

Kotlin
val input = 3

val result = input.takeUnless { it < 5 }

println(result) // 出力: null
  • 3it < 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条件を満たす場合のみ値を返す
?.letnullを排除して安全に処理する

takeUnlessは、否定条件を扱う場面でコードの可読性を高めてくれる便利な関数です。特にバリデーションやフィルタリング処理などで重宝します。if文で書きがちな処理を1行で簡潔にまとめたいときに、ぜひ活用してみてください。

タイトルとURLをコピーしました