Sebagai seorang programmer java, saya selalu kritis terhadap Pengecualian Tidak Dicentang. Sebagian besar programmer menggunakannya sebagai en-route untuk kemudahan coding hanya untuk membuat masalah nanti. Juga program (meskipun tidak rapi) dengan pengecualian diperiksa jauh lebih kuat dibandingkan dengan rekan yang tidak dicentang.
Anehnya di Scala, tidak ada yang disebut Checked Exception. Semua Java diperiksa dan tidak dicentang tidak dicentang di Scala.
Apa motivasi di balik keputusan ini? Bagi saya itu membuka berbagai masalah saat menggunakan kode eksternal apa pun. Dan jika kebetulan dokumentasinya buruk, itu mengakibatkan KILL.
Jawaban:
Pengecualian yang diperiksa sebagian besar dianggap gagal. Perhatikan bahwa tidak ada bahasa yang dibuat setelah Java mengadopsinya. Lihat 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 , dll.
Secara khusus, mereka tidak dapat dikomposisikan (kecuali dengan kembali ke
throws Exception
).Di Scala Anda memiliki opsi yang lebih baik: menggunakan tipe aljabar untuk nilai kembali seperti
Option[T]
,,Either[Exception, T]
tipe Anda sendiri saat Anda ingin pengguna menangani kasus tertentu (misalnya, bukannyakamu punya
dan konsumen sekarang diminta untuk menangani semua hasil)
Untuk berurusan dengan kode eksternal yang melempar pengecualian, Anda memiliki
scala.util.control.exception
atauscala.util.Try
(dimulai dengan Scala 2.10).sumber
try..catch
tampaknya jauh lebih mudah dibaca daripadaif
. Terlebih lagi saya juga dapat menjamin bahwa kebanyakan pengembang yang sama tidak akan menulis kode yang mengembalikan hasil kesalahan - terlalu rumit di Scala - Anda bahkan tidak dapat kembali dari fungsi kapan pun Anda mau (seperti di Pascal)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.
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.sumber
Jika Anda ingin mendapatkan efisiensi, Anda harus menyerah .. presisi / kontrol <- Saya perlu kata yang lebih baik untuk itu.
Scala terletak di bagian atas sejauh abstraksi. Jika salah satu tujuan Scala adalah menghilangkan kode boilerplate yang mengganggu, maka tempat yang jelas untuk dilihat adalah penanganan pengecualian Jawa. Jika Anda ingin menulis kode cepat dalam java, teruskan pengecualian Anda yang dicentang hingga hit
main()
dan efektif menjadi tidak dicentang.Saya tidak tahu apakah saya mengerti persis apa yang Anda minta tetapi ini adalah alasan paling jelas menurut saya.
Yah, saya melakukan sedikit melihat dan seseorang telah menulis tentang tragedi pengecualian cek .
sumber