Por que as exceções marcadas versus não marcadas são chamadas de "a controvérsia" no tutorial do Oracle Java?

10

Eu sou novo em Java e estava lendo sua documentação sobre exceções. e, especialmente, a página Exceções não verificadas - a controvérsia .

A linha inferior diz:

Se for razoável esperar que um cliente se recupere de uma exceção, torne-a uma exceção verificada. Se um cliente não puder fazer nada para se recuperar da exceção, torne-a uma exceção desmarcada.

Eu não entendo o artigo. O que é "a controvérsia"? Você pode explicar em palavras simples?

ABcDexter
fonte
Por favor, veja a questão atualizado, eu não sinto que este é um :) duplicado
ABcDexter
3
"Eu tentei ler", o que aconteceu?
Inútil
2
É assim chamado porque há muita controvérsia em torno desse tópico. Veja também esta pergunta StackOverflow: O caso contra exceções verificadas que menciona algumas citações de pessoas famosas / influentes
Hulk

Respostas:

3

Vou dar um exemplo primeiro (mas no final está a resposta por que a controvérsia).

Vamos supor que você esteja editando um documento em um editor de documentos baseado em Java e, após concluir, escolha Arquivo-> Salvar como ... e você escolheu salvar o documento em um volume no qual não tenha permissão de gravação. O Editor não trava em você com um traço de pilha feio, simplesmente informa que não foi possível salvar o arquivo e permite continuar editando e / ou salvando em outro local.

Nesse caso, é provável que uma exceção verificada fosse esperada, capturada e usada para se recuperar graciosamente dela.

Por outro lado, suponha a eles uma divisão por zero ou uma exceção de ponteiro nulo causada por um erro de programação que eleva sua cabeça feia apenas em determinadas condições. Isso pode acontecer em qualquer lugar do código, a RAM pode estar corrompida etc. Nenhum documento da API diria "esse método geraria uma divisão por zero se a RAM estiver corrompida" .

As exceções verificadas devem fazer parte do design e os usuários dessa API devem se preparar para lidar com elas. Exceções não verificadas podem acontecer em quase todos os lugares e estão além do nosso controle.

A controvérsia surge dos programadores que usam exceções não verificadas (estendendo-se do RuntimeException) quando devem usar exceções verificadas:

  • como um atalho para não ser incomodado pelo compilador
  • para tornar suas assinaturas mais simples
  • porque consideram que as exceções verificadas são um problema de dependência (se você lançar uma nova exceção verificada em uma classe de implementação, deve modificar a assinatura da interface) e vice-versa.
Tulains Córdova
fonte
"você deve modificar a assinatura da interface" - bem, você é forçado a fazê-lo pelo compilador e terá que manipular ou declarar que seja lançada em cada site de chamada.
Hulk
3
Se um aplicativo de interface do usuário lida adequadamente com um erro de uma maneira fácil de usar é baseado em quão bem o programador escreveu o código. Eles podem escrever o código da mesma maneira, com exceções não verificadas, assim como alguém pode lidar incorretamente com os erros com exceções verificadas. A intenção das exceções verificadas é facilitar aos programadores o tratamento adequado dos erros. A controvérsia não é o que você reivindicou aqui, mas sim se eles realmente atingiram com sucesso esse objetivo de facilitar o tratamento de erros. Na opinião de muitos, eles não o fazem; eles dificultam.
Servy
@Servy De que maneira amigável, um aplicativo de interface do usuário pode lidar com o fato de um chip de RAM com falha ou ficar sem ciclos de CPU porque outro software está com defeito?
Tulains Córdova
1
@ TulainsCórdova Em qualquer um desses casos, o programa nem mesmo será executado , portanto, não há nenhum período de tratamento de exceção sendo executado , portanto, como você tenta representar um erro é irrelevante quando você nem consegue executar nenhum dos seus programas. código quando isso acontece.
Servy
1
@ TulainsCórdova Você não precisa necessariamente encontrar o erro para lidar com isso, mas sim, o compilador não dirá que ele pode ser lançado. A controvérsia é se o compilador dizendo ou não que a exceção pode ser lançada é realmente útil. Alguns pensam que é, alguns pensam que não é. A questão aqui é qual é a controvérsia e essa é a resposta. Sua declaração sobre qual é a principal controvérsia das exceções verificadas não é.
Servy
-4

Não há controvérsia nessa página. É a Oracle dizendo às pessoas para usarem as exceções verificadas.

A "controvérsia" falsa que eles inventaram aqui é entre os designers de linguagem e os usuários de linguagem. Os designers permitiram que as pessoas jogassem e pegassem coisas que (em sua mente) não deveriam ser jogadas ou capturadas. Então eles criaram uma página da web reclamando de desenvolvedores preguiçosos.

ascotan
fonte
4
Não é uma controvérsia, mesmo que essa página diz pouco sobre ele. O que é controverso é a resposta à pergunta: "As exceções verificadas ajudam ou dificultam o desenvolvimento de um software melhor?" E "Em caso afirmativo, quais exceções devem ser verificadas e quais devem ser desmarcadas?" Aposto que você poderia iniciar uma discussão animada se reunisse desenvolvedores (e cerveja) suficientes em uma sala para responder a essas perguntas.
Solomon Slow