Dalam sebuah wawancara dengan John Hughes di mana ia berbicara tentang Erlang dan Haskell, ia memiliki pendapat berikut tentang penggunaan perpustakaan negara di Erlang:
Jika saya ingin menggunakan perpustakaan stateful, saya biasanya membangun antarmuka bebas efek samping di atasnya sehingga saya dapat menggunakannya dengan aman di sisa kode saya.
Apa yang dia maksud dengan ini? Saya mencoba memikirkan contoh bagaimana ini akan terlihat, tetapi imajinasi dan / atau pengetahuan saya mengecewakan saya.
haskell
erlang
state
side-effect
beta
sumber
sumber
Jawaban:
(Saya tidak tahu Erlang, dan saya tidak bisa menulis Haskell, tapi saya pikir saya bisa menjawab demikian)
Nah, dalam wawancara itu contoh perpustakaan generasi nomor acak diberikan. Berikut ini adalah kemungkinan antarmuka stateful:
Output mungkin
5 2 7
. Bagi seseorang yang menyukai kekekalan, ini jelas salah! Seharusnya5 5 5
, karena kita memanggil metode pada objek yang sama.Jadi apa yang akan menjadi antarmuka stateless? Kita dapat melihat urutan angka acak sebagai daftar malas yang dievaluasi, di mana
next
sebenarnya mengambil kepala:Dengan antarmuka seperti itu, kami selalu dapat kembali ke keadaan sebelumnya. Jika dua potong kode Anda merujuk ke RNG yang sama, mereka sebenarnya akan mendapatkan urutan angka yang sama. Dalam pola pikir fungsional, ini sangat diinginkan.
Menerapkan ini dalam bahasa stateful tidak begitu rumit. Sebagai contoh:
Setelah Anda menambahkan sedikit gula sintaksis sehingga rasanya seperti daftar, ini sebenarnya cukup bagus.
sumber
Konsep utama di sini adalah bahwa keadaan eksternal bisa berubah . Perpustakaan yang tidak memiliki keadaan eksternal yang dapat berubah, adalah perpustakaan yang bebas dari efek samping. Setiap fungsi di perpustakaan seperti itu hanya tergantung pada argumen yang diteruskan ke dalamnya.
Tes lakmus berguna yang saya gunakan:
sumber