"
Ekstensi Reaktif " lebih dari sekadar kerangka kerja. Setidaknya karena ada implementasi yang hampir identik (disesuaikan untuk fitur bahasa tertentu dan praktik optimasi yang sesuai) untuk setiap YP populer. Yesenin mengklaim bahwa "yang besar terlihat dari kejauhan." Dalam catatan ini, saya akan mundur ke "jarak" yang berbeda dan menggambarkan apa yang saya lihat.
Zen dulu
Saya melihat versi push dari
Iterator klasik 'implementasi GoF. Saya sudah
menulis tentang ini, karena itu, tanpa detail.
Menceritakan kembali secara singkat bagi mereka yang terlalu malas untuk membacaIntinya adalah bahwa
Pengamat adalah (hampir) "gambar cermin" dari implementasi klasik Iterator. Mengapa "hampir" - dijelaskan dalam posting di tautan yang diberikan sebelumnya. Catatan penting: "refleksi cermin" adalah definisi matematika tanpa lima menit dan dapat
diformalkan secara ketat .
Pada jarak ini, perbedaan antara sistem dorong dan tarikan terlihat jelas. Setelah inspirasi seperti itu, setiap git push dan git pull menyebabkan kekaguman yang hampir dipuja. Anda mulai mencari-cari di sekitar kode dan mengajukan pertanyaan sakral tentang dual.
Zen kedua
"Sesuatu berlanjut" (metode berikutnya), "sesuatu berakhir" (metode selesai), "semuanya beres" (metode kesalahan) - tiga pernyataan yang dapat menggambarkan proses apa pun yang berkembang dari waktu ke waktu. Selain itu, mudah untuk abstrak dari waktu fisik, menggantinya dengan "urutan negara" (di mana sistem menemukan dirinya sendiri). Rx memungkinkan Anda untuk mengurangi beragam algoritma menjadi satu antarmuka tunggal (dalam arti "persetujuan" programmer dengan programmer lain dan, yang lebih penting, dengan mesin), tanpa memaksakan pembatasan pada ekspresifitas (jumlah kemungkinan keadaan) atau pada (opsional: sinkron). , asynchronous atau multithreaded).
Kesimpulan paling penting berikut dari ini: satu rx adalah satu proses. Dan jika proses kompleks terdiri dari n subproses, maka ... satu rx "orde lebih tinggi", yang mengontrol operasi n rx "orde pertama". Secara analogi dengan
fungsi tingkat tinggi .
Zen ketiga
Dengan analogi dengan fungsi? Ya, fitur. Wawasan terakhir dan paling kuat adalah bahwa rx hanyalah dekorasi dari suatu fungsi - programmer, bukan matematika: yang terakhir hidup dari waktu; fungsi reguler mampu mengembalikan hasil; hanya sekali. Dan selanjutnya (hasil); - Ini adalah versi pengembalian "yang dapat digunakan kembali". Oleh karena itu kesimpulan yang paling penting: segala sesuatu yang dapat dilakukan dengan fungsi OOP matematika (murni) dan biasa (termasuk
kari ,
komposisi , dan banyak lagi, yang esai ini tidak didedikasikan untuknya), dapat dilakukan dengan rx. Fungsinya memblokir dan tidak sinkron: rx juga. Fungsi dapat mengembalikan fungsi: rx juga. Fungsi dapat bersifat rekursif: rx juga. Perhitungan fungsi dapat di-cache: di rx juga.
Sangat mengherankan bahwa pada tahap pemahaman ini Anda tanpa sadar kembali ke ... pemrograman fungsional. Bukan demi deklaratif, bukan demi kekebalan - ini semua adalah bonus (opsional). Dalam "fungsional" karena dipaksa untuk berpikir dalam hal fungsi dan komposisi mereka; dan menurut hukum abadi "satu rx adalah satu proses", itu adalah fungsi (bukan kelas, kelas abstrak, antarmuka atau apa pun) yang menjadi "titik awal" dalam desain.
Saya memiliki semuanya.