Menurut prinsip Pemisahan Perintah-Kueri , serta Berpikir dalam Data dan DDD dengan presentasi Clojure seseorang harus memisahkan efek samping (memodifikasi dunia) dari perhitungan dan keputusan, sehingga akan lebih mudah untuk memahami dan menguji kedua bagian.
Ini menyisakan pertanyaan yang tidak terjawab: di mana relatif terhadap batas yang harus kita letakkan "bertanya kepada dunia"? Di satu sisi, meminta data dari sistem eksternal (seperti basis data, API layanan eksternal, dll.) Tidak transparan secara referensi dan karenanya tidak boleh duduk bersama dengan kode komputasi dan pengambilan keputusan murni. Di sisi lain, itu bermasalah, atau mungkin mustahil untuk menggoda mereka selain dari bagian komputasi dan meneruskannya sebagai argumen karena kita mungkin tidak tahu sebelumnya data mana yang mungkin perlu kita minta.
Jawaban:
Ini adalah contoh di mana, seperti disebutkan dalam komentar, memberikan kemampuan untuk mengambil data (misalnya, fungsi kelas satu, objek yang mengimplementasikan antarmuka, dll.) Menyediakan mekanisme yang nyaman untuk mengisolasi efek samping.
Fungsi tingkat tinggi yang tubuhnya murni memiliki kemurnian yang tidak tetap: http://books.google.com/books?id=Yb8azEfnDYgC&pg=PA143#v=onepage&q&f=false
Saya sudah menulis tentang ini, menyebut jenis fungsi ini fungsi yang berpotensi murni: http://adamjonrichardson.com/2014/01/13/potential-pure-functions/
Jika Anda menggabungkan fungsi yang berpotensi murni dengan fungsi jatuh (yang tidak memiliki konstruksi bercabang dan melakukan sesedikit mungkin), kombinasi yang saya sebut set isolasi, Anda dapat mengisolasi efek samping dengan cukup efektif dan membuat kode yang sangat dapat diuji: http: // adamjonrichardson.com/2014/01/15/isolating-side-effects-using-isolation-sets/
sumber
Anda menyimpan hasilnya di kelas, ini agak aneh pada awalnya, tetapi menghasilkan kode yang lebih sederhana. misalnya tidak ada variabel sementara di pemanggil.
sumber