Selama setahun terakhir saya telah menulis kode Scala (berasal dari latar belakang Java). Saya sangat suka bagaimana Anda bisa membuat kode yang lebih sederhana dan lebih bersih, dengan vals, kelas kasus, fungsi peta / filter / lambda, implisit dan inferensi tipe. Saya telah menggunakannya sebagian besar untuk aplikasi berbasis Akka .
Tahun ini saya sedang mengerjakan proyek Scala dengan tim baru, yang sangat suka pemrograman fungsional. Mereka banyak menggunakan Scalaz , dan kode diisi di mana-mana dengan aplikatif, batas konteks, pembaca / penulis / monad negara, bahkan metode utama adalah "dibungkus" dalam monad I / O. Alasan mereka adalah bahwa ini membuat kompiler "bekerja untuk kita" dalam menyatakan bahwa kode itu benar, dan setiap fungsi bebas dari efek samping.
Meski begitu, dari sudut pandang saya semua sintaks ini benar-benar menghalangi logika bisnis. Misalnya, jenis "MyBusinessObject" baik-baik saja, juga jenis seperti "Daftar [MyBusinessObject]", "Opsi [MyBusinessObject]" atau bahkan "Future [MyBusinessObject]". Mereka semua memiliki makna dan tujuan yang jelas. Di sisi lain, kode seperti:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
apakah ini menambah kompleksitas pada program, atau hanya saya yang tidak terbiasa dengan cara pemrograman seperti ini?
>>=
dan <$>
, yang tidak berarti apa-apa sampai Anda tahu apa yang mereka lakukan. Namun, setelah mempelajari apa yang mereka maksud, mereka membaca dengan sangat alami dan cepat kepada saya sekarang. Bukan jawaban, hanya pengalaman obyektif saya dengan hal-hal seperti ini. Saya menggunakan Scala juga, tetapi tidak memiliki pengalaman dengan perpustakaan Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
dengan beberapa trivialOperationCount
variabel canggung , bukan?) Sekarang, bahasa pemrograman fungsional dengan pencocokan pola kadang-kadang akan memperkenalkan beberapa variabel lagi di mana Anda baru saja menuliskan panggilan metode aksesor di OO. Hasilnya umumnya lebih ringkas; mungkin sedikit kurang jelas, tetapi melihat deklarasi data biasanya membuatnya jelas dengan cepat. Mengetik statis sangat membantu, tidak seperti di APL.