Como programador de Java, siempre he sido crítico con las Excepciones no verificadas. La mayoría de los programadores lo usan como un camino hacia la facilidad de codificación solo para crear problemas más adelante. Además, los programas (aunque desordenados) con excepciones marcadas son mucho más robustos en comparación con sus homólogos no verificados.
Sorprendentemente en Scala, no hay nada llamado Excepciones marcadas. Todos los Java marcados y desmarcados están desmarcados en Scala.
¿Cuál es la motivación detrás de esta decisión? Para mí, abre una amplia gama de problemas al usar cualquier código externo. Y si por casualidad la documentación es pobre, resulta en KILL.
Respuestas:
Las excepciones marcadas se consideran principalmente un fracaso. Tenga en cuenta que ningún lenguaje creado después de que Java los adoptó. Ver 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.
En particular, son incomponibles (excepto volviendo a
throws Exception
).En Scala tiene una mejor opción: el uso de tipos algebraicos de los valores de retorno, tales como
Option[T]
,Either[Exception, T]
, su propio tipo cuando desee el usuario a casos concretos de la manija (por ejemplo, en lugar detienes
y ahora se requiere que el consumidor maneje todos los resultados)
Para tratar con código externo que arroja excepciones, tiene
scala.util.control.exception
oscala.util.Try
(comenzando con Scala 2.10).fuente
try..catch
parece mucho más legible queif
. Además, también puedo garantizar que la mayoría de los desarrolladores no escribirán código que devuelva el resultado del error, demasiado complicado en Scala, ni siquiera puede regresar de una función cuando lo desee (como en Pascal)Las excepciones marcadas en Java no son tan malas. Por supuesto, los ADT pueden ser una mejor opción para Scala, pero en Java, las excepciones marcadas tienen su lugar y el argumento del código ordenado no tiene ni idea, sin importar cuántos blogs lo repitan. Básicamente dice que felizmente debe ignorar las condiciones severas y posiblemente reparables que pueden ocurrir en su sistema, porque el sistema de tipo tornillo, un código bonito hace que su sistema sea robusto de forma automática. Tal razonamiento también explica por qué tantos codificadores de Java mueven voluntariamente su código a XML (Spring, Maven, etc. ). Sin embargo , extraño la parte bonita aquí.
La razón de la falta de excepciones marcadas en Scala dada por M. Odersky debajo de http://www.scala-lang.org/old/node/8787.html es sorprendentemente diferente y tiene sentido.
No estoy seguro, pero creo que las lambdas de Java 8 también están restringidas a excepciones no marcadas.Los métodos en la mayoría de las interfaces funcionales nuevas (¿todas?) En JDK 8 (java.util.function.*
) tampoco declaran excepciones no verificadas.fuente
Si quieres ganar eficiencia, debes rendirte ... precisión / control <- Necesito una palabra mejor para eso.
Scala se encuentra hacia la cima en lo que respecta a la abstracción. Si uno de los objetivos de Scala es deshacerse del código repetitivo molesto, entonces un lugar obvio para mirar es el manejo de excepciones de Java. Si desea escribir código rápido en java, simplemente continúe lanzando sus excepciones marcadas hasta que lleguen
main()
y efectivamente no estén marcadas.No sé si entiendo exactamente lo que estás preguntando, pero esta es la razón más obvia en mi opinión.
Bueno, busqué un poco y alguien ha escrito sobre la tragedia de las excepciones de cheques .
fuente