⚙️ Saf Fonksiyon Nedir ❓ Yan Etki, Immutable Veri ve Temiz Kod İlişkisi Nasıl Anlaşılmalıdır ❓

Paylaşımı Faydalı Buldunuz mu❓

  • Evet

    Oy: 4 100.0%
  • Hayır

    Oy: 0 0.0%

  • Kullanılan toplam oy
    4

ErSan.Net

ErSan KaRaVeLioĞLu
Yönetici
❤️ AskPartisi.Com ❤️
Moderator
MT
21 Haz 2019
47,375
2,494,328
113
42
Ceyhan/Adana

İtibar Puanı:

⚙️ Saf Fonksiyon Nedir ❓ Yan Etki, Immutable Veri ve Temiz Kod İlişkisi Nasıl Anlaşılmalıdır ❓


"İyi kodun sessiz gücü, ne kadar karmaşık iş yaptığıyla değil; aynı işi ne kadar az belirsizlikle yapabildiğiyle anlaşılır."
Ersan Karavelioğlu

Saf fonksiyon, fonksiyonel programlamanın en temel yapı taşlarından biridir. En basit tanımıyla saf fonksiyon şu iki özelliğe sahip fonksiyondur:


  1. Aynı girdi verilirse her zaman aynı çıktıyı üretir.
  2. Dış dünyada hiçbir yan etki oluşturmaz.

Yani bir fonksiyon gerçekten safsa, sadece kendisine verilen veriyi işler ve sonucunu döndürür. Dışarıda bir şeyi gizlice değiştirmez.


1️⃣ Saf Fonksiyon Nedir ❓


Saf fonksiyonun mantığı çok nettir:
Girdi alır, işler, çıktı verir.


Mesela şöyle bir fonksiyon düşün:


def topla(a, b):
return a + b


Bu saf fonksiyondur.
Çünkü:


topla(2, 3) her zaman 5 döndürür.
topla(10, 1) her zaman 11 döndürür.


Ayrıca bu fonksiyon dışarıdaki hiçbir şeyi değiştirmez.


2️⃣ Saf Fonksiyon Neden Önemlidir ❓


Saf fonksiyon önemlidir çünkü kodu daha:


  • öngörülebilir
  • test edilebilir
  • okunabilir
  • güvenli

hâle getirir.


Bir fonksiyonun ne yaptığını anlamak için sadece parametrelerine bakabiliyorsan, o fonksiyonu anlamak çok daha kolay olur.


3️⃣ Aynı Girdi Aynı Çıktı Ne Demektir ❓


Bir fonksiyonun sonucu dış etkilere bağlı değilse, bu ilke sağlanır.


Mesela şu örnek saf değildir:


import random


def rastgele_sayi():
return random.randint(1, 10)


Bu fonksiyon parametre almıyor ama her çağrıda farklı sonuç verebilir.
Bu yüzden saf değildir.


Saf fonksiyonda sürpriz olmaz.
Sonuç her zaman girdiye bağlıdır.


4️⃣ Yan Etki Nedir ❓


Yan etki, fonksiyonun sadece çıktı döndürmekten fazlasını yapmasıdır.


Örnek yan etkiler:


  • ekrana yazı yazmak
  • dosyaya veri kaydetmek
  • veritabanına yazmak
  • global değişken değiştirmek
  • dışarıdaki listeyi değiştirmek
  • internet isteği göndermek

Mesela şu fonksiyon yan etki içerir:


def selam_ver():
print("Merhaba")


Bu fonksiyon ekrana yazı bastığı için yan etkili bir fonksiyondur.


Yan etki her zaman kötü değildir. Ama iş mantığının içine fazla yayılırsa kod karmaşıklaşır.


5️⃣ Saf Olmayan Fonksiyon Örneği ❓


Şöyle düşün:


sayac = 0


def arttir():
global sayac
sayac = sayac + 1
return sayac


Bu saf değildir.
Çünkü dışarıdaki sayac değişkenini değiştiriyor.


