11/17/09 Como tratar funções parciais? Programação I Cap. 9 – Tratamento de exeção Christiano Braga [email protected] 1 • Uma função parcial é aquela que não está definida para todos os elementos do seu domínio. • Como implementar tais funções? • Restringir a implementação aos valores de parâmetros apropriados é trivial. (Um condicional resolve a questão.) • Fica a pergunta sobre como tratar o retorno da função. • O que a função deve retornar no caso excepcional, isto é, quando a função receber como parâmetro um valor fora do seu domínio? 2 Exceções Exemplo: fatorial • Java têm uma resposta bastante elegante para esta situação: sinaliza-se uma exceção. • Sinalizar uma exceção é como produzir um erro. • Uma exceção, no entanto, não necessariamente será interceptada pela função chamadora. Ela pode ser interceptada por uma função mais “acima” na sequência de chamadas de chamadas de função de uma aplicação ou simplesmente não ser interceptada. import java.io.Console ; class ExemploExcecoes { public static int fat(int n) throws Exception { if(n >= 0) if (n == 0) return 1 ; else return n * fat(n -1) ; else throw new Exception("\nFat: Parâmetro deve ser um número natural. "+ "Foi passado "+n+".\n") ; } public static void main(String[] args) throws Exception { Console c = System.console() ; String value = c.readLine("Digite um numero: "); System.out.println("O fatorial de "+value+" é"+ fat(Integer.parseInt(value))) ; } 3 } 4 Exemplo: fatorial Exemplo: fatorial • No exemplo, a função fatorial sinaliza uma exceção quando o parâmetro passado não é um número natural. • O procedimento main simplesmente “deixa rolar” a exceção, não tratando-a. Quando a situação excepcional ocorre a exceção é capturada pela máquina virtual Java que termina o programa e exibe a pilha de chamadas na tela. $ java6 ExemploExcecoes Digite um numero: -1 Exception in thread "main" java.lang.Exception: Fat: Parâmetro deve ser um número natural. Foi passado -1. at ExemploExcecoes.fat(ExemploExcecoes.java:9) at ExemploExcecoes.main(ExemploExcecoes.java:17) 5 6 1