Jenerik Struct'lar ve Enum'lar
Esnek veri türleri oluşturun.
Jenerik Struct'lar ve Enum'lar, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Genel Veri Yapıları
İşlevlerde olduğu gibi yapı ve numaralandırmalar da bir veya daha fazla tür üzerinde genel olabilir. Bu, tek bir tanımın herhangi bir türdeki değerleri tutmasını sağlar.
Standart kütüphane bu şekilde oluşturulmuştur: Vec<T>, Option<T> ve Result<T, E> geneldir.
Genel Bir Yapı
Tür parametresini yapı adından sonra bildirin, ardından alanlarda kullanın. Burada Point, aynı türde T olan iki değeri tutar.
Artık tek bir tanım tamsayı noktalarına, kayan noktalı noktalara ve daha fazlasına hizmet eder.
struct Point<T> {
x: T,
y: T,
}Genel Yapıları Oluşturma
Bir örnek oluşturduğunuzda derleyici, alan değerlerinden T'yi çıkarır. Her iki alan da aynı türle uyumlu olmalıdır.
Bu program aynı yapıdan bir tamsayı noktası ve bir kayan noktalı nokta oluşturur.
struct Point<T> {
x: T,
y: T,
}
fn main() {
let a = Point { x: 1, y: 2 };
let b = Point { x: 1.5, y: 4.0 };
println!("{} {}", a.x, b.y);
}Karışık Tür Parametreleri
İki parametre kullanmak alanların farklı olmasını sağlar. Pair<T, U> aynı anda bir tamsayı ve bir dize tutabilir.
Alanların eşleşmesi gerektiğinde tek bir parametre, farklı olabildiğinde birden çok parametre seçin.
struct Pair<T, U> {
first: T,
second: U,
}Genel Yapılarda Yöntemler
Yöntem eklemek için tür parametresini impl bloğunda tekrarlayın: impl<T> Point<T>. impl sonrasındaki parametre onu bildirir; tür adından sonraki ise parametreyi uygular.
Burada bir alıcı, x alanına bir başvuru döndürür.
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}Sınırlı Türler İçin Yöntemler
Yöntemleri yalnızca belirli somut türler için veya bir sınırı karşılayan türler için yazabilirsiniz. Bu impl yalnızca Point<f64> için geçerlidir.
Bu nedenle dist_from_origin, tamsayı noktalarında değil, kayan noktalı noktalarda bulunur.
struct Point<T> { x: T, y: T }
impl Point<f64> {
fn dist_from_origin(&self) -> f64 {
(self.x * self.x + self.y * self.y).sqrt()
}
}Genel Bir Numaralandırma
Numaralandırmalar da geneldir. Her varyant genel veriler taşıyabilir. Bu, ya Some(T) ya da None olan standart Option'ı yansıtır.
Kendi türünüzü tanımlamak, kütüphane türünün nasıl çalıştığını görmenize yardımcı olur.
enum Maybe<T> {
Just(T),
Nothing,
}Numaralandırmada İki Parametre
Result, başarı ve hata değerlerinin farklı olabilmesi için iki parametre kullanır. Aşağıda bunun basitleştirilmiş bir sürümü verilmiştir.
Numaralandırmalardaki birden çok tür parametresi, ekosistem genelinde esnek hata yönetimini mümkün kılar.
enum Either<L, R> {
Left(L),
Right(R),
}Genel Numaralandırmalarla Eşleştirme
Genel numaralandırmaları, somut olanlarla tamamen aynı şekilde örüntü eşleştirmesine tabi tutarsınız. Sınırlandırılmış yük, kol içinde bir bağlama dönüşür.
Bu program özel bir Maybe değerini açar ve içerdiği değeri veya bir geri dönüş değerini yazdırır.
enum Maybe<T> { Just(T), Nothing }
fn main() {
let m: Maybe<i32> = Maybe::Just(5);
match m {
Maybe::Just(n) => println!("got {}", n),
Maybe::Nothing => println!("empty"),
}
}Bir Değeri Sarmalama
Yaygın bir kalıp, T türünde tek bir alana ve yardımcı yöntemlere sahip bir sarmalayıcı yapıdır. Burada Wrapper herhangi bir değeri depolar ve döndürür.
Bu, yeni tür kalıplarının ve akıllı işaretçi benzeri türlerin temelidir.
struct Wrapper<T> { inner: T }
impl<T> Wrapper<T> {
fn new(v: T) -> Self {
Wrapper { inner: v }
}
}
fn main() {
let w = Wrapper::new("hi");
println!("{}", w.inner);
}Çalışma Zamanı Ek Yükü Yok
Genel tür parametreli yapılar ve enum'lar da tek tür için özelleştirilir. Derlemeden sonra Point<i32> ve Point<f64> birbirinden farklı, tamamen özelleştirilmiş iki türe dönüşür.
Genel türün kendisi için gizli bir dolaylı erişim veya etiket yoktur.
Hızlı Kontrol
Genel tür parametreli yapılar ve enum'lar hakkındaki anlayışınızı sınayın.
Özet
Yapılar ve enum'lar, adlarından sonra tür parametrelerini bildirir ve bunları alanlarda ve varyantlarda kullanır. Böylece Option ve Result gibi yeniden kullanılabilir kapsayıcılar oluşturulabilir.
Metotlar, impl<T> içinde parametreleri tekrar belirtir; somut türler için özel impl blokları da yazabilirsiniz. Sıfır ek yük için her şey tek tür için özelleştirilir.
Sıkça Sorulan Sorular
“Jenerik Struct'lar ve Enum'lar” dersi ücretsiz mi?
Evet — “Jenerik Struct'lar ve Enum'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“Jenerik Struct'lar ve Enum'lar” dersinde ne öğreneceğim?
Esnek veri türleri oluşturun. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Jenerik Struct'lar ve Enum'lar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Jenerik İşlevler
- Jenerik Struct'lar ve Enum'lar
- Trait Sınırları
- where İfadeleri ve Birden Çok Sınır