Realizando a sobrecarga com Named Parameter do Kotlin

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

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.

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 Victor Vieira
Alex Felipe Victor Vieira

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Mobile