Kotlinには、条件を満たす場合にのみ値を返す takeIf と、条件を満たさない場合に値を返す takeUnless という便利な関数があります。これらを使うことで、条件付きのデータ処理を簡潔に記述できます。
takeIfの基本的な使い方
takeIf は 指定した条件を満たす場合にのみ値を返す 関数です。
Kotlin
val number = 10
val result = number.takeIf { it > 5 } ?: "条件を満たしていません"
println(result) // 出力: 10ここでは、number が 5 より大きいため、そのまま 10 が返されます。一方で、条件を満たさない場合は null になるため、?: 演算子を使ってデフォルト値を指定できます。
takeUnlessの基本的な使い方
takeUnless は 指定した条件を満たさない場合に値を返す 関数です。
Kotlin
val number = 10
val result = number.takeUnless { it > 5 } ?: "条件を満たしていません"
println(result) // 出力: 条件を満たしていませんtakeIf の逆で、条件を満たさない場合に値が返るため、「この条件に該当しないものを取得したい」 というケースで役立ちます。
takeIfとtakeUnlessの活用シーン
- バリデーションの簡略
Kotlin
val email = "test@example.com"
val validEmail = email.takeIf { it.contains("@") } ?: "無効なメールアドレス"
println(validEmail) // 出力: test@example.com- ログ出力の最適化
Kotlin
val debugMode = false
debugMode.takeIf { it }?.let { println("デバッグモードが有効") }
// 条件を満たさないため、何も出力されない- 特定条件のデータ抽出
Kotlin
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.mapNotNull { it.takeIf { it % 2 == 0 } }
println(evenNumbers) // 出力: [2, 4, 6]まとめ
takeIfは 条件を満たす場合に値を返すtakeUnlessは 条件を満たさない場合に値を返すnullになる場合があるので、?:やletと組み合わせると安全に使える
シンプルな条件分岐をより直感的に記述できるので、コードの可読性を向上させたいときにぜひ活用してみてください!