Yani fonksiyon sadece sonuç döndürmüyor, sistemin durumunu da değiştiriyor.


6️⃣ Immutable Veri Nedir ❓


Immutable veri, oluşturulduktan sonra yerinde değiştirilmemeye çalışılan veridir.


Mesela şu yaklaşım mutable yani değiştirilebilir yapıdadır:


liste = [1, 2, 3]
liste.append(4)


Burada eski liste değişti.


Fonksiyonel yaklaşıma daha yakın olan kullanım ise şöyledir:


liste = [1, 2, 3]
yeni_liste = liste + [4]


Burada eski liste korunur, yeni liste üretilir.


İşte immutable düşünce budur:
Veriyi bozma, yeni veri üret.


7️⃣ Immutable Yaklaşım Neden Faydalıdır ❓


Çünkü veri yerinde değiştiğinde hata takibi zorlaşır.


İnsan şu soruları sormaya başlar:


  • Bu veri nerede değişti ❓
  • Kim değiştirdi ❓
  • Ne zaman değişti ❓
  • Başka hangi kod bundan etkilendi ❓

Ama eski veri korunursa, takip daha kolay olur.


Bu yüzden immutable yaklaşım büyük projelerde çok değerlidir.


8️⃣ Saf Fonksiyon ile Immutable Veri Arasındaki İlişki Nedir ❓


Saf fonksiyon, mümkün olduğunca girdiyi bozmadan çalışmak ister.
Immutable veri de zaten bunu destekler.


Yani:


  • saf fonksiyon veriyle sessizce oynamaz
  • immutable yaklaşım veriyi yerinde bozmaz

Bu ikisi birlikte kullanıldığında kod daha temiz olur.


9️⃣ Temiz Kod ile Bağlantısı Nedir ❓


Temiz kod demek sadece kısa kod demek değildir.
Temiz kod demek:


  • ne yaptığı belli olan
  • sürpriz üretmeyen
  • okununca anlaşılabilen
  • test edilmesi kolay olan

kod demektir.


Saf fonksiyonlar bu temizliği destekler. Çünkü fonksiyonun davranışı nettir.


Mesela şöyle bir fonksiyon çok daha temizdir:


def kdv_ekle(fiyat):
return fiyat * 1.20


Bu fonksiyon çok açık çalışır.
Ne aldığını ve ne verdiğini hemen anlarsın.


🔟 Saf Fonksiyon Test Yazımını Neden Kolaylaştırır ❓


Çünkü saf fonksiyonun davranışı sabittir.


Mesela:


def kare(x):
return x * x


Bunu test etmek çok kolaydır:


kare(2) sonucu 4 olmalı
kare(5) sonucu 25 olmalı
kare(0) sonucu 0 olmalı


Dış bağlantı yok, gizli durum yok, sürpriz yok.


Ama içinde dosya okuyan, saat kullanan, dış değişken değiştiren fonksiyonları test etmek çok daha zordur.


1️⃣1️⃣ Yan Etkiyi Tamamen Yok Etmek mi Gerekir ❓


Hayır. Gerçek uygulamalarda yan etki gerekir.


Mesela:


  • kullanıcıya sonuç göstermek
  • dosya kaydetmek
  • veri çekmek
  • veri yazmak

bunlar gereklidir.


Doğru yaklaşım şudur:


İş mantığını mümkün olduğunca saf yaz.
Yan etkileri ayrı katmanda tut.


Yani önce hesapla, sonra gerekirse dış dünyaya yaz.


1️⃣2️⃣ Kötü ve Daha Temiz Mantık Arasındaki Fark ❓


Daha karışık yaklaşım:


Bir fonksiyon hem hesap yapıyor, hem ekrana yazıyor, hem global değişken değiştiriyor.


Daha temiz yaklaşım:


Bir fonksiyon sadece hesap yapıyor.
Ayrı bir yerde sonuç ekrana yazdırılıyor.


Bu ayrım çok önemlidir. Çünkü kod parçaları görevlerine göre ayrılmış olur.


