📦 Sihirli Kutu!
Bir kutu yap, içine ne koyarsan koy! Elmas, altın, silah... Hepsi aynı kutuya sığar!
📝 Örnek 1: Evrensel Sandık
📦 sandik.berk
// T = Herhangi bir tip!
yapi Sandik[T] {
icerik: T,
kilit: mantıksal,
}
impl[T] Sandik[T] {
fonksiyon yeni(esya: T) -> Sandik[T] {
don Sandik {
icerik: esya,
kilit: yanlış,
};
}
fonksiyon ac(&mut self) -> &T {
self.kilit = yanlış;
yazdir("🔓 Sandık açıldı!");
don &self.icerik;
}
fonksiyon kilitle(&mut self) {
self.kilit = doğru;
yazdir("🔒 Sandık kilitlendi!");
}
}
fonksiyon ana() {
// Elmas sandığı
değişken mut elmas_sandigi = Sandik::yeni("💎 Efsanevi Elmas");
yazdir("Sandık içeriği: {}", elmas_sandigi.ac());
// Altın sandığı
değişken mut altin_sandigi = Sandik::yeni(1000);
yazdir("Altın miktarı: {} 💰", altin_sandigi.ac());
// Silah sandığı
değişken mut silah_sandigi = Sandik::yeni("⚔️ Ejder Kılıcı");
yazdir("Silah: {}", silah_sandigi.ac());
}
📝 Örnek 2: Yetenek Sistemi
⚡ yetenekler.berk
// Trait = Yetenek! Bunu yapabilen herkes...
ozellik Saldirabilir {
fonksiyon saldir(&self) -> tamsayı;
fonksiyon saldir_ismi(&self) -> metin;
}
yapi Savasci {
guc: tamsayı,
}
yapi Buyucu {
buyu_gucu: tamsayı,
}
// Savaşçı saldırabilir
impl Saldirabilir icin Savasci {
fonksiyon saldir(&self) -> tamsayı {
don self.guc * 2;
}
fonksiyon saldir_ismi(&self) -> metin {
don "⚔️ Kılıç Darbesi";
}
}
// Büyücü de saldırabilir
impl Saldirabilir icin Buyucu {
fonksiyon saldir(&self) -> tamsayı {
don self.buyu_gucu * 3;
}
fonksiyon saldir_ismi(&self) -> metin {
don "🔥 Ateş Topu";
}
}
// Her saldırabilene çalışır!
fonksiyon savas_yap[T: Saldirabilir](karakter: &T) {
yazdir("{}: {} hasar!", karakter.saldir_ismi(), karakter.saldir());
}
fonksiyon ana() {
değişken savasci = Savasci { guc: 50 };
değişken buyucu = Buyucu { buyu_gucu: 40 };
savas_yap(&savasci); // ⚔️ Kılıç Darbesi: 100 hasar!
savas_yap(&buyucu); // 🔥 Ateş Topu: 120 hasar!
}
📌 Özet
<T>ile generic tip parametresi tanımlanırtrait/ozellikile davranış tanımlanırT: Traitile tip kısıtlaması yapılır