Apa yang begitu kuat tentang peta datar sehingga layak mendapat tempat seperti itu dalam cerita rakyat Scala?
for
ekspresi dalam referensi bahasa. Ini mungkin memberi beberapa petunjuk.
Apa yang begitu kuat tentang peta datar sehingga layak mendapat tempat seperti itu dalam cerita rakyat Scala?
for
ekspresi dalam referensi bahasa. Ini mungkin memberi beberapa petunjuk.
Jawaban:
Alasan di balik frasa ini adalah Anda dapat mengganti banyak kode if / then / else membosankan yang akan Anda tulis dengan panggilan ke flatMap (dan fungsi tingkat tinggi lainnya).
Ini terutama berlaku untuk Opsi (lihat http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/ )
Tetapi itu juga berlaku untuk monad lain (meskipun saya harus mengakui, saya sendiri belum sepenuhnya memahami detailnya)
Bayangkan situasi di mana Anda memiliki koleksi yang ingin Anda terapkan fungsi (atau serangkaian fungsi) di mana setiap fungsi mungkin mengembalikan null. Ketika Anda benar-benar menggunakan nol, kode Anda akan dipenuhi dengan pemeriksaan nol. Tetapi jika Anda menggunakan Opsi alih-alih nilai, Anda bisa memetakan nilai-nilai dengan fungsi yang diinginkan, merangkai fungsi dalam kasus beberapa fungsi dan mendapatkan koleksi hanya dengan hasil yang bukan null, yang dalam banyak kasus persis seperti itu. kamu ingin.
Karena deskripsi itu agak berbelit-belit, saran yang lebih pendek "hanya peta datar yang omong kosong" menjadi mapan.
Kisah yang saya dengar adalah bahwa dua pemrogram Scala terkemuka berpasangan ketika salah satu dari mereka mulai menulis beberapa kode seperti ini:
option match {
case Some ...
Pada titik mana yang lain berkata, "Apa ini? Jam amatir? Peta datar, sialan!"
Mengenai apa yang begitu kuat tentang flatMap
, yah ... Pertama, ini adalah operator monadik fundamental. Artinya, ini adalah operasi umum yang digunakan bersama oleh, misalnya, kontainer (seperti Option
, koleksi, dll.), Kelanjutan, status, dll. Kedua, saat Anda dapat melakukan de-konstruksi Option
, yang, bukan flatMap
, bukan operasi monadik , sehingga tidak bisa diterapkan secara luas. Selain itu, diperlukan terlalu banyak pengetahuan tentang data yang Anda manipulasi.
Catatan: sebelumnya saya mengatakan bahwa mencocokkan lebih lambat dari flatMap
- sebaliknya kenyataannya, hingga versi terbaru Scala pada saat penulisan ini, 2.10.1.)
val res = for (a <- ma; b <- mb; c <- mc; d <- md) yield f(a,b,c,d)
. Saya dapat menambahkan lebih banyak monad, menghapus monad, dan itu tetap sama. Juga, perhatikan bahwa itu tidak terurai menjadi String
, tetapi menjadi Option[String]
. Padahal, sebenarnya, itu tidak membusuk sama sekali. Salah satu alasan mengapa beberapa orang tidak suka menggunakan container sebagai contoh untuk monad adalah karena Anda dapat mengeluarkan barang dari container, tetapi tidak semua monad mengizinkan Anda melakukannya.
Hal yang terpenting flatMap
adalah bahwa Scala merupakan representasi dari operasi pengikatan monadik. Ada banyak tutorial di web yang menjelaskan tujuan monad dan mengapa sebenarnya sangat berguna; James Iry punya satu hal yang menjelaskan beberapa detail.
Option
hanya salah satu dari banyak flatMap
kasus penggunaan. Tentu saja, jika Anda ingin mengamati monad di "habitat aslinya", Anda harus mengunjungi Haskell. Satu-satunya perbedaan adalah Haskeller berkata: "Hanya >> = omong kosong itu!"
Runar Bjarnason adalah orang yang Anda cari asal-usulnya.
Menyadari mengapa hal itu begitu kuat adalah sesuatu yang hanya bisa terjadi seiring berjalannya waktu. Kelas Option adalah tempat terbaik untuk memulai untuk melihat bagaimana Anda akan berulang kali flatMap serangkaian pencarian (misalnya) menjadi hasil akhir.