No post de hoje falarei brevemente sobre funções em Kotlin e como utiliza-las para Callback de eventos.
Funções
Funções em Kotlin são o que chamamos de "First-class function", ou seja, possuem suporte para passagem de funções como argumento para outras funções, podendo atribuir a variáveis ou armazenando em estruturas de dados.
Eventos
Em um contexto assíncrono é muito comum utilizar Callback para "escutar" os eventos e assim executar algo quando esse evento for chamado. Dessa forma a maneira mais tradicional de fazer isso seria criando uma interface para o callback e ao receber a resposta da execução notificar esse callback.
O exemplo a seguir simula um usuário fazendo o pedido para um Food Delivery e ao ser notificado que o pedido foi entregue ele escreve o tipo de pedido que chegou:
class User(foodDelivery: FoodDelivery): FoodDeliveryListener {
private val delivery = foodDelivery
fun orderFood() {
delivery.order(this)
}
private fun receiveDelivery(foodType: String) {
print("Received a".plus(foodType))
}
override fun onDelivered(foodType: String) {
receiveDelivery(foodType)
}
}
class FoodDelivery() {
fun order(callback: FoodDeliveryListener) {
delay(100)
callback.onDelivered("Hamburger")
}
}
interface FoodDeliveryListener {
fun onDelivered(foodType: String)
}
Porém em um contexto simples como esse onde existe apenas uma função não precisamos criar uma interface e fazer todos esses passos, podemos resolver de uma forma mais simples utilizando o que chamamos de Closures ou Lambda.
Dessa forma no resultado final do exemplo, a função order()
vai receber como parâmetro a função onDelivered
que será implementada por quem chamar a função sem necessidade da interface:
class User(foodDelivery: FoodDelivery) {
private val delivery = foodDelivery
fun orderFood() {
delivery.order { foodType ->
receiveDelivery(foodType)
}
}
private fun receiveDelivery(foodType: String) {
print("Received a".plus(foodType))
}
}
class FoodDelivery() {
fun order(onDelivered: (String) -> Unit) {
delay(100)
onDelivered("Hamburger")
}
}
Obrigado pela atenção até aqui! Qualquer dúvida ou feedback pode entrar em contato comigo nas minhas redes sociais
Top comments (6)
brabo! no aguardo dos próximos posts
Valeuu meu mano <3
Parabéns meu rei, viva o kotlin!
brabo d+
Parabéns mano!
Valeuu mestre!