Tip Sistemi
BERK, güçlü statik tipleme ile güvenli ve tip çıkarımı ile pratik bir dil sunar. Rust ve TypeScript'ten ilham alan modern bir tip sistemi.
Temel Tipler
Sayısal Tipler
| Türkçe | English | Boyut | Aralık |
|---|---|---|---|
sayı8 | int8 | 8-bit | -128 to 127 |
sayı16 | int16 | 16-bit | -32,768 to 32,767 |
sayı | int | 32-bit | -2³¹ to 2³¹-1 |
sayı64 | int64 | 64-bit | -2⁶³ to 2⁶³-1 |
usayı8 | uint8 | 8-bit | 0 to 255 |
usayı16 | uint16 | 16-bit | 0 to 65,535 |
usayı | uint | 32-bit | 0 to 2³²-1 |
kesir32 | float32 | 32-bit | IEEE 754 |
kesir | float | 64-bit | IEEE 754 |
değişken x: sayı = 42
değişken y: kesir = 3.14
değişken byte: sayı8 = 127
Boolean ve Karakter Tipleri
değişken aktif: mantık = doğru
değişken harf: karakter = 'A'
Tip Çıkarımı (Type Inference)
BERK derleyicisi tipleri otomatik çıkarabilir:
// Tip belirtilmemiş ama derleyici çıkarıyor
değişken x = 42 // sayı
değişken y = 3.14 // kesir
değişken isim = "Ali" // metin
değişken liste = [1,2,3] // Dizi<sayı>
Koleksiyon Tipleri
Diziler (Arrays)
// Sabit boyutlu dizi
değişken sayılar: [sayı; 5] = [1, 2, 3, 4, 5]
// Dinamik dizi
değişken liste: Dizi<sayı> = Dizi::yeni()
liste.ekle(42)
Vektörler
değişken vec = Vec::from([1, 2, 3, 4])
vec.push(5)
yazdır(vec.len()) // 5
Hash Map
kullan koleksiyonlar::HashMap;
değişken yaşlar = HashMap::yeni()
yaşlar.ekle("Ali", 25)
yaşlar.ekle("Ayşe", 30)
Yapılar (Structs)
yapı Nokta yap
x: kesir,
y: kesir
son
// Kullanım
değişken p = Nokta { x: 1.0, y: 2.0 }
yazdır(p.x) // 1.0
Tuple Yapılar
yapı Renkli(sayı, sayı, sayı); // RGB
değişken kırmızı = Renkli(255, 0, 0)
yazdır(kırmızı.0) // 255
Enum Tipleri
enum Yön yap
Kuzey,
Güney,
Doğu,
Batı
son
değişken hareket = Yön::Kuzey
Veri Taşıyan Enumlar
enum Mesaj yap
Çık,
Taşı(sayı, sayı),
Yaz(metin),
RenkDeğiştir(sayı, sayı, sayı)
son
Seçenek ve Sonuç Tipleri
Seçenek (Option)
fonksiyon böl(a: kesir, b: kesir) -> Seçenek<kesir> yap
eğer b == 0.0 yap
dön Hiçbiri
son
dön Bir(a / b)
son
Sonuç (Result)
fonksiyon dosya_oku(yol: metin) -> Sonuç<metin, Hata> yap
eğer yol == "" yap
dön Hata("Boş yol")
son
dön Tamam(içerik)
son
Generic Tipler
yapı Kutu<T> yap
değer: T
son
fonksiyon yeni_kutu<T>(değer: T) -> Kutu<T> yap
dön Kutu { değer: değer }
son
// Kullanım
değişken sayı_kutusu = yeni_kutu(42)
değişken metin_kutusu = yeni_kutu("merhaba")
Trait Sistemi (Interfaces)
trait Yazdırılabilir yap
fonksiyon yazdır(self)
son
yapı Kişi yap
isim: metin
son
uygula Yazdırılabilir için Kişi yap
fonksiyon yazdır(self) yap
yazdır("Kişi: " + self.isim)
son
son
Tip Dönüşümleri
Açık Dönüşüm (Casting)
değişken x: sayı = 42
değişken y: kesir = kayıt(kesir, x)
değişken z: sayı8 = kayıt(sayı8, x)
Güvenli Dönüşüm
değişken metin1 = "42"
değişken sayı1 = metin1.sayıya_çevir() // Sonuç<sayı, Hata>
eşleştir sayı1 yap
Tamam(n) => yazdır(n),
Hata(e) => yazdır("Hata: " + e)
son
Tip Takma Adları (Type Aliases)
tip Sonuç<T> = Sonuç<T, metin>
tip Nokta2D = (kesir, kesir)
tip Matris3x3 = [[kesir; 3]; 3]
Pattern Matching
eşleştir değer yap
0 => yazdır("Sıfır"),
1..10 => yazdır("Bir ile dokuz arası"),
x eğer x % 2 == 0 => yazdır("Çift sayı"),
_ => yazdır("Diğer")
son
Özet
- ✅ Güçlü statik tipleme
- ✅ Tip çıkarımı
- ✅ Generic'ler
- ✅ Trait sistemi
- ✅ Pattern matching
- ✅ Null güvenliği (Seçenek)
- ✅ Hata yönetimi (Sonuç)