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 😄