Realizando a sobrecarga com Named Parameter do Kotlin

Realizando a sobrecarga com Named Parameter do Kotlin
Alex Felipe
Alex Felipe

Compartilhe

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:

  1. Um produto com os valores padrões;
  2. Uma TV sem descrição ou quantidade;
  3. Uma camiseta de cor preta mas sem quantidade;
  4. 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.

Banner da Escola de Mobile: Matricula-se na escola de Mobile. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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!

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Mobile