⚙️ Fonksiyonlar & Lambda

Fonksiyonlar & Lambda: Bir fonksiyon, "çay yap" tarifi gibi: su kaynat, demle, koy. Tarifi bir kere yazarsın, sonra her çay isteğinde sadece ÇAĞIRIRSIN — adımları tekrar yazmana

Bir fonksiyon, "çay yap" tarifi gibi: su kaynat, demle, koy. Tarifi bir kere yazarsın, sonra her çay isteğinde sadece ÇAĞIRIRSIN — adımları tekrar yazmana gerek yok. Ama gerçek bir QA tuzağı tam burada gizli: def add_test_case(case, cases=[]) yazarsan, o [] varsayılan değeri SADECE BİR KEZ (fonksiyon tanımlanırken) oluşturulur ve TÜM çağrılar arasında PAYLAŞILIR — yani bir testte listeye eleman eklersen, bir sonraki çağrıda "boş liste" beklerken önceki çağrının kalıntılarını bulursun. Java'da bu sorun hiç YOKTUR çünkü varsayılan değerler her çağrıda yeniden değerlendirilir. Çözüm: cases=None yaz, fonksiyon içinde "if cases is None: cases = []" ile her seferinde TAZE bir liste oluştur — bu, Python'a özgü en sinsi bug kalıplarından biridir. Peki Python neden böyle "tehlikeli" bir tasarım seçmiş — varsayılan değeri her çağrıda yeniden oluşturmak daha güvenli olmaz mıydı? Olurdu, ama Python'da def satırı bir bildirim değil, çalışan bir İFADEDİR: fonksiyon tanımlandığı anda varsayılanlar bir kez hesaplanıp fonksiyon nesnesine iliştirilir. Bu, dilin tutarlılığının bedelidir — aynı kural sayesinde varsayılan olarak pahalı bir hesabın sonucunu da bir kez hesaplatabilirsin. QA açısından bu tuzağın yüzü tanıdıktır: bir test dosyasında tek tek geçen testler, hep birlikte koşulduğunda kırılır ve sen "test sırası bozuk" diye ararsın; oysa paylaşılan bir varsayılan liste, bir testin verisini diğerine sızdırmıştır. Bu yüzden pytest'te de fixture'lar her test için yeniden kurulur — aynı sorunun çerçeve düzeyindeki çözümü budur.

Java'da metod tanımlarken erişim belirleyici, dönüş tipi yazılır: public String greet(String name). Python'da sadece "def" yeterli: def greet(name):. Tip ipuçları opsiyonel ama önerilen.

Micro Lab: Python kod yazma

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adim Adim: Python kod yazma

Girdi ve veri tiplerini oku

Kritik satiri en kucuk degisiklikle tamamla

Kodu calistirip beklenen ciktiyi karsilastir

Hata varsa traceback veya assertion mesajini oku

Test raporu icin sonucu tekrar kullanilabilir hale getir

run_test(url, method="GET", timeout=30) çağrılırken Python parametreleri hangi sırayla eşleştirir?

Önce pozisyonel (positional) argümanlar sırayla eşleştirilir

Sonra keyword argümanlar isimlerine göre eşleştirilir

Eşleşmeyen parametreler için tanımdaki varsayılan (default) değerler kullanılır