Bu içeriğimizde yazılım kaynaklarının satır aralarında termonolojik olarak geçen ‘Side Effect’ kavramı üzerine duracak, ne olduğuna dair incelemede ve izahatte bulunacak ve bir durumu kavramsallaştırarak anlam bütününü ifade eden bu terim üzerine bir nebze olsun tefekkür ederek yazımızı sonlandıracağız.
Side Effect; uygulamalarda yapılan sorgulamalar neticesinde verilerde herhangi bir değişikliğin oluşup oluşmaması durumudur. Örneğin, Select * FROM Personeller
sorgusunu ele alırsak eğer ilgili sorgu her ne kadar çalıştırılırsa çalıştırılsın herhangi bir kaynakta değişikliliğe sebep olmayacağından dolayı yan etkisi olmayan(no side effect) bir sorgudur.
Burada şöyle bir metafor ile düşüncemizi destekleyebilir ve kavramın anlaşılmasını kolaylaştırabiliriz; bir ilacı kullandığınızda genellikle istenmeyen kötü etkenlerini ‘yan etkiler’ olarak nitelendirmekteyiz. Halbuki ilacı kullanmanın temel amacı beklenilen/talep edilen/ideal olan etkiyi elde etmek ve şifaya kavuşmaktır. Bu mantık ile fonksiyonların açısından baktığımızda, hedeflediği operasyonu gerçekleştirmesi için çağrılan fonksiyon ideal olan/beklenen sonucu üretebilmek için başka kaynakları yahut verileri değiştiriyorsa eğer işte bu durum yazılımsal açıdan bir ‘yan etki’ olarak nitelendirilmektedir.
Yani kısaca anlayacağınız side effect bir işlem esnasında başka bir durumun, değişkenin, nesnesinin yahut değerin değiştirilmesine atıfta bulunan kavramdır.
Örneğin aşağıdaki tanımlanan fonksiyonu incelerseniz bir yan etkisinin söz konusu olmadığını göreceksiniz;
int topla(int sayi1, int sayi2) => sayi1 + sayi2;
Lakin ilgili fonksiyonu aşağıdaki gibi tanımlarsak eğer bir yan etki söz konusu olacaktır;
int toplam = 0;
int topla(int sayi1, int sayi2) => toplam = sayi1 + sayi2;
Nihayetinde ‘topla’ fonksiyonu her çağrıldığında ‘toplam’ fieldının değerini değiştirecek ve böylece bir yan etki mevzu bahis olacaktır.
Ya da
void topla(int sayi1, int sayi2) => Console.WriteLine(sayi1 + sayi2);
fonksiyonuda toplam sonucunu ‘Console.WriteLine’ ile ekrana/console’a çıktı olarak yazdıracağından dolayı yan etkisi mevcuttur.
‘Yan Etki’ terimi farklı disiplinlerde olduğu gibi yazılım çatısı altında da kulağa olumsuz bir kavram olarak gelebilmektedir. Ancak fonksiyonların amaçları doğrultusunda farklı noktalara temas etmeleri ve bu temas neticesinde farklı kaynaklarda yahut değerlerde yaratacakları değişiklikler faydalı olabilmektedir. Nihayetinde birbirinden farklı kaynakları tek bir noktadan tek bir taleple yönetebilmek yüksek bir bağımlılık seviyesi gerektireceğinden dolayı, işlevsel olarak bir fonksiyon aracılığıyla farklı kaynakları işleme sorumluluğuna sahip fonksiyonların tetiklenmesi yahut o alanları işaretleyen pointerlara müdahale edilmesi sorumlulukların dikey olarak yönetilmesini kolaylaştırmaktadır. Tabi ki de her konuda ve olguda olduğu gibi yan etkilerde ihtiyaç ve gereksinim olduğu durumlarda faydalı olacak, aksi taktirde kesin zararlı diyemesekte lüzumsuz bağımlılıklar doğuracağından dolayı kesinlikle gelişimsel açıdan maliyetli bir süreç getirecek bu durumda performans açısından düşüse sebebiyet verecektir.
Nihai olarak;
Programlamada; bir fonksiyonun kapsamı dışındaki bir değişkeni, değeri veya objeyi değiştirmesi yan etkidir.
yeterli özet olacaktır.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
Kaynak :https://www.gencayyildiz.com/blog/yazilimda-side-effectyan-etki-kavrami-nedir/