Sprawdzone wyjątki w Javie nie są takie złe. Oczywiście ADT może być lepszą opcją dla Scali, ale w Javie sprawdzone wyjątki mają swoje miejsce, a argument uporządkowanego kodu jest po prostu bezsensowny, bez znaczenia, bez względu na to, ile blogów go powtórzyło. Mówi w zasadzie, że z radością powinieneś ignorować trudne i możliwe do naprawy warunki, które mogą się zdarzyć w twoim systemie, ponieważ system typu śrubowego, ładny kod sprawia, że twój system jest automagicznie wydajny. Takie rozumowanie również wyjaśnia, dlaczego tak wielu programistów Java dobrowolnie przenieść swój kod do plików XML (wiosna, Maven, itp tęsknię całkiem częścią).
Przyczyna braku sprawdzonych wyjątków w Scali podana przez M. Odersky poniżej http://www.scala-lang.org/old/node/8787.html jest zaskakująco inna i ma sens.
Problem ze sprawdzonymi wyjątkami najlepiej pokazuje metoda map na listach:
def map[B](f: A => B): List[B]
Jak dodać adnotację do mapy za pomocą @ rzutów? Jeśli mapa sama nie otrzyma adnotacji @throw, prawdopodobnie nie możesz przekazać jej żadnej funkcji, która ma @throw. Wprowadziłoby to uciążliwe ograniczenia i rozróżnienia dotyczące sposobów korzystania z mapy. Byłoby lepiej, gdybyśmy mogli w jakiś sposób stwierdzić, że mapa wyrzuca wszystkie wyjątki od argumentu funkcji. Istnieje kilka systemów efektów, które mogą to wyrazić, ale jak dotąd każda notacja, którą widziałem, jest zbyt ciężka.
Lukas Rytz prowadzi badania nad lekkimi systemami efektów, które można by wykorzystać do wyrażenia rodzaju mapy i innych typowych funkcji w zwięzły i precyzyjny sposób. To badania, więc obecnie nie jest jasne, w jakim stopniu odniesiemy sukces i ile z tego można włożyć do Scali. Idealnie, będziemy mogli dodać go w pewnym momencie jako opcjonalny system typów. Ale jest o wiele za wcześnie, aby dokonywać konkretnych prognoz.
Twoje zdrowie
Nie jestem pewien, ale myślę, że lambda Java 8 są również ograniczone do niesprawdzonych wyjątków.Metody w większości (wszystkich?) Nowych interfejsów funkcjonalnych w JDK 8 ( java.util.function.*
) również nie deklarują niezaznaczonych wyjątków.