1️⃣3️⃣ Günlük Hayattan Basit Bir Örnek ❓


Diyelim bir ürün fiyatına KDV ekleyeceksin.


Temiz ve saf mantık:


def kdv_ekle(fiyat):
return fiyat * 1.20


Sonra başka yerde:


sonuc = kdv_ekle(100)
ekrana_yaz(sonuc)


Burada hesap ayrı, dış dünya işi ayrı.


Bu çok daha düzenli yapıdır.


1️⃣4️⃣ Saf Fonksiyon Yazmak İçin Nelere Dikkat Etmelisin ❓


Şunlara dikkat et:


  • Fonksiyon parametre ile çalışsın
  • Sonuç return ile dönsün
  • Global değişken kullanmasın
  • Dışarıdaki veriyi değiştirmesin
  • İçinde print, dosya yazma, ağ isteği gibi işlemler olmasın
  • Aynı veriyle her zaman aynı sonucu üretsin

Bu kurallara ne kadar yaklaşırsan, fonksiyonların o kadar temiz olur.


1️⃣5️⃣ Hangi Tür Fonksiyonlar Genelde Saf Yazılabilir ❓


Özellikle şunlar çok uygundur:


  • hesaplama işlemleri
  • veri dönüştürme işlemleri
  • filtreleme işlemleri
  • formatlama işlemleri
  • iş kuralları
  • validasyon kontrolleri

Mesela:


  • fiyat hesaplama
  • indirim uygulama
  • metni büyük harfe çevirme
  • listedeki çift sayıları seçme

bunlar çok rahat saf yazılabilir.


1️⃣6️⃣ Saf Olmayan Ama Gerekli Fonksiyonlar Hangileridir ❓


Şunlar çoğu zaman yan etkilidir:


  • ekrana çıktı verme
  • dosya okuma / yazma
  • veritabanı işlemleri
  • API çağrıları
  • sistem saati kullanma
  • kullanıcıdan input alma

Bunlar gereksiz değildir.
Sadece bunları çekirdek mantıktan ayırmak daha sağlıklıdır.


1️⃣7️⃣ En Büyük Karışıklık Nerede Olur ❓


En büyük karışıklık, saf olmayan fonksiyonu saf gibi düşünmekten gelir.


Mesela fonksiyonun görünüşte basit olabilir ama içeride:


  • global veri değiştiriyordur
  • listeyi yerinde bozuyordur
  • dışarıdan bir bilgiye sessizce bağımlıdır
  • zamanı kullanıyordur

İşte bunlar görünmeyen karmaşa üretir.


1️⃣8️⃣ Kısa Özet Mantığı ❓


Saf fonksiyon = temiz hesap makinesi gibi çalışır.
Yan etki = dışarıyı değiştirir.
Immutable veri = mevcut veriyi bozmak yerine yenisini üretir.
Temiz kod = davranışı açık, güvenilir ve izlenebilir kod demektir.


Bu dördü birlikte düşünüldüğünde çok güçlü bir yazılım temeli oluşur.


1️⃣9️⃣ Son Söz ❓


Saf fonksiyon, yan etkiyi azaltma ve immutable veri yaklaşımı birlikte düşünüldüğünde, kod çok daha sağlam bir yapıya kavuşur. Çünkü yazılımda büyük sorunların önemli kısmı, algoritmanın zor olmasından değil; kimin neyi, nerede, sessizce değiştirdiğinin bilinmemesinden çıkar.


Saf fonksiyon sana şunu kazandırır:
Netlik.
Yan etkiyi sınırlamak şunu kazandırır:
Kontrol.
Immutable düşünce şunu kazandırır:
İzlenebilirlik.
Bunların birleşimi ise temiz kodu doğurur.


“Kodun gerçekten temiz olduğu an, yalnız çalıştığı an değil; neden çalıştığının da berrak biçimde görülebildiği andır.”
Ersan Karavelioğlu
 

M͜͡T͜͡

Geri
Üst Alt