Rust'ta Genel Kod Yazma
Tür güvenliğinden ödün vermeden kodun yeniden kullanılabilirliğini artıran, birden çok türle çalışabilen işlevler ve veri yapıları yazmayı öğrenin.
Rust'ta Genel Kod Yazma, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 3 dersinin 1. 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 3 dersten oluşur.
Neden Genel Kod Yazmalısınız?
Bir listedeki en büyük öğeyi bulan bir işleve ihtiyacınız olduğunu düşünün. Bu işlevi sayılar, ardından karakterler ve sonra da özel nesneler için kullanmanız gerekirse ne olur?
Jenerikler olmadan her tür için ayrı bir işlev yazmanız gerekir; bu da çok fazla yinelenen koda yol açar. İşte jenerikler bu noktada devreye girer!
Jeneriklere Giriş
Jenerikler, kendinizi tekrar etmeden birden çok türle çalışan kod yazmanızı sağlar. Esnek ve yeniden kullanılabilir işlevler veya veri yapıları yazmanın bir yoludur.
Bunu farklı malzemelere uyarlanabilen bir taslak gibi düşünebilirsiniz.
İlk Jenerik İşleviniz
Bir işlevi jenerik hâle getirmek için, işlev adından sonra açılı ayraçlar <> içinde tür parametreleri bildiririz. Yaygın bir tür parametresi adı, Type sözcüğünün kısaltması olan T'dir.
Bu print_anything işlevi artık her türü yazdırabilir!
fn print_anything<T>(item: T) {
println!("The item is: {}", item);
}
pub fn main() {
print_anything(5);
print_anything("hello");
print_anything(true);
}Tür Parametreleri Açıklaması
fn print_anything<T>(item: T) içindeki <T>, T'nin bir tür yer tutucusu olduğu anlamına gelir. İşlevi bir i32 ile çağırdığınızda T, i32 olur.
- Tür Parametreleri: Jenerik türler genellikle
T,U,Vgibi büyük harflerle adlandırılır. - Esneklik: Derleyici, somut türü derleme zamanında belirler.
Davranış Ekleme: Özellik Sınırları
Bazen jenerik işleviniz, tür parametresi T'nin belirli davranışlara sahip olmasını gerektirir. Örneğin, iki T'yi karşılaştırmak istiyorsanız T karşılaştırılabilir olmalıdır.
Bu gereksinimleri belirtmek için özellik sınırları ekleriz. Burada T: PartialOrd + Copy, T'nin karşılaştırma için PartialOrd (kısmi sıralama) ve Copy özelliklerini uygulaması gerektiği anlamına gelir.
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
let mut largest = list[0];
for &item in list.iter() {
if item > largest {
largest = item;
}
}
largest
}
pub fn main() {
let number_list = vec![34, 50, 25, 100, 65];
println!("Largest number: {}", largest(&number_list));
let char_list = vec!['y', 'm', 'a', 'q'];
println!("Largest char: {}", largest(&char_list));
}Birden Çok Özellik Sınırı Sözdizimi
T: TraitA + TraitB örneğinde olduğu gibi + sözdizimini kullanarak bir jenerik tür için birden çok özellik gerektirebilirsiniz.
Karmaşık sınırlar için işlev imzasından sonra bir where yan tümcesi de kullanabilirsiniz; bu, imzayı daha okunaklı hâle getirebilir:
fn some_function<T, U>(t: T, u: U) -> i32 where T: Display + Clone, U: Clone + Debug { /* ... */ }
Jenerik Yapılar
İşlevlerde olduğu gibi, yapıların da bir veya daha fazla tür parametresi üzerinden jenerik olmasını sağlayabilirsiniz. Bu, veri yapılarınızın belirtilen herhangi bir türde veri tutmasına olanak tanır.
Point<T> yapısı, her türden T koordinatını (örneğin i32 veya f64) tutabilir.
struct Point<T> {
x: T,
y: T,
}
pub fn main() {
let integer_point = Point {
x: 5,
y: 10
};
let float_point = Point {
x: 1.0,
y: 4.0
};
println!("Int Point: ({}, {})",
integer_point.x, integer_point.y);
println!("Float Point: ({}, {})",
float_point.x, float_point.y);
}Jenerik Yapılar Üzerinde Yöntem Uygulama
Jenerik bir yapı için yöntem uygularken, jenerik tür parametrelerini impl ifadesinden sonra belirtmeniz gerekir.
Bir yöntem jenerik türlerinden belirli bir davranış gerektiriyorsa yöntemlere özellik sınırları da ekleyebilirsiniz.
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}
pub fn main() {
let p = Point {
x: 5,
y: 10
};
println!("p.x = {}", p.x());
}Jenerikler ve Performans
Rust'ın güçlü yönlerinden biri, jeneriklerin sıfır maliyetli soyutlama olmasıdır. Bu, jenerik kullanmanın çalışma zamanında herhangi bir performans kaybına yol açmadığı anlamına gelir.
Rust bunu tek biçimlileştirme yoluyla başarır: Derleme zamanında derleyici, jenerik kodunuzun kullanıldığı her somut tür için özelleştirilmiş sürümler üretir. Böylece largest<i32> ve largest<char> iki ayrı, en iyi duruma getirilmiş işlev hâline gelir.
Bilginizi Sınayın
Aşağıdaki ifadelerden hangisi Rust jenerikleri hakkında DOĞRUDUR?
Özet: Jeneriklerin Gücü
Bu derste Rust'ta jenerik kod yazmanın temellerini öğrendiniz:
- Ne oldukları: Esnek ve yeniden kullanılabilir kod yazmanın bir yoludur.
- Jenerik işlevler: Tür parametreleri için
<T>kullanılır. - Özellik sınırları: Gerekli davranışlar
T: Traitile belirtilir. - Jenerik yapılar: Jenerik türleri tutan veri yapıları oluşturulur.
- Sıfır maliyet: Rust jenerikleri belirli koda derlenir ve çalışma zamanında ek maliyet oluşturmaz.
Jenerikler, güçlü ve tür güvenli soyutlamalar sağlayarak Rust'ın deyimsel kullanımının temelini oluşturur!
Sıkça Sorulan Sorular
“Rust'ta Genel Kod Yazma” dersi ücretsiz mi?
Evet — “Rust'ta Genel Kod Yazma” 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 3 dersten oluşur.
“Rust'ta Genel Kod Yazma” dersinde ne öğreneceğim?
Tür güvenliğinden ödün vermeden kodun yeniden kullanılabilirliğini artıran, birden çok türle çalışabilen işlevler ve veri yapıları yazmayı öğrenin. 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, 3 dersinin 1. dersidir.
“Rust'ta Genel Kod Yazma” 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
- Rust'ta Genel Kod Yazma
- Özellikleri Tanımlama ve Uygulama
- İleri Düzey Özellik Kullanımı: İlişkili Türler