Aproveite o mês das
carreiras na Alura

Até 44% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

This, Getters e Setters nas classes Javascript

Rafaella Ballerini
Rafaella Ballerini

Compartilhe

Classes

A orientação a objetos com Javascript não é uma novidade, porém, enquanto várias outras linguagens utilizavam a sintaxe de classes, o Javascript continuava sem uso. Isso sempre foi um detalhe importante que incomodava alguns desenvolvedores, pois assim ficava um pouco mais difícil de migrar entre tecnologias com facilidade.

Sendo assim, a partir do ECMAScript 2015 (ES6), as classes começaram a fazer parte da linguagem. Isso não mudou ou adicionou funcionalidades, mas trouxe uma melhor organização para o código, além de entrar no padrão de outras tecnologias.

Veja a diferença:

//não utilizando a sintaxe de classes
var pessoa = {
	nome: 'Gabriela',
	sobrenome: 'Ribeiro',
}
//utilizando a sintaxe de classes
class Pessoa {
	constructor(nome, sobrenome){
		this.nome = nome
		this.sobrenome = sobrenome
	}
}
let gabriela = new Pessoa ('Gabriela', 'Ribeiro')

Imagine que você precisa isolar ou proteger de alguma forma os elementos dessas classes. O que utilizar para isso?

Banner da Imersão de IA da Alura com Google Gemini. Participe de aulas gratuitas online com certificado. Domine as inovações mais recentes da IA.

This

Imagine que você declare uma classe professor, da seguinte forma:

class Professor {
	constructor(nome, sobrenome, curso){
		this.nome = nome,
		this.sobrenome = sobrenome,
		this.curso = curso
	}
}
let joao = new Professor('João', 'Souza', 'Lógica de programação')

E dentro dessa classe você queria adicionar um método - que nada mais é do que uma função específica para ela - chamado saudação, que irá imprimir no console um “Bom dia” para esse professor.

Para isso, iremos precisar juntar as propriedades nome e sobrenome na hora de imprimir a saudação. É nesse momento que entra o this. Essa palavra vem do inglês “esse”, portanto é possível entender que seu uso é feito para direcionar essas propriedades à própria classe em questão. Da seguinte forma:

class Professor {
	constructor(nome, sobrenome, curso){
		this.nome = nome,
		this.sobrenome = sobrenome,
		this.curso = curso
	}
	saudacao(){
		console.log('Bom dia ' + this.nome + ' ' + this.sobrenome)
	}
}
let joao = new Professor('João', 'Souza', 'Lógica de programação')
joao.saudacao() //Bom dia João Souza

Mas então por que não podemos usar o próprio nome da classe para isso? É simples, imagine que existe uma variável global com o mesmo nome professor. Se utilizarmos professor.nome dentro da classe, poderá ficar um código ambíguo, o que causará problemas.

Getter

O getter, com a sintaxe get é associado a uma função que será chamada quando a propriedade em questão for acessada e solicitada de forma dinâmica. É possível utilizá-la para retornar o status de uma variável interna, sem utilizar métodos de forma explícita. Da seguinte forma:

class Curso {
	constructor(materia, professor, duracao){
		this.materia = materia,
		this.professor = professor,
		this.duracao = duracao
	}
	get prof() {
		return this.professor
	}
}
let poo = new Curso('Programação orientada a objetos', 'Rafaella', '1 semestre')
console.log(poo.prof) //Rafaella

Nesse exemplo apenas utilizamos o getter para retornar um valor que já havia sido declarado de forma fixa. E se quisermos agora retornar um valor dinâmico, como uma média de outras propriedades? Podemos fazer da seguinte forma:

class Boletim {
	constructor(participacao, prova, trabalho){
		this.participacao = participacao,
		this.prova = prova,
		this.trabalho = trabalho
	}
	get media() {
		return parseInt((this.participacao + this.prova + this.trabalho) / 3)
	}
}
let boletimSemestral = new Boletim(8, 6, 7.5)
console.log(boletimSemestral.media) //7

Alguns pontos importantes a serem destacados para o uso de getters são:

  • Pode ter um identificador do tipo numérico ou string.
  • Não deve ter nenhum parâmetro.
  • Não pode ser utilizado mais de um getter para uma mesma propriedade, assim como não pode haver uma propriedade comum com o mesmo nome do getter.

Porém, como podemos definir o valor de uma propriedade utilizando um parâmetro? Assim temos o nosso último modificador, o setter.

Setter

Geralmente usados junto com os getters, os setters são utilizados para definirem valores para uma propriedade específica.

class Aluno {
	constructor(nome, curso, semestre){
		this.nome = nome,
		this.curso = curso,
		this.semestre = semestre
	}
	set nomeAluno(nomeAluno) {
		this.nome = nomeAluno
	}
}
let lucas = new Aluno('', 'Engenharia', 5)
lucas.nomeAluno = 'Lucas'
console.log(lucas.nome) //Lucas

Portanto, nesse caso podemos chamar o setter passando um parâmetro para alterar o valor da propriedade nome do aluno.

Alguns pontos importantes a serem destacados para o uso de setters são:

  • Pode ter um identificador do tipo numérico ou string.
  • Deve ter exatamente um parâmetro.
  • Não pode ter a mesma nomenclatura para propriedade e função.

Agora podemos tanto acessar as propriedades de um objeto (com getters), quanto alterar os valores dela (com setters).

class Aluno {
	constructor(nome, curso, semestre){
		this.nome = nome,
		this.curso = curso,
		this.semestre = semestre
	}
	get nomeAluno(){
		return this.nome
	}
	set nomeAluno(nomeAluno) {
		this.nome = nomeAluno
	}
}
let lucas = new Aluno('', 'Engenharia', 5)
lucas.nomeAluno = 'Lucas'
console.log(lucas.nome) //Lucas

Quer aprender mais sobre Javascript? Acesse:

Rafaella Ballerini
Rafaella Ballerini

Desenvolvedora de software, instrutora e criadora de conteúdo. Possui um canal com mais de 240 mil pessoas inscritas, onde ensina sobre os mais diversos temas relacionados a programação e tecnologia, como HTML, CSS, Javascript, Git, Github... É instrutora front-end na plataforma da Alura e também na Imersão Dev, projeto que leva o ensino inicial de programação para todo o Brasil gratuitamente.

Veja outros artigos sobre Front-end