1
resposta

retorno da função

Olá, tentei criar um código simples pra testar, parecido com mostrado na aula, mas o println sempre retorna o nome do objeto -kotlin.Unit ao invés de retornar um inteiro.

Alguém sabe explicar o motivo?

Obrigado

fun teste1(valor: (Int) -> Int){}

fun main() {

    teste1 {
         it + 1
    }.let(::println)      //kotlin.Unit

    }
1 resposta

Sua função teste1 não tem retorno declarado, então ele considera que o retorno dessa função vai ser do tipo kotlin.Unit (semelhante ao void do Java). Acredito que o comportamento que você está esperando seja algo parecido com:

fun teste1(valor: (Int) -> Int): Int{ // Definido o retorno como Int
    return valor(1) //chamada da função passada por parâmetro, que precisa de um parâmetro do tipo Int
}

fun main() {
    teste1 {
        it + 1 //Passa para o parâmetro a operação de somar 1
    }.let(::println)      //resultando no print do número 2
}

ou podemos fazer assim também:

//Definindo uma extension function de Int
fun Int.teste1(valor: (Int) -> Int): Int{
    return valor(this) 
}

fun main() {
    1.teste1 {
        it + 1 //Passa para o parâmetro a operação de somar 1
    }.let(::println)      //resultando no print do número 2

    3.teste1 {
        it + 1
    }.let(::println)      //4
}