With

Observação: O arquivo utilizado neste conteúdo que fala sobre dataclass é o 7-with.kt.

Pronto para mais um conteúdo?

O que é o With?

Em estudos anteriores vimos que é possível instanciar nossas classes, de modo a chamar nossos métodos da seguinte forma:

class PessoaDois(val anoNascimento: Int, val nome: String){//Aqui temos uma classe normal, com dois atributos (anoNascimento, nome) e dois métodos (acordar e dormir)
fun acordar(){
println("Acordando...")
}
fun dormir(){
println("Dormindo...")
}
}

...

val pessoaCriadaParaExecucaoDeTestes = PessoaDois(1999, "Micilini Roll")
pessoaCriadaParaExecucaoDeTestes.acordar()
pessoaCriadaParaExecucaoDeTestes.dormir()

Observe o quão grande é o nome daquela variável que armazena a instância da classe PessoaDois, enorme não é mesmo?

Com o comando with, nós podemos passar o nome dessa variável e chamar todos os métodos que acharmos necessário, sem a necessidade de ficar repetindo o nome da variável toda hora, observe:

with(pessoaCriadaParaExecucaoDeTestes){
this.acordar()
this.dormir()
acordar()//Também podemos chamar sem o this
dormir()
println(anoNascimento)//Chamando atributos
}

Com o With conseguimos chamar os métodos da classe dentro de um bloco, de modo a referenciar nossa variável por meio do this (Como também podemos fazer sem ele).

Isso ajuda a leitura e organização de código quando temos nomes muito grandes.

É importante ressaltar que a funcionalidade é a mesma, o que muda mesmo é a forma como organizamos nosso código.

Convenhamos, é muito mais fácil fazer isso:

with(pessoaCriadaParaExecucaoDeTestes){
this.acordar()
this.dormir()
}

Do que isso:

pessoaCriadaParaExecucaoDeTestes.acordar()
pessoaCriadaParaExecucaoDeTestes.dormir()

Conclusão

Neste conteúdo você aprendeu a como chamar métodos e acessar atributos da nossa classe por meio do comando with.

Até o próximo conteúdo 😃