169 lines
3.6 KiB
Markdown
169 lines
3.6 KiB
Markdown
---
|
|||
|
|
baslik: Fonksiyon tanımlama
|
||
|
|
bolum: Fonksiyonlar
|
||
|
|
ozet: Bir işi adlandırıp istediğin kadar çağırmak
|
||
|
|
---
|
||
|
|
|
||
|
|
Aynı kodu programın üç yerinde yazıyorsan, bir yerde hata yaptığında üç yerde düzeltmen gerekir. Fonksiyon, bir işi yapan ve bir adı olan kod bloğudur: bir kez yazarsın, istediğin kadar çağırırsın.
|
||
|
|
|
||
|
|
## İlk fonksiyonun
|
||
|
|
|
||
|
|
Tanım `fonksiyon ad():` ile başlar; gövdesi girintilidir. Fonksiyon tanımlandığında çalışmaz, **çağrıldığında** çalışır.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon ayrac():
|
||
|
|
yazdir("─".tekrarla(20))
|
||
|
|
|
||
|
|
ayrac()
|
||
|
|
yazdir("Günün menüsü")
|
||
|
|
ayrac()
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
────────────────────
|
||
|
|
Günün menüsü
|
||
|
|
────────────────────
|
||
|
|
```
|
||
|
|
|
||
|
|
## Parametre almak
|
||
|
|
|
||
|
|
Parantez içine yazdığın ad bir **parametredir**. Çağırırken verdiğin değer onun yerine geçer.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon selamla(ad):
|
||
|
|
yazdir(f"Merhaba {ad}, hoş geldin.")
|
||
|
|
|
||
|
|
selamla("Zeynep")
|
||
|
|
selamla("Mehmet")
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
Merhaba Zeynep, hoş geldin.
|
||
|
|
Merhaba Mehmet, hoş geldin.
|
||
|
|
```
|
||
|
|
|
||
|
|
Birden çok parametre virgülle ayrılır; değerler aynı sırayla verilir.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon fis_satiri(urun, adet, fiyat):
|
||
|
|
yazdir(f"{urun:<10}{adet:>3} x {fiyat:>6.2f}")
|
||
|
|
|
||
|
|
fis_satiri("Ekmek", 2, 12.5)
|
||
|
|
fis_satiri("Peynir", 1, 149.0)
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
Ekmek 2 x 12.50
|
||
|
|
Peynir 1 x 149.00
|
||
|
|
```
|
||
|
|
|
||
|
|
## Değer döndürmek: don
|
||
|
|
|
||
|
|
`don` sonucu çağıran yere geri verir. Dönen değeri bir değişkene atayabilir ya da doğrudan kullanabilirsin.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon kare(x):
|
||
|
|
don x * x
|
||
|
|
|
||
|
|
alan = kare(7)
|
||
|
|
yazdir(alan)
|
||
|
|
yazdir(kare(3) + kare(4))
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
49
|
||
|
|
25
|
||
|
|
```
|
||
|
|
|
||
|
|
`don` fonksiyonu orada bitirir; altındaki satırlar çalışmaz. Cevap belli olduğu anda çıkmak kodu sadeleştirir.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon not_harfi(puan):
|
||
|
|
eger puan >= 85:
|
||
|
|
don "AA"
|
||
|
|
eger puan >= 70:
|
||
|
|
don "BA"
|
||
|
|
eger puan >= 50:
|
||
|
|
don "CC"
|
||
|
|
don "FF"
|
||
|
|
|
||
|
|
yazdir(not_harfi(92))
|
||
|
|
yazdir(not_harfi(74))
|
||
|
|
yazdir(not_harfi(31))
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
AA
|
||
|
|
BA
|
||
|
|
FF
|
||
|
|
```
|
||
|
|
|
||
|
|
## Fonksiyon fonksiyonu çağırabilir
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon cift_mi(n):
|
||
|
|
don n % 2 == 0
|
||
|
|
|
||
|
|
fonksiyon ciftleri_yaz(son):
|
||
|
|
dongu i icinde 1..son:
|
||
|
|
eger cift_mi(i):
|
||
|
|
konsol.yaz(f"{i} ")
|
||
|
|
yazdir()
|
||
|
|
|
||
|
|
ciftleri_yaz(12)
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
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.
|
||
|
|
|
||
|
|
## Gerçek bir örnek
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
fonksiyon kdvli(fiyat):
|
||
|
|
don fiyat * 1.20
|
||
|
|
|
||
|
|
fonksiyon fiyat_yaz(urun, fiyat):
|
||
|
|
yazdir(f"{urun}: {fiyat:.2f} TL (KDV dahil {kdvli(fiyat):.2f} TL)")
|
||
|
|
|
||
|
|
fiyat_yaz("Kulaklık", 850.0)
|
||
|
|
fiyat_yaz("Kılıf", 120.0)
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
Kulaklık: 850.00 TL (KDV dahil 1020.00 TL)
|
||
|
|
Kılıf: 120.00 TL (KDV dahil 144.00 TL)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Alıştırma
|
||
|
|
|
||
|
|
```alistirma
|
||
|
|
`cevre(en, boy)` adında, bir dikdörtgenin çevresini döndüren bir fonksiyon yaz. Sonra `cevre(5, 3)` ve `cevre(10, 10)` sonuçlarını ayrı satırlarda yazdır.
|
||
|
|
%%%
|
||
|
|
# buraya yaz
|
||
|
|
|
||
|
|
yazdir(cevre(5, 3))
|
||
|
|
yazdir(cevre(10, 10))
|
||
|
|
%%%
|
||
|
|
fonksiyon cevre(en, boy):
|
||
|
|
don 2 * (en + boy)
|
||
|
|
|
||
|
|
yazdir(cevre(5, 3))
|
||
|
|
yazdir(cevre(10, 10))
|
||
|
|
%%%
|
||
|
|
16
|
||
|
|
40
|
||
|
|
```
|
||
|
|
|
||
|
|
```alistirma
|
||
|
|
`buyuk_olan(a, b)` adında, iki sayıdan büyük olanı döndüren bir fonksiyon yaz. Sonra onu kullanarak üç sayının en büyüğünü bulup yazdır.
|
||
|
|
%%%
|
||
|
|
# buraya yaz
|
||
|
|
|
||
|
|
yazdir(buyuk_olan(buyuk_olan(14, 27), 9))
|
||
|
|
%%%
|
||
|
|
fonksiyon buyuk_olan(a, b):
|
||
|
|
eger a > b:
|
||
|
|
don a
|
||
|
|
don b
|
||
|
|
|
||
|
|
yazdir(buyuk_olan(buyuk_olan(14, 27), 9))
|
||
|
|
%%%
|
||
|
|
27
|
||
|
|
```
|