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.
El problema con las excepciones marcadas se demuestra mejor con el método de mapa en las listas:
def map[B](f: A => B): List[B]
¿Cómo anotar un mapa con @throws? Si el mapa no obtiene una anotación @throws en sí, entonces presumiblemente no puede pasarle ninguna función que tenga una @throws. Eso introduciría restricciones y distinciones engorrosas para las formas en que se puede usar el mapa. Las cosas serían mejores si pudiéramos afirmar de alguna manera que el mapa arroja todas las excepciones que arroja su argumento de función. Hay algunos sistemas de efectos que pueden expresar esto, pero hasta ahora cada notación que he visto es demasiado pesada.
Lukas Rytz está investigando sobre sistemas de efectos livianos que podrían usarse para expresar el tipo de mapa y otras funciones comunes de manera concisa y precisa. Es una investigación, por lo que actualmente no está claro hasta qué punto tendremos éxito y cuánto de eso se puede poner en Scala. Idealmente, podremos agregarlo en algún momento como un sistema de tipo opcional. Pero es demasiado pronto para hacer predicciones concretas.
Salud
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.