Java'da kontrol edilen istisnalar o kadar da kötü bir şey değil. Tabii ki ADT'ler Scala için daha iyi bir seçenek olabilir, ancak Java'da, kontrol edilen istisnaların yeri vardır ve derli toplu kod argümanı, kaç blogun tekrarladığı önemli değil, anlamsızdır. Temel olarak, sisteminizde meydana gelebilecek ciddi ve muhtemelen onarılabilir durumları mutlu bir şekilde göz ardı etmeniz gerektiğini söyler, çünkü vidalı sistem, güzel kod sisteminizi otomatik olarak sağlam kılar. Böyle bir akıl yürütme ayrıca neden bu kadar çok Java kodlayıcısının gönüllü olarak kodlarını XML'lere taşıdığını açıklar (Spring, Maven, vs. Burada güzel kısmı kaçırıyorum ).
Http://www.scala-lang.org/old/node/8787.html adresinden M. Odersky tarafından verilen Scala'da kontrol edilen istisnaların olmamasının nedeni şaşırtıcı derecede farklı ve mantıklı.
İşaretli istisnalarla ilgili sorun en iyi şekilde listelerdeki harita yöntemi ile gösterilir:
def map[B](f: A => B): List[B]
@Throws ile haritaya nasıl açıklama eklenir? Harita bir @ harfleri ek açıklaması almazsa, muhtemelen @ harfleri olan herhangi bir işlevi geçiremezsiniz. Bu, haritanın kullanılabilme yolları için hantal kısıtlamalar ve farklılıklar getirecektir. Bir şekilde haritanın işlev argümanının attığı tüm istisnaları attığını söyleseydik daha iyi olurdu. Bunu ifade edebilecek bazı efekt sistemleri var, ancak şimdiye kadar gördüğüm her gösterim çok ağır.
Lukas Rytz, haritanın türünü ve diğer ortak işlevleri özlü ve kesin bir şekilde ifade etmek için kullanılabilecek hafif efekt sistemleri hakkında biraz araştırma yapıyor. Araştırma, bu yüzden şu anda ne kadar başarılı olacağımız ve bunun ne kadarının Scala'ya koyulabileceği belirsiz. İdeal olarak, isteğe bağlı bir tür sistemi olarak bir noktada ekleyebileceğiz. Ancak somut tahminler yapmak için henüz çok erken.
Şerefe
Emin değilim ama Java 8 lambdas'ın da denetlenmeyen istisnalarla sınırlı olduğunu düşünüyorum.JDK 8 ( java.util.function.*
) ' deki çoğu yeni (yeni?) İşlevsel arabirimdeki yöntemler de denetlenmeyen özel durumlar bildirmez.