Ini tidak dijelaskan lebih lanjut. Saya mencoba mencari penjelasan.
Itu adalah sesuatu yang melekat pada banyak dari kita yang telah mendebug basis kode besar tetapi Anda harus berurusan dengan skala yang cukup besar di tingkat pengawas untuk waktu yang cukup lama untuk menghargainya. Ini seperti memahami pentingnya berada di posisi dalam Poker. Pada awalnya itu tidak tampak seperti keuntungan yang berguna untuk pergi terakhir di akhir setiap belokan sampai Anda mencatat sejarah tangan sejuta tangan dan menyadari bahwa Anda memenangkan jauh lebih banyak uang di posisi daripada keluar.
Yang mengatakan, saya tidak setuju dengan gagasan bahwa perubahan ke variabel lokal adalah efek samping. Dari pandangan saya, suatu fungsi tidak menyebabkan efek samping jika tidak memodifikasi apa pun di luar ruang lingkupnya, bahwa apa pun yang disentuhnya dan dirusak tidak akan memengaruhi apa pun di bawah tumpukan panggilan atau memori atau sumber daya apa pun yang tidak diperoleh fungsi itu sendiri. .
Secara umum, hal tersulit untuk dipikirkan dalam basis kode yang rumit dan berskala besar yang tidak memiliki prosedur pengujian paling sempurna yang bisa dibayangkan adalah manajemen negara yang gigih, seperti semua perubahan pada objek granular dalam dunia video game saat Anda mengarungi puluhan ribuan fungsi saat mencoba mempersempit daftar tersangka yang tak berujung yang mana sebenarnya menyebabkan invarian seluruh sistem dilanggar ("ini seharusnya tidak pernah terjadi, siapa yang melakukannya?"). Jika tidak ada yang berubah di luar fungsi, maka tidak mungkin menyebabkan kerusakan pusat.
Tentu saja ini tidak mungkin dilakukan dalam semua kasus. Setiap aplikasi yang memperbarui basis data yang disimpan pada mesin yang berbeda, pada dasarnya, dirancang untuk menyebabkan efek samping, serta aplikasi apa pun yang dirancang untuk memuat dan menulis file. Tetapi ada banyak lagi yang dapat kita lakukan tanpa efek samping dalam banyak fungsi dan banyak program jika, misalnya, kita memiliki pustaka yang kaya akan struktur data yang tidak dapat diubah dan merangkul pola pikir ini lebih jauh.
Lucunya John Carmack telah melompat pada LISP dan ikut-ikutan meskipun mulai pada hari-hari C coding paling mikro-tuned. Saya menemukan diri saya melakukan hal yang serupa, meskipun saya masih menggunakan banyak C. Begitulah sifat pragmatis, saya pikir, yang telah menghabiskan bertahun-tahun melakukan debugging dan mencoba mencari alasan tentang sistem berskala besar yang kompleks secara keseluruhan dari tingkat pengawas. Bahkan yang secara mengejutkan kuat dan tanpa bug dalam jumlah besar masih dapat membuat Anda merasa tidak nyaman bahwa ada sesuatu yang salah yang bersembunyi di sudut jika ada banyak kondisi persisten kompleks yang dimodifikasi di antara grafik panggilan fungsi yang saling terhubung paling kompleks di antara jutaan baris kode. Bahkan jika setiap antarmuka diuji dengan unit test dan semua lulus, ada
Dalam praktiknya saya sering menemukan pemrograman fungsional membuatnya lebih sulit untuk memahami suatu fungsi. Itu masih memutar otak saya menjadi tikungan dan simpul, terutama dengan logika rekursif yang kompleks. Tetapi semua overhead intelektual yang terkait dengan mencari tahu beberapa fungsi yang ditulis dalam bahasa fungsional dikerdilkan oleh sistem yang kompleks dengan status persisten yang diubah di puluhan ribu fungsi, di mana setiap fungsi yang menyebabkan efek samping menambah total kompleksitas penalaran tentang kebenaran seluruh sistem secara keseluruhan.
Perhatikan bahwa Anda tidak memerlukan bahasa fungsional murni untuk membuat fungsi menghindari efek samping. Status lokal yang diubah dalam fungsi tidak dihitung sebagai efek samping, seperti for
variabel penghitung loop lokal ke fungsi tidak dihitung sebagai efek samping. Saya bahkan menulis kode C saat ini dengan tujuan menghindari efek samping bila mungkin dan telah membuat sendiri perpustakaan struktur data yang tidak dapat diubah dan aman yang dapat dimodifikasi sebagian sementara sisa data disalin dangkal, dan itu telah membantu saya banyak alasan tentang kebenaran sistem saya. Saya sangat tidak setuju dengan penulis dalam hal itu. Setidaknya dalam C dan C ++ dalam perangkat lunak mission-critical, suatu fungsi dapat didokumentasikan sebagai tidak memiliki efek samping jika tidak menyentuh apa pun yang dapat mempengaruhi dunia di luar fungsi.