8 pontos por hongminhee 2025-03-21 | 1 comentários | Compartilhar no WhatsApp

Resumo dos principais pontos

  • As checked exceptions do Java, embora sejam amplamente criticadas pela comunidade, têm vantagens notáveis do ponto de vista da segurança de tipos.
  • Fornecem um mecanismo de segurança de tipos conceitualmente semelhante ao Result<T, E> do Rust ou ao Either a b do Haskell.
  • As checked exceptions expressam explicitamente no método a possibilidade de falha, forçando o tratamento de erros por meio do sistema de tipos.

Vantagens das checked exceptions

  • Oferecem segurança de tipos ao verificar em tempo de compilação se a exceção foi tratada.
  • Tornam a possibilidade de exceção parte do contrato da API ao explicitá-la na assinatura do método com a cláusula throws.
  • Fornecem um mecanismo conveniente em que, apenas com a declaração, a exceção é propagada automaticamente.
  • Ao contrário do Rust, não exigem sintaxe adicional como o operador ? a cada chamada.

Problemas das checked exceptions

  • Geram código boilerplate excessivo na cadeia de chamadas.
  • Têm baixa compatibilidade com programação funcional, como lambdas e a Stream API introduzidas após o Java 8.
  • Dificultam a evolução da API por causa de quebras de compatibilidade ao adicionar novas exceções a interfaces.
  • Podem incentivar antipadrões de ignorar exceções.

Propostas de melhoria

  • Melhorar as interfaces funcionais para que lambdas possam declarar checked exceptions.
  • Adicionar suporte a tipos genéricos de exceção na cláusula throws.
  • Expandir APIs para lidar melhor com checked exceptions em contextos funcionais.
  • Melhor integração com as APIs Optional<T> e Stream<T>.

Comparação com outras linguagens

  • Rust: oferece um mecanismo explícito de tratamento de erros com Result<T, E> e o operador ?.
  • Kotlin: tornou todas as exceções unchecked, mas oferece estruturas funcionais como runCatching.
  • Scala: oferece tratamento funcional de erros com tipos monádicos como Try[T] e Either[A, B].

Conclusão

  • As checked exceptions precisam ser reavaliadas como um recurso inovador e mal compreendido do Java.
  • Em vez de abandoná-las completamente, o ideal é aprimorá-las para que se integrem bem aos recursos modernos do Java.
  • Há potencial para evoluí-las na direção de resolver problemas práticos sem abandonar o paradigma existente.
  • É importante encontrar um ponto de equilíbrio entre segurança de tipos, concisão de código e flexibilidade.

1 comentários

 
roxie 2025-03-28

Pareceu que eu estava repetindo uma discussão que já vinha sendo feita há mais de uma década. Soa como a defesa de que exceptions têm tanto valor quanto tipos, e eu gostaria de responder que os tipos já são suficientes.