Files
semih 494781e84f Dersler ve Temeller; web örnekleri PORT ortam değişkenini okur
- dersler/: 29 kısa ders (açıklama, çalıştırılabilir örnek, alıştırma). Her örneğin
  ve alıştırma çözümünün çıktısı Online IDE'nin hazırlık adımında gerçekten koşulup
  dosyadakiyle karşılaştırılır; biçim dersler/BICIM.md.
- temeller/: tek konulu 12 başlangıç programı.
- web/anket, web/kisalt, web/pano: port PORT ortam değişkeninden okunur (Online IDE
  önizlemesi 8080 verir), yoksa eski sabit port.
- README: öğrenme bölümü, Online IDE bağlantısı.
2026-10-17 22:07:47 +03:00

4.7 KiB

baslik, bolum, ozet
baslik bolum ozet
Yapılar Kendi türlerin yapi ile ilgili verileri tek bir türde toplamak

Bir kitabın adı, yazarı, sayfa sayısı ve yılı birbirine aittir. Bunları dört ayrı değişkende ya da dört ayrı listede tutmak çabuk karışır. yapi ile kendi türünü tanımlar, bu bilgileri tek bir değerde toplarsın.

Yapı tanımlamak

Yapının her alanına bir varsayılan değer verirsin; alanın türü bu değerden anlaşılır.

yapi Kitap:
    ad = ""
    yazar = ""
    sayfa = 0
    yil = 0

k = Kitap("Kuyucaklı Yusuf", "Sabahattin Ali", 232, 1937)
yazdir(k.ad)
yazdir(k.sayfa)
yazdir(k)
Kuyucaklı Yusuf
232
Kitap(ad: Kuyucaklı Yusuf, yazar: Sabahattin Ali, sayfa: 232, yil: 1937)

Kitap(...) yeni bir nesne oluşturur; değerler alanların tanım sırasıyla verilir. Alanlara nesne.alan diye ulaşırsın.

Nesne oluşturmanın yolları

Boş bir nesne oluşturup alanları sonra da doldurabilir, ya da yalnız bazı alanları adıyla verebilirsin. Verilmeyen alanlar varsayılan değerinde kalır.

yapi Kitap:
    ad = ""
    yazar = ""
    sayfa = 0

k1 = Kitap()
k1.ad = "Çalıkuşu"
k1.sayfa = 544
yazdir(k1)

k2 = Kitap(ad="İnce Memed", yazar="Yaşar Kemal")
yazdir(k2)
Kitap(ad: Çalıkuşu, yazar: , sayfa: 544)
Kitap(ad: İnce Memed, yazar: Yaşar Kemal, sayfa: 0)

Metotlar

Yapının içine fonksiyon yazabilirsin; bunlara metot denir. Yapı metotları alanlara doğrudan adıyla ulaşır.

yapi Urun:
    ad = ""
    fiyat = 0.0
    adet = 0

    fonksiyon tutar() -> ondalik:
        don fiyat * adet

    fonksiyon etiket() -> metin:
        don f"{ad} x{adet}: {tutar():.2f} TL"

u = Urun("Defter", 24.5, 3)
yazdir(u.tutar())
yazdir(u.etiket())
u.adet = 5
yazdir(u.etiket())
73.5
Defter x3: 73.50 TL
Defter x5: 122.50 TL

Nesne listesi

Yapılar listelerde tutulabilir. Böylece bir tabloyu çok rahat işlersin.

yapi Ogrenci:
    ad = ""
    puan = 0

sinif_listesi = [Ogrenci("Ayşe", 88), Ogrenci("Mehmet", 64), Ogrenci("Elif", 92)]
sinif_listesi.ekle(Ogrenci("Can", 47))

en_iyi = sinif_listesi[0]
dongu o icinde sinif_listesi:
    durum = "geçti" eger o.puan >= 50 degilse "kaldı"
    yazdir(f"{o.ad:<8}{o.puan:>4}  {durum}")
    eger o.puan > en_iyi.puan:
        en_iyi = o
yazdir(f"En yüksek puan: {en_iyi.ad} ({en_iyi.puan})")
Ayşe      88  geçti
Mehmet    64  geçti
Elif      92  geçti
Can       47  kaldı
En yüksek puan: Elif (92)

Karşılaştırmak

İki yapı nesnesi, bütün alanları eşitse eşittir.

yapi Nokta:
    x = 0
    y = 0

a = Nokta(3, 4)
b = Nokta(3, 4)
c = Nokta(0, 4)
yazdir(a == b)
yazdir(a == c)
doğru
yanlış

Atama bir kopya oluşturur

Bir yapı nesnesini başka bir değişkene atamak kopyasını oluşturur. Kopyayı değiştirmek aslını etkilemez.

yapi Nokta:
    x = 0
    y = 0

a = Nokta(1, 2)
b = a
b.x = 99
yazdir(a.x)
yazdir(b.x)
1
99

Dikkat: Aynı kural fonksiyonlar için de geçerli: bir fonksiyona yapı verirsen fonksiyon kopyasını değiştirir. Nesnenin kendisini değiştirmek istiyorsan işi yapının metodu olarak yaz (bir sonraki ders), ya da değiştirilmiş nesneyi döndürüp yeniden ata.

İpucu: Tür adlarını büyük harfle başlat (Kitap, Ogrenci); değişken adlarını küçük harfle. Hata, Liste, Metin gibi bazı adlar dilin kendi türlerine ayrılmıştır, onları seçme.

Alıştırma

`Dikdortgen` adında, `en` ve `boy` alanları (varsayılan 0) ile `alan()` ve `cevre()` metotları olan bir yapı tanımla. `Dikdortgen(6, 4)` için alanı ve çevreyi aynı satırda yazdır.
%%%
# buraya yaz

d = Dikdortgen(6, 4)
yazdir(d.alan(), d.cevre())
%%%
yapi Dikdortgen:
    en = 0
    boy = 0

    fonksiyon alan() -> sayi:
        don en * boy

    fonksiyon cevre() -> sayi:
        don 2 * (en + boy)

d = Dikdortgen(6, 4)
yazdir(d.alan(), d.cevre())
%%%
24 20
Verilen `Film` yapısıyla bir liste oluşturulmuş. 1990'dan sonra çıkan filmlerin adlarını ve hepsinin toplam süresini yazdır.
%%%
yapi Film:
    ad = ""
    yil = 0
    sure = 0

filmler = [Film("Eşkıya", 1996, 128), Film("Selvi Boylum Al Yazmalım", 1977, 90), Film("Kış Uykusu", 2014, 196)]
toplam_sure = 0
# buraya yaz
%%%
yapi Film:
    ad = ""
    yil = 0
    sure = 0

filmler = [Film("Eşkıya", 1996, 128), Film("Selvi Boylum Al Yazmalım", 1977, 90), Film("Kış Uykusu", 2014, 196)]
toplam_sure = 0
dongu f icinde filmler:
    eger f.yil > 1990:
        yazdir(f.ad)
    toplam_sure += f.sure
yazdir(f"Toplam süre: {toplam_sure} dakika")
%%%
Eşkıya
Kış Uykusu
Toplam süre: 414 dakika