Saf fonksiyonlarla çalışmak çok daha az stresli olabilir, çünkü onları kolayca test edebilir ve onlar hakkında daha fazla güvenle akıl yürütebilirsiniz.
Saf işlevler, yan etkiler oluşturmayan ve aynı girdi parametreleriyle çağrıldığında her zaman aynı çıktıyı döndüren işlevlerdir.
Kodunuzun temiz, bakım yapılabilir ve test edilebilir olduğundan emin olmak için saf işlevleri kullanabilirsiniz. Bu işlevler, öngörülebilir oldukları ve dış durumları değiştirmedikleri için bu görevler için idealdir.
Ayrıca hata ayıklaması daha kolaydır, bu da onları karmaşık yazılım sistemleri geliştirmede yardımcı kılar. Burada JavaScript'teki saf işlevleri, özelliklerini ve avantajlarını keşfedeceksiniz.
Saf Bir Fonksiyonun Özellikleri
İçin bir işlev "saf" olması için birkaç gereksinimi karşılaması gerekir.
Sabit Getiri Değeri
Saf bir işlev, çağrıldığı sayıya bakılmaksızın, aynı girdi verildiğinde her zaman aynı değeri döndürmelidir.
Örneğin, aşağıdaki işlevi göz önünde bulundurun:
işlevçarpmak(bir, b) {
geri dönmek bir * b;
}
bu çarpmak Yukarıdaki örnekteki işlev, her zaman iki bağımsız değişkeninin çarpımını döndürür. Aynı bağımsız değişken kümesi verildiğinde, sabit bir dönüş değeri vardır.
Bu işlevi aynı bağımsız değişkenlerle birkaç kez çağırmak, her seferinde aynı çıktıyı verecektir. Örneğin:
çarpmak(2, 3); // 6 döndürür
çarpmak(2, 3); // 6 döndürür
çarpmak(2, 3); // 6 döndürür
Alternatif olarak, aşağıdaki örneği göz önünde bulundurun:
işlevçarpmaRastgeleSayı(sayı) {
geri dönmek sayı * Matematik.zemin(Matematik.rastgele() * 10);
}
çarpmaRandomSayı(5); // Öngörülemeyen sonuçlar
çarpmaRandomSayı(5); // Öngörülemeyen sonuçlar
çarpmaRandomSayı(5); // Öngörülemeyen sonuçlar
bu çarpmaRastgeleSayı yukarıdaki işlev, onu her çağırışınızda farklı sonuçlar döndürerek onu saf yapmaz. Bu işlevin sonuçları tahmin edilemez, bu nedenle ona dayanan bileşenleri test etmek zordur.
Yan efektleri olmayan
Saf bir işlev herhangi bir yan etki üretmemelidir. Yan etki, genel değişkenleri, konsol çıktısını, ağ isteklerini veya DOM manipülasyonunu değiştirmek gibi, işlevin kapsamı dışındaki herhangi bir durum veya davranış değişikliğini ifade eder.
Saf bir fonksiyonun bir yan etkisi olduğunda, artık saf değildir çünkü dış durumu etkiler ve gözlemlenebilir hiçbir yan etkiye sahip olmama ilkesini ihlal eder. Bu nedenle, saf işlevler, programın durumunu değiştirmemelerini sağlamak için yan etkilerden kaçınır.
Örneğin, aşağıdaki örneği göz önünde bulundurun:
izin vermek saymak = 0;
işlevartış() {
sayı++;
konsol.log (sayım);
}
artış(); // Günlükler 1
artış(); // Günlükler 2
artış(); // Günlükler 3
bu artış Bu örnekteki işlev, değiştirmenin yan etkisine sahiptir. saymak kapsamı dışında değişkendir. Ayrıca konsola giriş yapar.
Bu işlev saf değildir çünkü bir yan etkisi vardır, bu da çıktısını tahmin etmeyi ve tek başına test etmeyi zorlaştırabilir. Saf hale getirmek için, içine almak için değiştirebilirsiniz. saymak değişkeni bir bağımsız değişken olarak kullanır ve herhangi bir harici durumu değiştirmeden artan değeri döndürür.
Şöyle:
işlevartış(saymak) {
geri dönmek say + 1;
}
artış(1); // 2 döndürür
artış(1); // 2 döndürür
artış(1); // 2 döndürür
versiyonu artış Yukarıdaki örnekteki işlevin, herhangi bir harici değişkeni değiştirmediği veya herhangi bir değeri günlüğe kaydetmediği için hiçbir yan etkisi yoktur. Ayrıca, onu ne kadar çağırırsanız çağırın, aynı girdi için aynı değeri döndürür. Bu nedenle, saf bir işlevdir.
Diğer Özellikler
Sabit bir getiri değerine sahip olmanın ve herhangi bir yan etki yaratmamanın yanı sıra, kullanırken aşağıdaki kurallara uymalısınız. JavaScript işlevi oluşturma saf olmak istediğini:
- İşleviniz, bağımsız değişkenlerinden hiçbirini değiştirmemelidir. Bunun yerine, herhangi bir işlem mutasyon gerektiriyorsa, bağımsız değişkenin bir kopyasını yapın ve kopyayı değiştirin.
- İşlevinizin her zaman bir dönüş değeri olmalıdır. İşlevinizin bir dönüş değeri veya herhangi bir yan etkisi yoksa, hiçbir şey yapamaz!
- İşleviniz herhangi bir dış duruma bağlı olmamalıdır.
Saf Fonksiyonların Avantajları
Saf işlevlerin, saf olmayan işlevlere göre belirli faydaları vardır, bunlardan bazıları aşağıdakileri içerir.
test edilebilirlik
Giriş/çıkış davranışları iyi tanımlandığından, saf işlevlerin test edilmesi kolaydır. Ayrıca, saf fonksiyonlar dış duruma veya yan etkilere bağlı değildir. Bu nedenle, programın diğer bölümleriyle herhangi bir bağımlılık veya etkileşim konusunda endişelenmeden bunları ayrı ayrı test edebilirsiniz.
Buna karşılık, dış duruma bağlı olan veya yan etkiler üreten saf olmayan işlevlerin test edilmesi daha zor olabilir çünkü bunların davranışları programın durumuna veya diğer dış etkenlere bağlı olabilir. Bu, kapsamlı test senaryoları oluşturmayı zorlaştırabilir ve işlevin tüm senaryolarda doğru şekilde çalışmasını sağlayabilir.
Ezberleme
Saf işlevler her zaman aynı girdi için aynı çıktıyı ürettiğinden ve hiçbir yan etki üretmediğinden, bunları kolayca ezberleyebilirsiniz.
Bu özelliklere güvenerek ve not almayı kullanarak, belirli bir girdi için saf işlev çağrısının sonucunu önbelleğe alabilirsiniz. İşleviniz daha sonra aynı girişle bir sonraki çağrıldığında önbelleğe alınmış sonucu döndürebilir.
Saf fonksiyonları ezberleme bir programın performansını, özellikle aynı girdiyle tekrar tekrar uğraşan pahalı hesaplamalar için, programın durumuna müdahale endişesi duymadan artırabilir.
Buna karşılık, saf olmayan işlevler, programın durumuna veya dış etkenlere bağlı olarak aynı girdi için farklı sonuçlar üretebilir. Çağrılar arasında işlevin bağımlılıkları veya dış durumu değişirse, önbelleğe alınan sonuç artık geçerli olmayabileceğinden, bu onları ezberlemeyi zorlaştırır.
eşzamanlılık
Saf işlevler herhangi bir dış durumu değiştirmediğinden veya herhangi bir yan etki üretmediğinden, iş parçacığı açısından güvenlidirler. Yarış koşulları veya senkronizasyon sorunları hakkında endişelenmeden bunları aynı anda çalıştırabilirsiniz.
Buna karşılık, saf olmayan işlevlerin aynı anda yürütülmesi zor olabilir çünkü paralel olarak yürütüldüklerinde birbirleriyle etkileşime girebilir veya beklenmeyen davranışlar üretebilirler. Örneğin, iki iş parçacığı aynı global değişkene erişir ve onu değiştirirse, birbirlerinin değişikliklerinin üzerine yazabilir veya tutarsız sonuçlar üretebilirler.
Saf Fonksiyonlar vs. Saf Olmayan Fonksiyonlar
Saf ve saf olmayan fonksiyonların bir kombinasyonunu kullanarak programlar yazabilirsiniz, çünkü her türün kendi kullanımları vardır.
Saf işlevlerin optimize edilmesi, test edilmesi ve paralelleştirilmesi kolaydır; bu da onları işlevsel programlama, önbelleğe alma, test etme, paralel programlama ve veri işleme görevleri gibi kullanım durumlarına uygun hale getirir.
Bununla birlikte, saf olmayan işlevler, test etme ve eşzamanlılık konusunda zorluklar yaratır, ancak değişken veri yapılarıyla çalışırken veya harici sistemler ve kaynaklarla etkileşimde bulunurken faydalıdır.