Ders 19: kuresel bildirimi (fonksiyondan dışarıdaki değişkene yazma)
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.
This commit is contained in:
@@ -111,7 +111,64 @@ ciftleri_yaz(12)
|
|||||||
2 4 6 8 10 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
|
## Gerçek bir örnek
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user