Como programador java, sempre critiquei Exceções não verificadas. Os programadores costumam usá-lo como um caminho para facilitar a codificação apenas para criar problemas posteriormente. Além disso, os programas (embora desarrumados), com exceções verificadas, são muito robustos em comparação com contrapartes não verificadas.
Surpreendentemente em Scala, não há nada chamado exceções verificadas. Todo o Java marcado e desmarcado está desmarcado no Scala.
Qual é a motivação por trás dessa decisão? Para mim, abre uma ampla gama de problemas ao usar qualquer código externo. E se por acaso a documentação for ruim, isso resultará em KILL.
Respostas:
As exceções verificadas são principalmente consideradas uma falha. Observe que nenhuma linguagem criada após o Java as adotou. Consulte http://www.artima.com/intv/handcuffs2.html , http://googletesting.blogspot.ru/2009/09/checked-exceptions-i-love-you-but-you.html , http: / /www.mindview.net/Etc/Discussions/CheckedExceptions etc.
Em particular, eles são incompatíveis (exceto revertendo para
throws Exception
).Em Scala você tem uma opção melhor: usando tipos algébricos para valores de retorno, como
Option[T]
,Either[Exception, T]
, seu próprio tipo quando você quer que o usuário casos específicos punho (por exemplo, em vez deVocê tem
agora é necessário que o consumidor lide com todos os resultados)
Para lidar com código externo que gera exceções, você tem
scala.util.control.exception
ouscala.util.Try
(começando com Scala 2.10).fonte
try..catch
parece muito mais legível do queif
. Além do mais, também posso garantir que esses mesmos desenvolvedores não escrevam código que retorne resultado de erro - muito complicado no Scala - você nem pode retornar de uma função sempre que quiser (como em Pascal)As exceções verificadas em Java não são uma coisa tão ruim. É claro que os ADTs podem ser a melhor opção para o Scala, mas em Java, as exceções marcadas têm seu lugar e o argumento do código arrumado é apenas sem noção, não importa, quantos blogs o repetiram. Basicamente, diz que você deve ignorar com prazer condições severas e possivelmente reparáveis que podem ocorrer em seu sistema, porque o sistema de tipo parafuso, um código bonito , torna seu sistema robusto automaticamente. Tal raciocínio também explica por que tantos programadores Java mover voluntariamente o seu código em XMLs (Spring, Maven, etc. eu perca a muito papel aqui embora).
O motivo da falta de exceções verificadas em Scala, fornecido por M. Odersky abaixo de http://www.scala-lang.org/old/node/8787.html, é surpreendentemente diferente e faz sentido.
Não tenho certeza, mas acho que as lambdas do Java 8 também estão restritas a exceções não verificadas.Os métodos na maioria das (todas?) Novas interfaces funcionais no JDK 8 (java.util.function.*
) também não declaram exceções não verificadas.fonte
Se você quer ganhar eficiência, precisa desistir .. precisão / controle <- Preciso de uma palavra melhor para isso.
Scala está localizado no topo, tanto quanto a abstração. Se um dos objetivos da Scala é livrar-se do código clichê irritante, um lugar óbvio para se olhar é o tratamento de exceções do Java. Se você deseja escrever um código rápido em java, continue lançando suas exceções verificadas até que elas sejam ativadas
main()
e efetivamente desmarcadas.Não sei se estou entendendo exatamente o que você está perguntando, mas esse é o motivo mais óbvio na minha opinião.
Bem, eu olhei um pouco e alguém escreveu sobre a tragédia das exceções de cheques .
fonte