Saya benar-benar menyukai Scala sebagai bahasa ... dan saya masih bergumul dengan mengapa perusahaan mana pun harus beralih dari Jawa ke Scala. Apakah Scala hanya gula sintaksis di atas JVM atau apakah ada perbaikan mendasar dalam Scala di Jawa yang akan meningkatkan aplikasi dunia nyata?
16
Jawaban:
Penafian: Saya bukan guru Scala.
Scala melakukan dua hal dengan sangat baik yang Java (saat ini) tidak.
Selesaikan masalah fungsional
Pada tingkat paling dasar, Scala memiliki penutupan penuh dengan dukungan koleksi. Ini berarti Anda tidak lagi harus menulis kode pelat ketel seperti (tanpa malu merobek pos DZone)
Tetapi sebaliknya tuliskan sesuatu seperti:
Selesaikan konkurensi dengan cara yang lebih aman
Jujur saya tidak bisa memikirkan terlalu banyak hal lain yang membuat Scala berdiri tegak di atas Jawa. Banyak keuntungan dan perbaikan kecil ya, tetapi juga jauh lebih banyak tali untuk digantung. YMMV
HTH sedikit
sumber
Itu tergantung pada definisi Anda tentang "gula sintaksis saja". Misalnya, dalam hal apa Java lebih dari sekadar gula sintaksis di atas kode mesin?
Bahasa apa pun dapat melakukan kurang dari kode mesin, tetapi tidak ada bahasa yang bisa berbuat lebih banyak.
Apa yang dibawa bahasa tingkat tinggi ke meja adalah membuat kode lebih mudah dibaca dan dipahami, lebih mudah untuk menulis, dan menangkap lebih banyak kesalahan. Dan, menurut pendapat saya, ini adalah yang pertama yang paling membuat perbedaan - tepatnya "gula sintaksis".
Namun mengingat hanya dua lainnya, masih ada kelebihan Scala atas Jawa.
Bukan untuk memperjelas titik, tetapi memiliki penutupan membuat kode jauh lebih mudah dikompilasi daripada tidak memiliki penutupan. Dan sementara Java 7 akan menambahkan sesuatu yang disebut closures, mereka tidak akan seperti itu - mereka hanya akan menjadi fungsi anonim.
Adapun untuk menangkap lebih banyak kesalahan, penanganan varian unggul Scala adalah bukti yang cukup. Lebih jauh lagi, penekanannya pada imutabilitas juga mencegah segala macam kesalahan - ini bukan berarti Java tidak bisa melakukan kekekalan, tetapi itu tidak datang dengan perpustakaan untuk melakukannya.
sumber
Di atas jawaban Martijn saya ingin menambahkan bahwa Scala lebih ekspresif daripada Java dan manfaatnya adalah (1) membuat Anda lebih produktif (2) menulis lebih sedikit kode untuk menyelesaikan masalah yang sama berarti Anda dapat mengurangi bug di komputer Anda. kode (kode bebas bug IMHO adalah mitos).
sumber
Saya telah menggunakan Scala selama sekitar 3 bulan sekarang dan masih tidak dapat menemukan apa pun yang tidak dapat saya lakukan di Jawa. Bagi saya secara harfiah setiap literatur tentang Scala tampaknya menyebutkan hal yang sama boilerplate . Jika apa yang Anda cari adalah mengurangi boilerplate maka Scala adalah untuk Anda tetapi IMHO, misalnya contoh filter yang diberikan di atas bisa diselesaikan dengan menggunakan koleksi apache
atau gunakan penutupan seperti itu
Tapi tentu saja lebih bertele-tele. Saya suka inferensi jenis. Ketika Anda mempelajari Scala, Anda akan menyadari bahwa ini mungkin adalah apa yang sedang terjadi. Menurut pendapat saya, setiap bahasa dilengkapi dengan + ve dan -ve.
sumber
daftar pemahaman, untuk pemahaman.
misalnya di java Anda menulis:
Dalam scala, kode yang sama, jauh lebih elegan ditulis (Seperti python) seperti:
dan dilakukan.
Ada begitu banyak yang ditawarkan Scala yang tidak dimiliki Java. Tidak ada perbandingan sama sekali. Satu-satunya masalah adalah orang lebih akrab dengan Java (b / c itulah yang mereka ajarkan di kelas CS) dan belum begitu terampil dengan paradigma Scala.
Scala memiliki rekursi ekor, ia dapat mengembalikan tupel (sesuatu yang mungkin datang di Jawa 8 saya pikir).
Tidak ada perbandingan. Scala dikembangkan oleh Martin Ordersky, yang bekerja pada tim inti untuk Java Generics.
Scala hanyalah bahasa yang jauh lebih unggul. Itu semua yang ada untuk itu. Orang yang mengatakan sebaliknya hanya belum cukup menjelajahi Scala untuk tahu lebih baik.
Di atas, saya bermaksud mengatakan optimisasi rekursi ekor (yang JVM tidak dapat lakukan dengan cara yang dapat dilakukan oleh kompilator Scala).
Scala juga mengkompilasi dan menjalankan lebih cepat dari aplikasi JVM (Ya, itu benar). Belum lagi kerangka kerjanya. Kami menggunakan Tomcat misalnya dan menggunakan beberapa servelet untuk menangani REST.
Satu hal yang tidak dapat dilakukan Tomcat, adalah operasi asinkron yang memerlukan I / O yang tidak terblokir. Untuk ini, pengembang JAVA biasanya menemukan solusi menggunakan antrian pesan (mengirim pesan ke antrian, dan beberapa proses atau utas mengambilnya dan melakukan apa pun yang Anda inginkan di latar belakang).
Sayangnya, metode ini adalah cr * p, dan peretasan atas batasan penggunaan servlets Java di Tomcat.
Periksa akka + spray. Ia menggunakan scala's Actors (Aktor seperti Threads, kecuali satu-satunya cara mereka dapat berkomunikasi adalah melalui pesan).
Dan selesai, panggilan REST asinkron menjadi mudah. Tugas latar belakang yang sudah berjalan lama? Tidak masalah. Langsung saja dan lupakan, dan lakukan beberapa polling REST untuk memeriksa statusnya dari front-end sesekali.
Jika Anda masih menggunakan Java dan berpikir itu lebih baik daripada scala, Anda sebaiknya berhenti menggunakan komputer untuk mengetik dan kembali ke masa pena bulu domba dan menulis dengan cahaya lilin. Java pada dasarnya adalah kuno dibandingkan dengan Scala.
sumber
int myVar = condition ? someValue : otherValue
//some value
//other value
komentar itu untuk yang/*some value*/
bergaya atau sesuatu. Saat ini mengacaukan penyorotan sintaksis Anda: p