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
と組み合わせると安全に使える
シンプルな条件分岐をより直感的に記述できるので、コードの可読性を向上させたいときにぜひ活用してみてください!