From 121b8ac2bdd211aaabe23518f416faac42dd6f6b Mon Sep 17 00:00:00 2001 From: Semih Date: Sun, 18 Oct 2026 08:46:50 +0300 Subject: [PATCH] =?UTF-8?q?Ders=2019:=20kuresel=20bildirimi=20(fonksiyonda?= =?UTF-8?q?n=20d=C4=B1=C5=9Far=C4=B1daki=20de=C4=9Fi=C5=9Fkene=20yazma)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fonksiyon içinden modül düzeyindeki değişkene atama artık 'kuresel ad' bildirimi istiyor (KabaLang KARAR D10). Eski 'aynı adları kullanma' notu yerine okuma/yazma kuralı, kuresel örneği ve parametre + don seçeneği. --- dersler/19-fonksiyonlar.md | 59 +++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) 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