Como converter saída de função em Unidade com Kotlin
Tenho problemas com uma função no Kotlin que deve retornar a unidade, mas devido ao uso de outra função retornando um booleano, há uma incompatibilidade de tipo.
Aqui está um exemplo artificial:
fun printAndReturnTrue(bar: Int): Boolean {
println(bar)
return true
}
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}
Aqui, eu realmente não me importo com o fato de queprintAndReturnTrue
retorna um booleano. Eu só quero que foo realize operações de efeito colateral. Mas o compilador adverte sobre uma incompatibilidade de tipos: meuelse
deve retornar umUnit
valor.
Existe uma boa maneira de converter um valor paraUnit
?
As soluções mais simples que vejo são:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> {
printAndReturnTrue(bar)
Unit
}
}
ou:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> eraseReturnValue(printAndReturnTrue(bar))
}
fun eraseReturnValue(value: Any) = Unit
Ou eu uso o formulário completo da função:
fun foo(bar: Int): Unit {
when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}
}
Estou certo de que existem algumas maneiras idiomáticas de fazer isso (ou é o último exemplo?), Mas por enquanto não as encontrei.