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 promocional da Alura, com chamada para um evento ao vivo no dia 12 de fevereiro às 18h30, com os dizeres

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