Ek bilgiler
Python'da Fonksiyon Tanımlamak ve Temel Prensipler
Fonksiyonlar, her işi tek bir çuvala doldurduğumuz karmaşık yapılar değil; belli ve sınırları çizilmiş iş bloklarını üstlenen Lego parçalarıdır. Sabah evden çıkıp üç araç değiştirerek ofisteki masaya varmaya çalışan devasa bir süreç tek bir fonksiyon olamaz. Bunun yerine alarmı kurmak, kalkmak, yürümek ve otobüse binmek gibi ayrı ayrı, bağımsız ve tekrar tekrar farklı yerlerde de kullanabileceğimiz küçük parçalar tasarlamalıyız. Fonksiyonun özü; anlaşılır, odaklanmış ve gerektiğinde başka bloklarla birleşebilen modüler yapılar kurmaktır.
Python'da fonksiyonları def anahtar kelimesiyle tanımlıyor, blok yapısını iki nokta üst üste ve girintilerle kuruyoruz. Bir fonksiyonun sadece adını yazmak onu çalıştırmaz; Python bize sadece onun bir fonksiyon nesnesi olduğunu söyler. Fonksiyonu fiilen tetiklemek (run etmek) için parantezleri (()) mutlaka açıp kapatmamız gerekir. Ayrıca ekrana bir şey basmakla fonksiyonun dışarıya veri üretmesi aynı şey değildir; print sadece bizim gözümüzün görmesi için bir çıktıdır, gerçek veri akışı ve değer döndürme sonraki adımlarda göreceğimiz return ile sağlanır.
Geliştirmede yapılan en tehlikeli hatalardan biri, fonksiyonun gövdesinde dışarıdaki global değişkenlere doğrudan güvenmektir. Fonksiyonu başka bir dosyaya taşıdığınızda o global değişken yerinde yoksa kod patlar, çalışma anında kesilir ve akış ilerlemez. Bir fonksiyon kendi kendine yetmeli, dışarıdaki veriye körü körüne bağımlı kalmamalıdır. Fonksiyonun ihtiyaç duyduğu verileri parametre olarak açıkça istemeli ve global durum bağımlılığından kesinlikle kaçınmalıyız; bu konunun detaylarını ve parametre aktarımını bir sonraki derste ele alacağız.
📌 Hatırlanması Gereken Temel Noktalar (Takeaways)
- Lego Parçası Prensibi: Fonksiyonlar her işi yapan dev bloklar değil, tek bir amaca odaklanan ve yeniden kullanılabilir küçük parçalar olmalıdır.
- Parantezlerin Önemi: Fonksiyon ismini yalın bırakmak yalnızca referansını gösterir; çalıştırmak (run etmek) için mutlaka
() parantezleri kullanılmalıdır.
- Print ve Return Ayrımı:
print ifadesi sadece ekranda gözümüzün görmesi içindir; programatik olarak dışarıya veri aktarmak veya değer saklamak anlamına gelmez.
- Global Değişken Riski: Fonksiyon içerisinde global kapsamdaki değişkenleri doğrudan kullanmak kodun taşınabilirliğini bozar ve çalışma anı hatalarına (runtime error) yol açar.
- Hata Akışı Keser: Bağımlı olunan bir veri bulunamadığında fonksiyon çöker ve programın sonraki adımlarının çalışmasını tamamen durdurur.
📚 Ek Kaynaklar ve Derinlemesine Okuma Önerileri (Ek Bilgi)