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,210 @@
|
||||
---
|
||||
baslik: Yapılar
|
||||
bolum: Kendi türlerin
|
||||
ozet: 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.
|
||||
|
||||
```kbl
|
||||
yapi Kitap:
|
||||
ad = ""
|
||||
yazar = ""
|
||||
sayfa = 0
|
||||
yil = 0
|
||||
|
||||
k = Kitap("Kuyucaklı Yusuf", "Sabahattin Ali", 232, 1937)
|
||||
yazdir(k.ad)
|
||||
yazdir(k.sayfa)
|
||||
yazdir(k)
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
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)
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
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())
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
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})")
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
yapi Nokta:
|
||||
x = 0
|
||||
y = 0
|
||||
|
||||
a = Nokta(3, 4)
|
||||
b = Nokta(3, 4)
|
||||
c = Nokta(0, 4)
|
||||
yazdir(a == b)
|
||||
yazdir(a == c)
|
||||
```
|
||||
```cikti
|
||||
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.
|
||||
|
||||
```kbl
|
||||
yapi Nokta:
|
||||
x = 0
|
||||
y = 0
|
||||
|
||||
a = Nokta(1, 2)
|
||||
b = a
|
||||
b.x = 99
|
||||
yazdir(a.x)
|
||||
yazdir(b.x)
|
||||
```
|
||||
```cikti
|
||||
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
|
||||
|
||||
```alistirma
|
||||
`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
|
||||
```
|
||||
|
||||
```alistirma
|
||||
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
|
||||
```
|
||||
Reference in New Issue
Block a user