Today () adalah fungsi yang tidak murni karena hasilnya tergantung pada sesuatu yang tidak Anda berikan; khususnya, waktu sistem saat ini. Oleh karena itu, hasilnya tidak deterministik ketika hanya didasarkan pada input yang diberikan saat doa.
Fungsi murni akan menjadi int Add(int a, int b) {return a + b;}
. Fungsi ini hanya berfungsi dengan apa yang diberikan, dan tidak menggunakan data keadaan eksternal lainnya. Hasil alami dari ini adalah Anda dapat Add(2,2)
dan mendapatkan 4 dari sekarang hingga akhir waktu. Selain itu, karena fungsi tidak mengubah keadaan eksternal (tidak memiliki "efek samping"), Tambahkan () dari 2 dan 2 dari sekarang sampai akhir waktu tidak akan mengubah hal lain dalam sistem, kecuali jika Anda kemudian tetapkan hasil fungsi ke variabel atau gunakan nilai untuk memperbarui status (yang bukan operasi yang dilakukan oleh fungsi itu sendiri). Hampir semua operasi matematika klasik adalah fungsi murni dan dapat diimplementasikan seperti itu.
Today (), di sisi lain, dapat menghasilkan nilai yang sama ketika dipanggil dua kali berturut-turut, tetapi tidak jika dipanggil berulang kali selama beberapa hari. Ini karena itu tergantung pada data keadaan eksternal yang tidak Anda berikan sebagai parameter untuk fungsi tersebut. Akibatnya, tidak mungkin, dalam batas-batas program, untuk mengontrol hasil fungsi Today (). Ini akan menghasilkan nilai yang diberikan pada hari tertentu, dan tidak akan pernah menghasilkan nilai itu pada hari lain, kecuali jika Anda mengubah jam sistem komputer yang menjalankannya (perubahan umumnya terjadi di luar batas-batas program).
Fungsi yang tidak murni tidak selalu merupakan hal yang buruk; fungsi yang tidak murni diperlukan, bahkan dalam bahasa fungsional, untuk berinteraksi dengan apa pun di luar batas program, seperti penyimpanan data, saluran komunikasi, tampilan UI, perangkat periferal, dll. Program yang tidak melakukan hal-hal ini adalah program yang sangat terbatas dalam kegunaannya; Saya bahkan akan menyebut program seperti itu sepele, karena tanpa sarana untuk menerima input atau jalan apa pun untuk memberi tahu Anda tentang hasilnya, mungkin juga tidak melakukan apa-apa. Program yang ditulis dalam bahasa fungsional hanya dapat memiliki input yang disediakan oleh runtime dan menghasilkan output yang dilaporkan ke runtime tanpa ada metode yang tidak murni, tetapi itu karena runtime sedang mengabstraksi semua detail yang tidak murni dari pekerjaan dalam sistem komputer yang tidak sempurna,
Ini hanyalah Hal yang Sangat Baik untuk mengetahui fungsi mana yang Anda gunakan yang murni dan mana yang tidak, sehingga Anda dapat membuat keputusan yang baik tentang bagaimana mereka digunakan. Fungsi yang tidak murni, karena mereka melakukan hal-hal atau bergantung pada hal-hal yang tidak terlihat dari penggunaannya, dapat berperilaku tidak terduga dengan hanya diberi pengetahuan tentang penggunaannya. Pengetahuan lebih lanjut tentang tujuan fungsi, dan dengan demikian apa yang dibutuhkannya dari atau lakukan untuk keadaan eksternal, diperlukan untuk menempatkan suatu sistem yang menggunakannya dalam keadaan konsisten dan dengan demikian mengharapkan hasil deterministik.