Realizando a sobrecarga com Named Parameter do Kotlin
No primeiro curso de Kotlin da Alura, vimos que o Kotlin nos permite realizar a sobrecarga de construtores de uma maneira simples e poderosa. Um exemplo de implementação seria para a classe Produto
:
class Produto(
nome: String = "",
descricao: String = "",
quantidade: Int = 0)
Com cada property sendo inicializada, somos capazes de criar um produto das seguintes maneiras:
val produtoVazio = Produto()
val tv = Produto("TV")
val camiseta = Produto("Camiseta", "Cor preta")
val refrigerante = Produto("Refrigerante", "Guaraná", 100)
Repare que criamos diversos produtos com características peculiares:
- Um produto com os valores padrões;
- Uma TV sem descrição ou quantidade;
- Uma camiseta de cor preta mas sem quantidade;
- Um refrigerante sabor guaraná e com 10 quantidades
Até o momento nenhuma novidade, mas suponhamos que é necessário criar um produto que tenha apenas um nome e quantidade, com a nossa amostra inicial, teríamos o seguinte resultado:
val chocolate = Produto("Chocolate", "", 50)
Repare que o nosso produto não tem nenhuma descrição, mas, ao mesmo tempo, não somos capazes de criar 50 chocolates da seguinte maneira:
val chocolate = Produto("Chocolate", 50)
Pois, como segundo parâmetro, precisamos enviar uma descrição! E agora?
Utilizando o named parameter para sobrecarga
No Kotlin, além da abordagem de mandar os parâmetros de acordo com a ordem na qual foram declarados, somos capazes de identificar qual parâmetro enviamos por meio de uma label, por exemplo, queremos enviar apenas o nome e a quantidade, logo, podemos indicar da seguinte maneira:
val chocolate = Produto(nome = "Chocolate", quantidade = 50)
Desta maneira, conseguimos enviar os parâmetros com a ordem que desejarmos, portanto, podemos até mesmo declarar esse mesmo produto da seguinte maneira:
val chocolate = Produto(quantidade = 50, nome = "Chocolate")
Esse recurso é conhecido como Named Parameter, como podemos ver, a ideia dele é permitir uma melhor legibilidade no envio de parâmetros, seja via construtor ou funções, e também, possibilitar uma sobrecarga de construtor bem poderosa que nos permite enviar parâmetros sem se preocupar com a ordem.
Para saber mais
No exemplo inicial, utilizamos valores padrões apenas nas properties do construtor primário, porém, esse recurso é disponível para parâmetros de funções também!
Isso significa que podemos criar funções com parâmetro opcionais! Por exemplo:
fun mostraSomaEmTexto(n1: Int, n2: Int, mensagem: String = "Total da soma: ") {
val mensagemCompleta = mensagem + (n1 + n2)
print(mensagemCompleta)
}
Se chamarmos essa função da seguinte maneira:
mostraSomaEmTexto(n1 = 15, n2 = 22)
Chamando a função desta maneira, temos o seguinte resultado Total da soma: 37
. Porém, se enviarmos o parâmetro de mensagem, podemos modificar a saída padrão:
mostraSomaEmTexto(n1 = 15, n2 = 22, mensagem = "Resultado: ")
Com essa chamada a saída desta função fica da seguinte maneira "Resultado: 37”
. É válido lembrar que essa foi uma amostra simples, porém, abre portas para diversas possibilidades que deixarei a sua imaginação tomar conta ;)
Conclusão
Neste post vimos que além de utilizarmos valores padrões nos parâmetros, somos capazes de identificar o valor que desejamos enviar por meio do Named Parameter que também possibilita mais opções de sobrecarga, como por exemplo, enviando os parâmetro na ordem que desejar.
E que tal aprender mais sobre Kotlin? Na Alura temos cursos Desenvolvimento mobile com Kotlin, onde você vai aprender desde o princípio da linguagem, como declarar classes, variáveis e funções, como também, assunto mais avançados como Higher-Order Functions, Delegated Properties e muito mais!