Standard Library Utilities
Take If and Unless
Use takeIf and takeUnless to keep or discard a value.
take-if-unless
`takeIf` returns the value when a condition is true; `takeUnless` does the inverse.
Take If and Unless
TakeIfUnless.kt
Replay: real traced execution (multi-file project)
fun main() {
val stock = 3
val available = stock.takeIf { value ->
value > 0
} ?: 0
val status = stock.takeUnless { value ->
value == 0
}?.let { value ->
"stock:$value"
} ?: "empty"
println("stock=$stock")
println("available=$available")
println("status=$status")
}
fun main() {
val stock = 0
val available = stock.takeIf { value ->
value > 0
} ?: 0
val status = stock.takeUnless { value ->
value == 0
}?.let { value ->
"stock:$value"
} ?: "empty"
println("stock=$stock")
println("available=$available")
println("status=$status")
}
fun main() {
val stock = 6
val available = stock.takeIf { value ->
value > 0
} ?: 0
val status = stock.takeUnless { value ->
value == 0
}?.let { value ->
"stock:$value"
} ?: "empty"
println("stock=$stock")
println("available=$available")
println("status=$status")
}
stock ← 3, available ← 3, status ← stock:3
1fun main() {2 val stock→ 3 = 3 //@stock=0, 63 val available→ 3 = stock3.takeIf { value ->4 value > 05 } ?: 06 val status→ stock:3 = stock3.takeUnless { value ->7 value == 08 }?.let { value ->9 "stock:$value"10 } ?: "empty"1112 println("stock=$stock3")13 println("available=$available3")14 println("status=$statusstock:3")15}outputstock=3 available=3 status=stock:3
stock ← 0, available ← 0, status ← empty
1fun main() {2 val stock→ 0 = 03 val available→ 0 = stock0.takeIf { value ->4 value > 05 } ?: 06 val status→ empty = stock0.takeUnless { value ->7 value == 08 }?.let { value ->9 "stock:$value"10 } ?: "empty"1112 println("stock=$stock0")13 println("available=$available0")14 println("status=$statusempty")15}outputstock=0 available=0 status=empty
stock ← 6, available ← 6, status ← stock:6
1fun main() {2 val stock→ 6 = 63 val available→ 6 = stock6.takeIf { value ->4 value > 05 } ?: 06 val status→ stock:6 = stock6.takeUnless { value ->7 value == 08 }?.let { value ->9 "stock:$value"10 } ?: "empty"1112 println("stock=$stock6")13 println("available=$available6")14 println("status=$statusstock:6")15}outputstock=6 available=6 status=stock:6