Csökkentse a Rust kód lábnyomát, és növelje robusztusságát az általános típusokkal.

Az alkalmazások fejlesztése során mindig vannak bizonytalanságok, ami hibákhoz vezethet, különösen, ha a függvények bizonyos típusú argumentumokat fogadnak el. A bizonytalanságok miatti hibák csökkentése érdekében használhatja a Generics alkalmazást. Az általános funkciók osztályok, függvények és adatstruktúrák létrehozására szolgálnak a különböző típusokkal való munkavégzéshez.

Az általánosságok használatával olyan algoritmusokat és adatstruktúrákat hozhat létre és definiálhat, amelyek több típuson is működhetnek anélkül, hogy összetett kódot írnának, és külön implementációkat kellene az egyes típusokhoz. Az általános termékek javítják a kód újrafelhasználhatóságát és hatékonyságát, miközben megőrzik a típusbiztonságot és -teljesítményt.

Általános típusok használata Rustban

A Rust általános típusa együttműködhet vele egyéb Rust adattípusok. Az általános típusokat szögletes zárójelekkel (<>) kell megadnia, amelyet két vagy több paraméter követ.

Íme egy általános struktúra meghatározása amely két általános típusparamétert igényel:

structPont {
// A T és U általános típusú paraméterek, amelyeket az x és y mezők tartalmaznak
// tételezzük fel a példányosítást
x: T,
y: U,
}

Ban,-ben Pont szerkezet, T, és U általános típusú paraméterek.

Az általános típusparamétereket bármilyen adattípusra lecserélheti a példányosításkor:

fnfő-() {
hagyja my_point = Pont { x: Húr::tól től("Helló"), y: Húr::tól től("világ") };

println!(
"A my_point x értéke {}, az y értéke pedig {}.",
my_point.x,
my_point.y
);
}

A my_point változó a Pont string típusokkal inicializált struct. A Rust fordító a konkrét típusokra következtet T és U a példányosítási értékek alapján.

Jellemzők határai az általános típusokhoz

A rozsda általános típusai tulajdonsághatárokat használhatnak a típusbiztonság biztosítása érdekében. A tulajdonságok olyan módszerek gyűjteményei, amelyeket a típusok implementálhatnak a tulajdonsághoz meghatározott bizonyos viselkedések kimutatására.

A tulajdonsághatárok meghatározzák, hogy egy általános típusnak egy vagy több tulajdonságot kell megvalósítania.

Íme egy példa egy általános függvényre, amely a két érték közül a nagyobbat adja vissza egy tulajdonságkorláttal, amely biztosítja, hogy az összehasonlított típusok megvalósítsák a tulajdonságot:

// A maximum egy olyan tulajdonság, amely meghatároz egy módszert a maximum kettő értékelésére
// típusok
jellemvonásMaximális {
fnmax(maga, Egyéb: Maga) -> Maga;
}

// Megvalósítja a "Maximális" tulajdonságot minden olyan típusnál, amely megvalósítja a
// `PartialOrd` tulajdonság.
implPartialOrd> Maximum számára T {
fnmax(maga, Egyéb: Maga) -> Maga {
// `saját` adja vissza, ha nagyobb, mint az `egyéb`; ellenkező esetben vissza
// `egyéb.`
hamaga > egyéb {
maga
} más {
Egyéb
}
}
}

fnfő-() {
hagyja a = 5;
hagyja b = 10;
hagyja legnagyobb = Maximum:: max (a, b);
println!("A legnagyobb érték {}", legnagyobb);
}

A Maximális tulajdonsága van a max metódus, amely két azonos típusú érték közül a nagyobbat adja vissza. Bármilyen típus, amely megvalósítja a PartialOrd vonás megvalósítja a Maximális jellemvonás.

A max módszer két értéket vesz fel a Maga típus – utalva a megvalósító típusra Maximális vonás – és összehasonlítja az értékeket.

A fő- függvény két változót hasonlít össze a max módszerrel és a legnagyobbat nyomtatja ki.

Az általános típusok megkötései

A megszorítások hasonlóak a tulajdonsághatárokhoz, de lehetővé teszik további követelmények meghatározását a típusparaméterként használt típusokra vonatkozóan.

Ha olyan általános függvényt szeretne létrehozni, amely típusokat fogad el a karakterlánc-konverzióhoz, akkor egy megszorítást használhat annak biztosítására, hogy a type paraméter egy tulajdonságot valósítson meg.

// A ToString egy karakterlánc-konverziós módszerrel rendelkező tulajdonság
jellemvonásToString {
fnto_string(&maga) -> Húr;
}

// to_string egy általános függvény, amely bármilyen típusú értéket vesz fel
// megvalósítja a ToString tulajdonságot
fnto_stringToString>(érték: T) -> Húr {
value.to_string()
}

A to_string érték paraméternek végre kell hajtania a ToString tulajdonság, amely biztosítja, hogy a típusú értékeket konvertálni tudja T felfűzni a to_string módszer.

Az általános típusok hasznosak a tulajdonságokkal való munka során

A rozsda általános típusai erősek, és vannak fejlesztendő területek. A kritikus terület az általános kód teljesítményének javítása. Jelenleg a Rust típusú rendszer túlterhelést róhat az általános kódra, lelassítva a teljesítményt.

Az általános típusok előnyösek a tulajdonságokkal való munka során. Az általános típusok használatával olyan tulajdonságobjektumokat hozhat létre, amelyek bármilyen tulajdonságot megvalósító típussal működnek, így rugalmasabbá teheti a módszereket.