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ı.
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
---
|
||||
baslik: Sayılabilir türler
|
||||
bolum: Kendi türlerin
|
||||
ozet: 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.
|
||||
|
||||
```kbl
|
||||
sayilabilir Durum:
|
||||
HAZIRLANIYOR
|
||||
KARGODA
|
||||
TESLIM_EDILDI
|
||||
|
||||
siparis = Durum.KARGODA
|
||||
yazdir(siparis)
|
||||
eger siparis == Durum.KARGODA:
|
||||
yazdir("Siparişin yolda.")
|
||||
```
|
||||
```cikti
|
||||
KARGODA
|
||||
Siparişin yolda.
|
||||
```
|
||||
|
||||
Yazdırınca üyenin adı görünür.
|
||||
|
||||
## Yanlış üye derlenmez
|
||||
|
||||
```kbl goster
|
||||
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.
|
||||
|
||||
```kbl
|
||||
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)
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
sayilabilir Oncelik:
|
||||
DUSUK = 1
|
||||
ORTA
|
||||
YUKSEK = 10
|
||||
|
||||
yazdir(sayi(Oncelik.DUSUK))
|
||||
yazdir(sayi(Oncelik.ORTA))
|
||||
yazdir(sayi(Oncelik.YUKSEK))
|
||||
yazdir(Oncelik.YUKSEK > Oncelik.ORTA)
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
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.")
|
||||
```
|
||||
```cikti
|
||||
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
|
||||
|
||||
```alistirma
|
||||
`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
|
||||
```
|
||||
Reference in New Issue
Block a user