1
resposta

[Sugestão] Porque criar métodos com return somaDasAvaliacoes / totalAvaliacoes; ao inves de uma variável que faz a mesma função?

CODIGO COM A VARIÁVEL

public class Treino {
    public static void main(String[] args) {

      double somaDasAvaliacoes = 15;
      double totalAvaliacoes = 3;

      double calculaMedia = somaDasAvaliacoes / totalAvaliacoes;

        System.out.println(calculaMedia);

        double totalAvaliacoes = 2;
    }
}

CÓDIGO COM O MÉTODO

public class Treino {

   public static void main(String[] args) {

        Treino treino = new Treino();

        System.out.println(treino.calculaMedia());
    }

    double somaDasAvaliacoes = 15;

    double calculaMedia() {
        return somaDasAvaliacoes / totalAvaliacoes;
    }

    double totalAvaliacoes = 2;

}

Nota que mesmo eu declarando a variável após o método o código compila, isso porque variáveis de instância existem para toda a classe, então o método pode acessá-las a qualquer momento. Se alterar a variável, o método sempre vai acessar a mais atualizada digamos. Já na primeira maneira apenas com variáveis, se eu declarar novamente o código irá ter um erro de compilação. Ou vai retornar um valor desatualizado, ou não vai rodar pois uma varíavel está sendo declarada após a variável que está sendo chamada!

Espero que ajude de alguma forma!

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Bruno Souza Rovani! Como vai?

Com base no que você explicou, sua comparação destaca bem a diferença entre variáveis locais e variáveis de instância: totalAvaliacoes foi redeclarável no mesmo escopo no primeiro exemplo (causando erro), enquanto no segundo o método acessa os campos da classe, mantendo a regra de negócio num único lugar e permitindo validações.

Uma dica interessante para o futuro é criar um método que encapsula a média, evita divisão por zero e protege o estado com private. Veja este exemplo:


class Filme {
  private double somaAvaliacoes = 15;
  private int totalAvaliacoes = 3;

  public double getMedia() {
    if (totalAvaliacoes == 0) return 0.0;
    return somaAvaliacoes / totalAvaliacoes;
  }

  public void adicionarAvaliacao(double nota) {
    somaAvaliacoes += nota;
    totalAvaliacoes++;
  }
}

O codigo calcula a media com seguranca (sem divisao por zero) e mantem os campos encapsulados.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!