[quote=ViniGodoy]Você saberá o que esperar com ou sem checked exceptions. Isso deve estar na documentação do método.
O que acaba acontecendo no Java, é que muitos programadores tratam a exception apenas para relança-la como uma exception de runtime ou gerar um log. Ou seja, desabilitam o tratamento. Outros, seguem sua sugestão, de simplesmente repassar o throws, o que na minha opinião é muito pior. [/quote]
Isso parece programador C++ falando que basta usar “delete”. Não, não é verdade. Não basta. A documentação deve sempre dizer o que o código faz, mas isso não é o que sempre ocorre. inclusive na própria API do C#.
De qualquer forma a exception será tratada, qual é o problema? Se o desenvolvedor não sabe o que fazer com ela o problema é de quem?
[quote=ViniGodoy]
Quem está comprometido com o tratamento correto, irá faze-lo com ou sem checked exception. Até porque, o menor dos problemas em exception safety está em capturar a exceção em si, mas sim, em garantir que o estado do objeto continue válido, após o disparo dessa exception.[/quote]
O tratamento da exception é garantido em Java. Prove você que non-checked exceptions é melhor. Até agora você só disse “se isso… se aquilo… se… se…”. Isso não é problema da linguagem.
[quote=ViniGodoy]
Pelo visto você nunca usou a API de SQL da sun. Como assim, exceptions checked quando não há o que fazer não atrapalham? Você nunca escreveu um try dentro do outro, só porque o seu finally tem que tratar uma exception que pode ocorrer ao fechar uma conexão? O código fica tão horrível, que já estão propondo um syntax suggar para a versão 7 do Java.[/quote]
Isso não tem nada a ver com Exceptions. Escrever um try dentro do outro é tosqueira de linguagem derivada de Algol, assim como C++, C#, etc.
[quote=ViniGodoy]
Acontece que o desenvolvedor não pode prever como um usuário irá usar a API, na maior parte dos casos. Se ele não pode prever, ele também não pode imaginar o que será feito, e o que não será feito.[/quote]
O desenvolvedor DEVE prever como a API será usada porque esse é o trabalho dele. Se ele não consegue projetar um software então seria melhor contratar um cabelereiro ou frentista que daria na mesma.
Isso faz parte da fase de design da aplicação, seja ela antes ou incremental.
[quote=ViniGodoy]
Ainda assim, um erro com checked exception custa muito caro, pois elas tornam-se parte da interface pública a API e, uma vez declaradas, não podem ser modificadas.[/quote]
E daí? Campos privados de classes não podem ser alterados. E daí? Se o desenvolvedor estabeleceu que assim é que deve ser, quem é você para dizer o contrário?
Assim como um campo privado é privado porque alguém pensou que deveria ser privado, uma exception é uma exception porque é uma exception, oras.
[quote=ViniGodoy]
Quem foi que falou em não tratar exceptions? Ou deixar o aplicativo falhar horrivelmente? Ninguém falou que o recurso de exceptions irá deixar de existir. Estamos falando apenas de checked exceptions.[/quote]
Ó, Jesus, você precisará tratar de qualquer maneira. Por exemplo, quando um arquivo não é encontrado ou não possibilita leitura. Você precisará tratar tal erro de qualquer forma. Que diferença faz se existe um throws ou não?
Entendeu?
[quote=ViniGodoy]
Ou seja, você terá uma série de blocos try…catch poluindo o código, só pela obrigação de te-los, e não porque estão tomando qualquer precaução para melhoria do sistema.[/quote]
Não, isso é burrice do programador mesmo. Quantas pessoas aqui já lidaram com múltiplos logs? E mesmo que você fosse um completo idiota e usasse somente non-checked exceptions, que diferença isso faria?
[quote=ViniGodoy]
Por isso discordo com você, quando você diz que checked exceptions dão “mais opção”. Se dão uma opção para quem desenvolve a API, elas tiram uma opção de quem usa a API. Ou seja, elas forçam que o programador que usa a API trata a exceção, num momento que poderia não ser o mais adequado para ele.[/quote]
- Você precisará tratar os erros de qualquer forma. Isso é inevitável;
- Não tira mais do que qualquer linguagem estática que estabelece um tipo int e outro long, por exemplo. É simplesmente uma questão de deixar claro o que é o quê.
[quote=ViniGodoy]Se o pessoal daqui é fraquíssimo, por que continua frequentando o fórum? Para sua informação, tanto o entrevistado, quanto o entrevistador, são duas das mais importantes figuras da informática da atualidade. Eu não olharia uma entrevista com o criador da VCL e da API do C# com olhos céticos, principalmente quando o entrevistador é ninguém menos que o Bruce Eckel.
Em todo caso, apesar de estar fazendo um discurso contra as checked exceptions, devo admitir que não é um dos recursos que eu enquadraria como um dos “piores erros do java”. Só considero um recurso dispensável, mas ele não incomoda ao ponto de categoriza-lo dessa forma.[/quote]
Eu seria contra várias coisas, mas não porque são “desnecessárias” como você parece achar, mas por outras razões mais profundas. O pessoal aqui parece ter um fetiche por criticar o Java e elevar C# por razões estúpidas. Existem inúmeras razões porque o Java é uma merda, mas o C# tem inúmeras + 1000.