Exercício com Getters e Setters (Apostila Caelum)

Estou começando a estudar Java usando a apostila da Caelum.

Hoje, ao resolver um exercício da apostila, surgiu a seguinte dúvida: Devo usar o operador ‘this’ mesmo quando não existe ambiguidade?

No enunciado do exercício há o seguinte trecho de código:

class Funcionario {
  private double salario;
  
  // ...
  
  public double getSalario() {
    return this.salario;
  }

  public void setSalario(double salario) {
    this.salario = salario;
  }
}

Então… por que usar o operador ‘this’ no método getSalario() se o nome do atributo já é suficiente para identificá-lo sem ambiguidade?

O exercício pedia que se criasse os getters e setters da classe Funcionario. Eu o resolvi da seguinte forma (sem usar o this a todo momento):

class Funcionario {
    private String nome;
    private String departamento;
    private Data dataAdmissao;
    private String RG;
    private String cargo;
    private double salario;

    public String getNome() {
	    return nome;
    }

    public void setNome(String nome) {
	    this.nome = nome;
    }

    public String getDepartamento() {
	    return departamento;
    }

    public void setDepartamento(String departamento) {
	    this.departamento = departamento;
    }

    public Data getDataAdmissao() {
	    return dataAdmissao;
    }

    public void setDataAdmissao(int ano, int mes, int dia) {
	    dataAdmissao.ano = ano;
	    dataAdmissao.mes = mes;
	    dataAdmissao.dia = dia;
    }

    public String getRG() {
	    return RG;
    }

    public void setRG(String RG) {
	    this.RG = RG;
    }
    
    public String getCargo() {
	    return cargo;
    }

    public void setCargo(String cargo) {
	    this.cargo = cargo;
    }

    public double getSalario() {
	    return salario;
    }

    public void setSalario(double salario) {
	    this.salario = salario;
    }

}

Está incorreto? É uma má prática de programação?

Não :slight_smile: Não tem problema nenhum fazer do jeito que você fez, eu particularmente acho até melhor.

Obrigado!

Tem alguém da Caelum aí para dar a sua opinião sobre o assunto?

Ao se criar um setter ou construtor que tem um argumento com o mesmo nome que uma variável de instância é necessário o this para que o compilador saiba diferenciar quem é quem na jogada.

Fora isso, o seu jeito está ok, usar this em getters é questão de estilo, eu pessoalmente prefiro.

Não sou da Caelum mas vou fazer uma defesa do modo de escrita de código da apostila.

Alguns programadores e algumas ferramentas geradoras de código(o construtor de interfaces gráficas do NetBeans por exemplo) colocam os atributos da classe no fim da classe, escrevendo o this(neste caso) mostra para quem estiver lendo o código que esta sendo usado um atributo da classe(e não que ocorreu uma eventual falta de uma linha no código do programa).

Resumindo, acho que seja apenas questão de facilitar a leitura do código.

Prefiro usar o this só quando é necessário…

Pra mim, fica melhor pra ler o código… já que a IDE diferencia atributos de classe com os de métodos.