CodeBlanks Logo Icon CodeBlanks

Associated constant

İlişkili sabit (associated constant) tanımlarsın.

Associated constant

Trait'ler sabit de bildirebilir; her uygulama kendi değerini verir. Değerler derleme anında bilinir ve tür üzerinden erişilir:

trait Cokgen {
    const KENAR: u32;
    const AD: &'static str;
}

struct Ucgen;
impl Cokgen for Ucgen {
    const KENAR: u32 = 3;
    const AD: &'static str = "üçgen";
}

fn ozet<T: Cokgen>() -> String {
    format!("{}: {} kenar", T::AD, T::KENAR)
}

Sabitin varsayılan değeri de olabilir: const AZAMI: usize = 64;.

Kullanım örnekleri

Standart kütüphanede: u32::MAX, f64::EPSILON, char::MAX. Kendi kodunda: birim dönüşümleri, protokol sürümleri, tampon boyutları. İlişkili sabitler const generic'lerle birlikte dizi boyutu olarak da kullanılabilir:

struct Kare;
impl Cokgen for Kare {
    const KENAR: u32 = 4;
    const AD: &'static str = "kare";
}

println!("{}", ozet::<Kare>());   // kare: 4 kenar

Uygulama Çokgen sabitleri

Yukarıdaki Cokgen trait'ini Ucgen ve Kare için uygula ve ozet fonksiyonunu yaz. ozet::<Ucgen>() ve ozet::<Kare>() sonuçlarını ayrı satırlara yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
trait Cokgen {
    const KENAR: u32;
    const AD: &'static str;
}

struct Ucgen;
struct Kare;

impl Cokgen for Ucgen {
    const KENAR: u32 = 3;
    const AD: &'static str = "üçgen";
}

impl Cokgen for Kare {
    const KENAR: u32 = 4;
    const AD: &'static str = "kare";
}

fn ozet<T: Cokgen>() -> String {
    format!("{}: {} kenar", T::AD, T::KENAR)
}

fn main() {
    println!("{}", ozet::<Ucgen>());
    println!("{}", ozet::<Kare>());
}

Beklenen çıktı

üçgen: 3 kenar
kare: 4 kenar

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İlişkili sabitler neden <code>self</code> almadan kullanılabilir?

  • Kullanılamaz
  • Global olduğu için
  • Değer türe aittir, örneğe değil Doğru cevap
  • Statik değişkendir

Açıklama: T::KENAR derleme anında yerine konur; çalışma anı maliyeti yoktur.

2 Sabit bildirimi

Soru
trait Cokgen {
    ____ KENAR: u32;
}
Cevap
trait Cokgen {
    const KENAR: u32;
}

Açıklama: Trait içindeki sabitler const ile bildirilir.

3 Sabit ve değeri

Kavram Anlamı
Ucgen::KENAR 3
Kare::KENAR 4
u8::MAX 255
i8::MIN -128

İleri seviye bölümündeki tüm dersler