Funções Get, Set e Field

Funções Get, Set e Field

Observação: O arquivo utilizado neste conteúdo que fala sobre as funções get, set e field é o 4-getter-setter-field.kt.

Pronto para mais um conteúdo?

Função GET

O que você acha de criar uma função personalizada sempre quando você tenta acessar um atributo de uma classe?

Em conteúdos anteriores, nós vimos o quão fácil é fazer isso, bastando apenas seleciona-lo com o ponto, após instanciarmos a classe:

class Pessoa(){
var nome: String = "Micilini"
}

...

val pessoa: Pessoa = Pessoa()

val nomePessoa = pessoa.nome//Aqui estamos selecionando o atributo nome 

No Kotlin, nós podemos criar uma função chamada get, de modo a não só retornar o atributo, como também realizar algumas operações a mais:

class PessoaUm{
var saldo: Int = 258
get(){//OBS: Este atributo é referente ao 'saldo'
println("Acessando o Saldo")
return field//Field referência o atributo e retorna (se digitar return saldo, fica um loop infinito com o println acima)
}
}

...

//Getter: Função padrão da classe que é capaz de retornar um determinado atributo
var pessoaSaldo: Int = PessoaUm().saldo//Quando acessamos o "saldo", ele possui um get personalizado, logo o retorno é feito por ele, não só retornando o saldo como também mostrando uma mensagem personalizada
println(pessoaSaldo)//Retorna: 258 e ainda mostra a mensagem no console: "Acessando o Saldo"

Com isto, cabe a você, se pretende retornar o conteúdo daquela variável ou qualquer outro conteúdo.

Lembrando que o retorno se dá sempre pela variável chamada field, e não pelo nome do atributo, ok?

Função SET

Agora que tal realizar o mesmo procedimento sempre quando você tentar atribuir um determinado valor a um atributo existente dentro da classe?

Isso pode ser feito via função set, observe:

class PessoaUm{

var idade: Int = 44

var saldo: Int = 258
get(){//OBS: Este atributo é referente ao 'saldo'
println("Acessando o Saldo")
return field//Field referência o atributo e retorna (se digitar return saldo, fica um loop infinito com o println acima)
}
set(value) {//OBS: Este atributo é referente ao 'saldo'
println("Atribuindo ao Saldo")
field = value//usamos o field de novo com a variável value
}
}

...

//Setter: Função padrão da classe que é capaz de setar um determinado valor a um atributo
var pessoaMicilini = PessoaUm()
pessoaMicilini.saldo = 18522//Esta forma, obrigatoriamente será processada pela função set, que não só irá setar como retornar a seguinte mensagem no console: "Atribuindo valor"
println(pessoaMicilini.saldo)//Retorna 18522 e ainda mostra a mensagem no console: "Acessando valor"

Lembrando que a variável field também se faz aqui presente, ok?

Abaixo do atributo saldo na classe PessoaUm, você viu que declaramos duas funções, uma chamada get e outra chamado set.

Quando fazemos isso, o Kotlin já entende que esse get e esse set se referem ao atributo saldo!

Diferente de quando tentamos modificar e acessar o atributo idade, que não possuem um get/set atrelado a eles

O ponto bom é que por meio das funções set e get, podemos fazer operações a mais quando selecionamos ou atribuímos valores aos nossos atributos.

Recuperando e Atribuindo valores diferentes

Anteriormente você viu que a variável field retorna o valor do atributo saldo.

Mas e se quisermos recuperar um valor diferente, ou quem sabe atribuir outro valor?

Simples, basta apenas que você não faça nenhuma referência a variável field:

var saldo: Int = 258
get(){
println("Acessando o Saldo")
return 852//Aqui estamos retornando 852 em vez do valor real, que é 258
}
set(value) {
println("Atribuindo ao Saldo")
field = 1234//Aqui estamos atribuindo 1234, em vez do valor definido pelo desenvolvedor
}

Conclusão

Neste conteúdo você aprendeu a criar funções capazes de retornar e atribuir valores personalizados aos nossos atributos das nossas classes.

Até o próximo conteúdo 😄

Criadores de Conteúdo

Foto do William Lima
William Lima
Fundador da Micilini

Inventor nato, escreve conteudos de programação para o portal da micilini.

Torne-se um MIC 🤖

Mais de 100 mic's já estão conectados na plataforma.