Today () saf olmayan bir işlevdir, çünkü sonucu size vermediğiniz bir şeye bağlıdır; Özellikle, geçerli sistem zamanı. Bu nedenle, sonuçları yalnızca başvuru sırasında sağlanan girdilere dayanarak belirleyici değildir.
Saf bir işlev olacaktır int Add(int a, int b) {return a + b;}
. İşlev yalnızca verilenle çalışır ve başka hiçbir harici durum verisi kullanmaz. Bunun doğal sonucu Add(2,2)
şu an 4'ünü zamanın sonuna kadar alabilirsin. Ek olarak, işlev herhangi bir dış durumu değiştirmediğinden ("yan etkisi" yoktur), sizden sonra 2 ve 2'yi ekleyiniz (zamanın sonuna kadar) işlevin sonucunu bir değişkene atayın ya da durumu güncellemek için değeri kullanın (bu işlev tarafından gerçekleştirilen bir işlem değildir). Neredeyse tüm klasik matematiksel işlemler saf fonksiyonlardır ve bu şekilde uygulanabilir.
Bugün (), diğer taraftan, olabilecek birkaç gün arka arkaya denilen eğer bir satırda iki kez aradım, ama aynı değeri vermektedir. Bunun sebebi, fonksiyonun bir parametresi olarak sizin tarafınızdan verilmeyen harici durum verilerine bağlı olmasıdır. Sonuç olarak, programın sınırları dahilinde, Today () işlevinin sonucunu kontrol etmek mümkün değildir. Belirli bir günde belirli bir değer üretecek ve üzerinde çalıştığı bilgisayarın sistem saatini değiştirmediğiniz sürece (genellikle programın sınırları dışında gerçekleşen bir değişiklik olmadıkça) bu değeri başka hiçbir günde üretmeyecektir.
Saf olmayan bir fonksiyon mutlaka kötü bir şey değildir; Fonksiyonel dillerde bile, veri depoları, iletişim boru hatları, kullanıcı arayüzü ekranları, çevresel aygıtlar vb. gibi program sınırları dışındaki herhangi bir şeyle etkileşime girmek için impure işlevlerine ihtiyaç duyulur. Bunlardan hiçbirini yapmayan bir program bu, kullanımında keskin bir şekilde sınırlıdır; Böyle bir programın önemsiz olduğunu söyleyeceğim bir yere bile gideceğim, çünkü girdiyi ya da çıktısını size bildirecek herhangi bir yolu kabul etmeden hiçbir şey yapmıyor olabilir. İşlevsel dillerde yazılmış programlar, yalnızca çalışma zamanı tarafından sağlanan girdiye sahip olabilir ve açıkça tanımlanmış herhangi bir kesin olmayan yöntem olmadan çalışma zamanına bildirilen bir çıktı üretebilir, ancak çalışma zamanının kusurlu bir bilgisayar sistemi içinde çalışmanın tüm bu saf olmayan ayrıntılarını kaldırması nedeniyle,
Kullanmakta olduğunuz işlevlerin hangilerinin saf olduğunu ve hangilerinin olmadıklarını bilmek çok iyi bir şeydir, bu yüzden nasıl kullanıldığı konusunda iyi kararlar verebilirsiniz. Saf olmayan işlevler, bir şeyleri yaptıkları veya kullanımlarından açıkça görülmeyen şeylere bağımlı oldukları için, yalnızca kullanım bilgisi dikkate alındığında tahmin edilemez şekilde davranabilir. İşlevin amacını ve dolayısıyla dış devletten ne gerektirdiğini veya dışsal bir yapıya ihtiyacı olan daha fazla bilgi, onu tutarlı bir durumda kullanan bir sistemi yerleştirmek ve böylece belirleyici bir sonuç beklemek için gereklidir.