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