diff --git a/dersler/19-fonksiyonlar.md b/dersler/19-fonksiyonlar.md index 1be340b..1ff7f24 100644 --- a/dersler/19-fonksiyonlar.md +++ b/dersler/19-fonksiyonlar.md @@ -111,7 +111,64 @@ ciftleri_yaz(12) 2 4 6 8 10 12 ``` -> **Dikkat:** Fonksiyonun içinde, programın başka bir yerinde kullandığın değişken adlarını kullanmamaya özen göster; her fonksiyonun içinde kendine özgü adlar seç. İyi bir alışkanlık da şudur: fonksiyonlarını dosyanın başına yaz, programın asıl işini altlarına koy. +## Dışarıdaki değişkenler: okumak serbest, değiştirmek bildirim ister + +Fonksiyon, kendisinden önce dosyada tanımlanmış bir değişkeni **okuyabilir**: + +```kbl +kdv_orani = 20 + +fonksiyon kdv(fiyat): + don fiyat * kdv_orani // 100 + +yazdir(kdv(450)) +``` +```cikti +90 +``` + +Ama fonksiyonun içinde ona yeni bir değer **atamak** derleme hatasıdır: + +```kbl goster +sayac = 0 + +fonksiyon arttir(): + sayac = sayac + 1 # hata: 'sayac' fonksiyonun dışında tanımlı +``` + +Neden? Bir fonksiyonun dışarıdaki bir değeri sessizce değiştirmesi, programın bambaşka bir yerinde "bu değer neden değişti?" sorusunu doğurur. Gerçekten değiştirmek istiyorsan fonksiyonun **ilk satırına** `kuresel` yazarak bunu açıkça söylersin: + +```kbl +sayac = 0 + +fonksiyon arttir(): + kuresel sayac + sayac = sayac + 1 + +arttir() +arttir() +yazdir(sayac) +``` +```cikti +2 +``` + +Birden çok değişken için adları virgülle ayır: `kuresel toplam, adet`. Çoğu zaman daha temiz yol ise değeri parametre olarak alıp `don` ile geri vermektir; böylece neyin değiştiği çağrının olduğu satırda görünür: + +```kbl +fonksiyon arttir(n): + don n + 1 + +sayac = 0 +sayac = arttir(sayac) +sayac = arttir(sayac) +yazdir(sayac) +``` +```cikti +2 +``` + +> **İpucu:** Fonksiyonlarını dosyanın başına yaz, programın asıl işini altlarına koy; fonksiyonun içinde de kendine özgü adlar seç. ## Gerçek bir örnek