Önceki Ders 9 / 10

🔷 Generics ve Traits

🎮 Ortaokul Bu derste: Evrensel kutu - Her şeyi sakla!
📚 Lise Bu derste: Tip parametreleri ve interface tanımlama
🎓 Üniversite Bu derste: Associated types, trait objects ve monomorphization

📦 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ır
  • trait/ozellik ile davranış tanımlanır
  • T: Trait ile tip kısıtlaması yapılır