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.
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ç.
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.