0Pricing
Learn Rust Coding · Ders

Jenerik İşlevler

Davranışı türe göre parametreleştirin.

Jenerik İşlevler, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 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 4 dersten oluşur.

Genel İşlevler Neden Kullanılır?

Genel işlevler, her tür için kodu kopyalamak yerine birçok türle çalışan tek bir işlev yazmanızı sağlar. Rust, yer tutucu türü derleme zamanında değiştirir.

Tamsayılar için bir largest, chars için de başka bir tane yazdığınızı düşünün. Genel türler bunları çalışma zamanı maliyeti olmadan tek bir tanımda birleştirir.

Tür Parametreleri

Genel bir işlev, adın ardından açılı ayraçlar içinde bir tür parametresi bildirir. T adı bir gelenektir; ancak herhangi bir CamelCase tanımlayıcısı kullanılabilir.

Parametre daha sonra bağımsız değişkenlerde ve dönüş türünde yer alabilir ve çağıranın kullandığı somut türün yerini tutar.

fn first<T>(pair: (T, T)) -> T {
    pair.0
}

Basit Bir Özdeşlik İşlevi

Bu program, bağımsız değişkenini değiştirmeden döndüren genel bir echo tanımlar. Bu işlev bir kez tamsayıyla, bir kez de dize dilimiyle çağrılır.

Derleyici, gerçekten kullanılan her tür için ayrı bir somut sürüm üretir.

fn echo<T>(value: T) -> T {
    value
}

fn main() {
    println!("{}", echo(42));
    println!("{}", echo("hi"));
}

Tek Biçimlendirme

Rust tek biçimlendirme kullanır: derleme zamanında kullanılan her somut tür için işlevin özelleştirilmiş bir kopyasını üretir. Kutulama veya sanal gönderim yoktur.

Sonuç, elle yazılmış türe özgü kod kadar hızlı çalışan genel koddur.

Genel Türlerin Kısıtlamalara İhtiyacı Vardır

Genel bir işlevin içinde yalnızca olası her türün desteklediği işlemleri kullanabilirsiniz. Tek başına bir T toplanamaz, karşılaştırılamaz veya yazdırılamaz.

Bu kod derlenemez; çünkü T karşılaştırmayı uygulamıyor olabilir. Bunu birazdan bir özellik sınırıyla düzelteceğiz.

fn larger<T>(a: T, b: T) -> T {
    if a > b { a } else { b }
}

Özellik Sınırı Ekleme

Değerleri karşılaştırmak için T türünü PartialOrd ile kısıtlarız. Bu sınır, türün > işleçini desteklediğini garanti eder.

Ayrıca basit türlerde, örneğin tamsayılarda, değerlerin taşıma sorunları olmadan döndürülebilmesi için Copy ekleriz.

fn larger<T: PartialOrd + Copy>(a: T, b: T) -> T {
    if a > b { a } else { b }
}

Sınırlandırılmış İşlevi Çağırma

Artık işlev, her iki özelliği de uygulayan tüm türlerle çalışır. Tamsayılar ve kayan noktalı sayılar PartialOrd + Copy koşulunu karşılar.

Aynı kaynak kodu iki sürüme tek biçimlendirilerek her çağrı için sonuçları yazdırır.

fn larger<T: PartialOrd + Copy>(a: T, b: T) -> T {
    if a > b { a } else { b }
}

fn main() {
    println!("{}", larger(3, 9));
    println!("{}", larger(2.5, 1.0));
}

Birden Çok Tür Parametresi

Bir işlev birden çok tür parametresi bildirebilir. Her biri bağımsızdır; bu nedenle iki bağımsız değişken farklı türlerde olabilir.

Burada pair, herhangi bir T ile herhangi bir U'yu kabul eder ve bunları demet olarak döndürür.

fn pair<T, U>(a: T, b: U) -> (T, U) {
    (a, b)
}

Genel Değerleri Yazdırma

{} ile genel bir değeri yazdırmak için türün Display özelliğini uygulaması gerekir. Yazdırılabilir herhangi bir türün aktarılabilmesi için bu sınırı ekleriz.

Bu, bir değeri etiketleyip döndürür ve yalnızca biçimlendirme amacıyla kullanılan bir sınırı gösterir.

use std::fmt::Display;

fn announce<T: Display>(label: &str, value: T) {
    println!("{}: {}", label, value);
}

fn main() {
    announce("count", 7);
    announce("name", "Ada");
}

Turbobalık Sözdizimi

Bazen derleyici, yalnızca bağımsız değişkenlerden T'yi çıkaramaz. Turbobalık ::<Type>, çağrı noktasında bunu açıkça belirtmenizi sağlar.

Özellikle dönüş türünün belirsiz olduğu parse ve collect gibi yöntemlerde yaygındır.

fn main() {
    let n = "42".parse::<i32>().unwrap();
    println!("{}", n + 1);
}

Başvurular Üzerinde Genel Türler

Genel parametreler başvurularla da çalışır. Başvuruya göre kısıtlamak, yalnızca değerleri okumaya ihtiyacınız olduğunda Copy gerektirmemenizi sağlar.

Bu longest_str tarzı yardımcı, iki dilimi ödünç alır ve sahipliği devralmadan birini döndürür.

fn pick<'a, T: PartialOrd>(a: &'a T, b: &'a T) -> &'a T {
    if a > b { a } else { b }
}

Hızlı Kontrol

Rust'taki genel işlevleri anlayışınızı sınayın.

Özet

Genel işlevler, tek biçimlendirme sayesinde çalışma zamanı maliyeti olmadan birçok türde çalışmak için açılı ayraçlar içinde tür parametreleri kullanır.

Genel bir tür üzerindeki işlemler için PartialOrd, Copy veya Display gibi özellik sınırları gerekir. Çıkarım türü belirleyemediğinde turbobalığı kullanın.

Sıkça Sorulan Sorular

“Jenerik İşlevler” dersi ücretsiz mi?

Evet — “Jenerik İşlevler” 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 İşlevler” dersinde ne öğreneceğim?

Davranışı türe göre parametreleştirin. 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 1. dersidir.

“Jenerik İşlevler” 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

  1. Jenerik İşlevler
  2. Jenerik Struct'lar ve Enum'lar
  3. Trait Sınırları
  4. where İfadeleri ve Birden Çok Sınır
← Learn Rust Coding Sayfasına Dön