Pengecualian yang diperiksa di Jawa bukanlah hal yang buruk. Tentu saja ADT mungkin merupakan pilihan yang lebih baik untuk Scala tetapi di Jawa, pengecualian yang diperiksa memiliki tempatnya sendiri dan argumen kode yang rapi tidak mengerti apa pun, tidak peduli berapa banyak blog yang mengulanginya. Pada dasarnya dikatakan bahwa Anda harus dengan senang hati mengabaikan kondisi parah dan mungkin diperbaiki yang mungkin terjadi di sistem Anda, karena sistem jenis sekrup, kode cantik membuat sistem Anda kuat secara otomatis. Alasan semacam itu juga menjelaskan mengapa begitu banyak coder Java secara sukarela memindahkan kode mereka ke dalam XML (Spring, Maven, dll. Namun, saya kehilangan bagian yang cantik di sini).
Alasan kurangnya pengecekan pengecualian dalam Scala yang diberikan oleh M. Odersky di bawah http://www.scala-lang.org/old/node/8787.html tidak berbeda dan masuk akal.
Masalah dengan pengecualian yang diperiksa paling baik ditunjukkan oleh metode peta pada daftar:
def map[B](f: A => B): List[B]
Bagaimana cara membuat anotasi peta dengan @throws? Jika peta tidak mendapatkan anotasi @mempering itu sendiri maka mungkin Anda tidak dapat meneruskannya ke fungsi apa pun yang memilikimemiliki @mempotong. Itu akan menghasilkan batasan dan perbedaan yang rumit untuk cara penggunaan peta. Hal-hal akan lebih baik jika kita bisa menyatakan entah bagaimana peta melempar semua pengecualian yang dilemparkan argumen fungsinya. Ada beberapa sistem efek yang dapat mengungkapkan hal ini, tetapi sejauh ini setiap notasi yang saya lihat terlalu berat.
Lukas Rytz sedang melakukan penelitian tentang sistem efek ringan yang dapat digunakan untuk mengekspresikan jenis peta dan fungsi umum lainnya secara ringkas dan tepat. Ini penelitian, jadi saat ini tidak jelas sampai sejauh mana kita akan berhasil dan berapa banyak yang bisa dimasukkan ke dalam Scala. Idealnya, kami dapat menambahkannya di beberapa titik sebagai sistem tipe opsional. Tetapi masih terlalu dini untuk membuat prediksi yang konkret.
Bersulang
Tidak yakin tapi saya pikir Java 8 lambdas juga terbatas pada pengecualian yang tidak dicentang.Metode di sebagian besar (semua?) Antarmuka fungsional baru di JDK 8 ( java.util.function.*
) tidak menyatakan pengecualian tidak dicentang juga.