Files

170 lines
4.9 KiB
Markdown
Raw Permalink Normal View History

---
baslik: Modüller
bolum: Hatalar ve dosyalar
ozet: kullan ile hazır kütüphaneleri programına katmak
---
Karekök almak, bir listeyi toplamak, metnin özetini çıkarmak gibi işleri her seferinde sıfırdan yazmazsın. KabaLang'in standart kütüphanesi bu işleri **modüller** halinde hazır sunar. `kullan` ile bir modülü programına katarsın.
## kullan
`kullan kaba.sistem` yazınca `matematik`, `dosya`, `konsol`, `json`, `kripto`, `zaman`, `rastgele` gibi modüller birlikte gelir. Bir modülün fonksiyonu `modul.fonksiyon()` diye çağrılır.
```kbl
kullan kaba.sistem
yazdir(matematik.karekok(144.0))
yazdir(matematik.mutlak(-17))
yazdir(f"{matematik.pi:.4f}")
```
```cikti
12.0
17
3.1416
```
> **İpucu:** `kullan` satırlarını dosyanın en başına yaz. Hangi yetenekleri kullandığını okuyana hemen gösterir.
## matematik
| Fonksiyon | Ne yapar | Örnek | Sonuç |
|---|---|---|---|
| `matematik.karekok(x)` | karekök | `karekok(9.0)` | `3.0` |
| `matematik.mutlak(x)` | mutlak değer | `mutlak(-3)` | `3` |
| `matematik.yuvarla(x)` | en yakın tam değere yuvarla | `yuvarla(2.5)` | `3.0` |
| `matematik.taban(x)` | aşağı yuvarla | `taban(3.7)` | `3.0` |
| `matematik.tavan(x)` | yukarı yuvarla | `tavan(3.2)` | `4.0` |
| `matematik.us(a, b)` | a üzeri b | `us(2.0, 10.0)` | `1024.0` |
| `matematik.pi` | π sayısı | | `3.14159…` |
```kbl
kullan kaba.sistem
yazdir(matematik.yuvarla(2.5))
yazdir(matematik.taban(3.7))
yazdir(matematik.tavan(3.2))
yazdir(matematik.us(2.0, 10.0))
```
```cikti
3.0
3.0
4.0
1024.0
```
`yuvarla`, `taban` ve `tavan` sonucu `ondalik` olarak verir. Tam sayı gerekiyorsa `sayi(matematik.tavan(x))` yazarsın.
Gerçek bir örnek: dairenin alanı ve bir dik üçgenin hipotenüsü.
```kbl
kullan kaba.sistem
yaricap = 2.5
yazdir(f"Alan: {matematik.pi * yaricap * yaricap:.2f}")
a = 3.0
b = 4.0
yazdir(f"Hipotenüs: {matematik.karekok(a * a + b * b)}")
```
```cikti
Alan: 19.63
Hipotenüs: 5.0
```
## koleksiyon
`kullan kaba.koleksiyon` listelerle çalışan hazır fonksiyonları getirir. Bunları *Liste işlemleri* dersinde görmüştün.
```kbl
kullan kaba.koleksiyon
satislar = [120, 340, 90, 410, 250]
yazdir(koleksiyon.topla(satislar))
yazdir(koleksiyon.en_buyuk(satislar))
yazdir(koleksiyon.sirali(satislar))
```
```cikti
1210
410
[90, 120, 250, 340, 410]
```
## kripto
`kripto` metinlerin özetini (hash) çıkarır ve base64 kodlaması yapar. Özet, bir metnin parmak izidir: metin bir harf bile değişse özet tümden değişir.
```kbl
kullan kaba.sistem
yazdir(kripto.sha256("merhaba").bastan(16))
yazdir(kripto.sha256("Merhaba").bastan(16))
kod = kripto.base64_kodla("KabaLang")
yazdir(kod)
yazdir(kripto.base64_coz(kod))
```
```cikti
4c6bcdd55f3153e1
7fdc9f4717c5fe66
S2FiYUxhbmc=
KabaLang
```
## Diğer modüller
| Modül | Ne için |
|---|---|
| `dosya` | dosya okuma/yazma (*Dosyalar* dersi) |
| `konsol` | klavyeden okuma (*Kullanıcıdan girdi* dersi) |
| `json` | JSON üretme ve çözme |
| `zaman` | saat, tarih, süre ölçümü |
| `rastgele` | rastgele sayı ve seçim |
`zaman` ve `rastgele` her çalıştırmada farklı sonuç verir. Örneğin `rastgele.sayi(1, 6)` bir zar atar, `zaman.saat()` şu anki saati verir. Kendi bilgisayarında **Dene** ile çalıştırıp her seferinde değiştiğini gör:
```kbl goster
kullan kaba.sistem
yazdir("Saat: " + zaman.saat())
yazdir(f"Zar: {rastgele.sayi(1, 6)}")
```
> **Dikkat:** Modül adlarını değişken adı olarak kullanma. `dosya = "notlar.txt"` gibi bir atama, `dosya` modülünü gölgeleyip kafa karıştırıcı hatalara yol açar; `dosya_adi` gibi bir ad seç.
## Tebrikler!
Temel dersleri bitirdin: değişkenler, koşullar, döngüler, listeler, sözlükler, fonksiyonlar, kendi türlerin, hata yönetimi ve dosyalar. Artık **Örnekler** bölümündeki daha büyük programları okuyabilir, kendi küçük projelerine başlayabilirsin.
## Alıştırma
```alistirma
`alanlar` listesindeki her sayı bir karenin alanı. `matematik.karekok` ile her karenin kenar uzunluğunu bulup `Alan 49.0 → kenar 7.0` biçiminde yazdır.
%%%
kullan kaba.sistem
alanlar = [49.0, 2.25, 100.0]
# buraya yaz
%%%
kullan kaba.sistem
alanlar = [49.0, 2.25, 100.0]
dongu a icinde alanlar:
yazdir(f"Alan {a} → kenar {matematik.karekok(a)}")
%%%
Alan 49.0 → kenar 7.0
Alan 2.25 → kenar 1.5
Alan 100.0 → kenar 10.0
```
```alistirma
`fiyatlar` listesindeki her fiyatı `matematik.tavan` ile yukarı yuvarla, `sayi()` ile tam sayıya çevirip listeye ekle ve `koleksiyon.topla` ile yuvarlanmış fiyatların toplamını bul. Önce yuvarlanmış listeyi, sonra toplamı yazdır.
%%%
kullan kaba.sistem
kullan kaba.koleksiyon
fiyatlar = [12.3, 7.8, 19.01]
yuvarlanmis = []
# buraya yaz
%%%
kullan kaba.sistem
kullan kaba.koleksiyon
fiyatlar = [12.3, 7.8, 19.01]
yuvarlanmis = []
dongu f icinde fiyatlar:
yuvarlanmis.ekle(sayi(matematik.tavan(f)))
yazdir(yuvarlanmis)
yazdir(koleksiyon.topla(yuvarlanmis))
%%%
[13, 8, 20]
41
```