Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 11 da Aula 6 - Exceções e controle de erros

Estaria incorreto utilizar o try e catch na Classe conta, ao invés da classe testa deposita? Segue código abaixo:

Classe TestaDeposita

package com.oo.java.alura;

public class TestaDeposita {
    public static void main (String[] args){
        Conta cp = new ContaCorrente();
        cp.depositar(-100);

    }
}

Classe Conta

public void depositar (double valor)  {
        try {
        if (valor < 0 ) {
            throw new ValorInvalidoException(valor);
        } else {
            this.saldo += valor;
        }
    }

    catch (ValorInvalidoException e) {
        System.out.println("Erro pego");

    }
    }
3 respostas

Olá Gabriel! Incorreto não está, porem creio que desta forma o código se torna mais confuso, perde semantica e se torna dificil de ler. Perceba que da forma como está a resposta do exercicio você consegue "ler" o código mais facil. Sempre busque uma maior semantica e melhor organizar seu codigo para facilitar leitura e compreensão.

Espero ter ajudado! Bons Estudos!

Olá Romario, Aqui entendo que com o try e catch dentro do método deposita, e não apenas no chamado do método para a classe TestaConta, o código será aproveitado para todas as classes que utilizarem o método deposita, capturando a Exception de qualquer um deles. No caso exposto no exercício, seria capturada apenas a Exception apresentada na própria classe TestaDeposita. Entendi desta forma mas não ficou clara pra mim a melhor prática neste caso

solução!

Sim Gabriel, da forma como você fez realmente tem um ganho de aproveitamento de código, pois não será realmente necessário repetir o try-catch quando quisermos tratar a exceção. Isso não foi feito no exercício pois o objetivo só era ensinar o uso de tratamento de exceção. O que quis dizer anteriormente foi quanto a leitura do código, que se torna um pouquinho complicada e ai cabe ao desenvolvedor escolher, aproveitar o código ou melhorar sua legibilidade, ou buscar uma outra alternativa que faça os dois.

Veja só.. com o código antigo como encontra-se no exercício:

        try{
            cc.deposita(-10);
        } catch(ValorInvalidoException i) {
            System.out.println(i.getMessage());
        }

Você consegue "ler" o código. Ficaria mais ou menos assim: "Tenta depositar -10. Em caso de exceção, pega e imprime a mensagem."

Já no seu código:

try {
        if (valor < 0 ) {
            throw new ValorInvalidoException(valor);
        } else {
            this.saldo += valor;
        }
    }

    catch (ValorInvalidoException e) {
        System.out.println("Erro pego");

    }

Fica um pouco mais complicado, a leitura seria assim:

"Tenta, se o valor for menor que 0 lança exceção, senão adiciona ao saldo. Em caso de exceção pega e imprime "Erro pego". "

Ficou um pouco mais complicado de se compreender e ler o código.

Como disse anteriormente, você pode tentar fazer de outras formas e juntar tanto o ganho de aproveitamento de código quanto a legibilidade. No entanto se você achar que isso não vale a pena e que seria pouco vantajoso, você pode deixar seu código dessa forma, pois como eu disse no inicio, não está errado, só está um pouco mais complicado para ler.

Espero ter ajudado! Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software