Genel türlerle Rust kod ayak izinizi azaltın ve sağlamlığını artırın.

Uygulama geliştirirken her zaman belirsizlik seviyeleri vardır ve bu, özellikle işlevleriniz belirli türde bağımsız değişkenleri kabul ediyorsa hatalara yol açabilir. Belirsizliklerden kaynaklanan hataları azaltmak için Jenerikleri kullanabilirsiniz. Jenerikler, farklı türlerle çalışmak için sınıflar, işlevler ve veri yapıları oluşturmaya yönelik işlevsellik sağlar.

Jenerikleri kullanarak, her tür için karmaşık kod ve ayrı uygulamalar yazmadan birden çok tür üzerinde çalışabilen algoritmalar ve veri yapıları oluşturabilir ve tanımlayabilirsiniz. Jenerikler, tür güvenliği ve performansını korurken kodun yeniden kullanılabilirliğini ve verimliliğini artırır.

Rust'ta Genel Türleri Kullanma

Rust'ın jenerik türü, Rust ile birlikte çalışabilir. diğer Rust veri türleri. Genel türleri açılı ayraçlar (<>) ve ardından iki veya daha fazla parametre ile tanımlayacaksınız.

İşte bir jenerik yapı tanımı bu, iki genel tür parametresi alır:

instagram viewer
yapıNokta {
// T ve U, x ve y alanlarının kullanacağı jenerik tip parametrelerdir.
// somutlaştırmada varsay
x: T,
y: u,
}

İçinde Nokta yapı, T, Ve sen jenerik tip parametrelerdir.

Genel tür parametrelerini, örnekleme sırasında herhangi bir veri türüyle değiştirebilirsiniz:

fnana() {
izin vermek my_point = Nokta { x: Sicim::itibaren("Merhaba"), ve: Sicim::itibaren("dünya") };

yazdır!(
"noktamın x değeri {} ve y değeri {}.",
benim_noktam.x,
benim_noktam.y
);
}

bu benim_noktam değişken, örneğinin bir örneğidir Nokta struct, dize türleri ile başlatıldı. Rust derleyicisi, somut türlerini çıkarır. T Ve sen örneklemedeki değerlere dayalı olarak.

Genel Türler İçin Özellik Sınırları

Rust genel türleri, tür güvenliğini sağlamak için özellik sınırlarını kullanabilir. Özellikler, özellik için tanımlanan belirli davranışları sergilemek için türlerin uygulayabileceği yöntemlerin koleksiyonlarıdır.

Özellik sınırları, genel bir türün bir veya daha fazla özellik uygulaması gerektiğini belirtir.

İşte, karşılaştırılan türlerin özelliği uygulamasını sağlayan bir özellik sınırıyla iki değerden büyük olanı döndüren bir genel işlev örneği:

// Maksimum, iki maksimumu değerlendirmek için bir yöntem tanımlayan bir özelliktir.
// türler
karakterMaksimum {
fnmaks.(öz, diğer: öz) -> öz;
}

// "Maksimum" özelliğini uygulayan tüm türler için uygular.
// "PartialOrd" özelliği.
imaKısmi Sıra> Maksimum için T {
fnmaks.(öz, diğer: öz) -> öz {
// "diğer"den büyükse "self"i döndürür; aksi halde iade
// `diğer`
eğeröz > diğer {
öz
} başka {
diğer
}
}
}

fnana() {
izin vermek bir = 5;
izin vermek b = 10;
izin vermek en büyük = Maksimum:: maks (a, b);
yazdır!("En büyük değer {}", en büyük);
}

bu Maksimum özelliği vardır maks. aynı türdeki iki değerden büyük olanı döndüren yöntem. uygulayan herhangi bir tür Kısmi Sıra özellik uygular Maksimum karakter.

bu maks. yöntemi iki değer alır öz type—uygulayan türü ifade eder Maksimum özellik—ve değerleri karşılaştırır.

bu ana işlevi kullanarak iki değişkeni karşılaştırır maks. yöntemini kullanır ve en büyüğünü yazdırır.

Genel Türler için Kısıtlamalar

Kısıtlamalar özellik sınırlarına benzer, ancak tür parametreleri olarak kullandığınız türler için ek gereksinimler belirtmenize olanak tanır.

Dize dönüştürme için türleri kabul eden genel bir işlev oluşturmak istiyorsanız, type parametresinin bir özellik uygulamasını sağlamak için bir kısıtlama kullanabilirsiniz.

// ToString, dize dönüştürme yöntemine sahip bir özelliktir
karakterToString {
fnto_string(&öz) -> Sicim;
}

// to_string herhangi bir türden değer alan genel bir işlevdir.
// ToString niteliğini uygular
fnto_stringToString>(değer: T) -> Sicim {
değer.to_string()
}

bu to_string value parametresi, ToString türdeki değerleri dönüştürebilmenizi sağlayan özellik T ile dizmek to_string yöntem.

Genel Türler, Özelliklerle Çalışmak İçin Yararlıdır

Rust jenerik türleri güçlüdür ve iyileştirilmesi gereken alanlar vardır. Kritik bir odak alanı, genel kodun performansını iyileştirmektir. Şu anda, Rust'ın tür sistemi, genel koda ek yük getirerek performansı yavaşlatabilir.

Genel tipler, özelliklerle çalışmak için faydalıdır. Genel türleri kullanarak, yöntemlerinizi daha esnek hale getirmek için bir özellik uygulayan herhangi bir türle çalışan özellik nesneleri oluşturabilirsiniz.