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

3.5 KiB

baslik, bolum, ozet
baslik bolum ozet
Sayılabilir türler Kendi türlerin sayilabilir ile sınırlı seçenekleri güvenle tutmak

Bir siparişin durumu "hazırlanıyor", "kargoda" ya da "teslim edildi" olabilir; başka bir şey olamaz. Bunu metinle tutarsan bir gün biri "kargda" yazar ve hata gözden kaçar. sayilabilir, bir değişkenin alabileceği değerleri baştan sayar; yanlış yazılan bir değer program çalışmadan yakalanır.

Tanımlamak ve kullanmak

Her üye kendi satırına yazılır. Üyeye Tur.UYE diye ulaşırsın.

sayilabilir Durum:
    HAZIRLANIYOR
    KARGODA
    TESLIM_EDILDI

siparis = Durum.KARGODA
yazdir(siparis)
eger siparis == Durum.KARGODA:
    yazdir("Siparişin yolda.")
KARGODA
Siparişin yolda.

Yazdırınca üyenin adı görünür.

Yanlış üye derlenmez

sayilabilir Renk:
    KIRMIZI
    MAVI

r = Renk.MOR     # derleme hatası: Renk'in MOR diye bir üyesi yok

Bu, sayılabilir türlerin asıl yararıdır: yazım hatası programın çalıştığı ana değil, derlendiği ana yakalanır.

Seçeneğe göre karar vermek

Sayılabilir değerler eger / degilse eger ile çok iyi anlaşır. Bir trafik ışığının sıradaki rengini bulalım.

sayilabilir Isik:
    KIRMIZI
    SARI
    YESIL

fonksiyon sonraki(i: Isik) -> Isik:
    eger i == Isik.KIRMIZI:
        don Isik.YESIL
    degilse eger i == Isik.YESIL:
        don Isik.SARI
    don Isik.KIRMIZI

isik = Isik.KIRMIZI
dongu adim icinde 1..4:
    yazdir(isik)
    isik = sonraki(isik)
KIRMIZI
YESIL
SARI
KIRMIZI

Üyelerin sayı değerleri

Her üyenin arkasında bir sayı vardır. İlk üye 0'dan başlar; istersen değeri kendin verirsin. Değer yazılmayan üye bir öncekinden devam eder. sayi() ile bu değeri alırsın.

sayilabilir Oncelik:
    DUSUK = 1
    ORTA
    YUKSEK = 10

yazdir(sayi(Oncelik.DUSUK))
yazdir(sayi(Oncelik.ORTA))
yazdir(sayi(Oncelik.YUKSEK))
yazdir(Oncelik.YUKSEK > Oncelik.ORTA)
1
2
10
doğru

Yapı alanı ve liste öğesi olarak

Sayılabilir bir değer yapının alanı ya da listenin öğesi olabilir.

sayilabilir Tur:
    KEDI
    KOPEK
    KUS

yapi Hayvan:
    ad = ""
    tur = Tur.KEDI

barinak = [Hayvan("Pamuk", Tur.KEDI), Hayvan("Karabaş", Tur.KOPEK), Hayvan("Maviş", Tur.KUS), Hayvan("Tekir", Tur.KEDI)]
kedi_sayisi = 0
dongu h icinde barinak:
    yazdir(f"{h.ad:<8}{h.tur}")
    eger h.tur == Tur.KEDI:
        kedi_sayisi += 1
yazdir(f"{kedi_sayisi} kedi var.")
Pamuk   KEDI
Karabaş KOPEK
Maviş   KUS
Tekir   KEDI
2 kedi var.

Dikkat: Sözlük değerleri sayılabilir tutamaz: {"a": Tur.KEDI} derlenmez. Böyle bir eşleme gerekiyorsa değeri bir yapının alanında tut.

Alıştırma

`Mevsim` adında `ILKBAHAR`, `YAZ`, `SONBAHAR`, `KIS` üyeli bir sayılabilir tür tanımla. `mevsim_bul(ay: sayi) -> Mevsim` fonksiyonu ay numarasına göre mevsimi döndürsün (12, 1, 2 kış; 3-5 ilkbahar; 6-8 yaz; 9-11 sonbahar). Verilen aylar için sonucu yazdır.
%%%
# buraya yaz

dongu ay icinde [1, 4, 7, 10]:
    yazdir(mevsim_bul(ay))
%%%
sayilabilir Mevsim:
    ILKBAHAR
    YAZ
    SONBAHAR
    KIS

fonksiyon mevsim_bul(ay: sayi) -> Mevsim:
    eger ay >= 3 ve ay <= 5:
        don Mevsim.ILKBAHAR
    degilse eger ay >= 6 ve ay <= 8:
        don Mevsim.YAZ
    degilse eger ay >= 9 ve ay <= 11:
        don Mevsim.SONBAHAR
    don Mevsim.KIS

dongu ay icinde [1, 4, 7, 10]:
    yazdir(mevsim_bul(ay))
%%%
KIS
ILKBAHAR
YAZ
SONBAHAR