முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 5 · பாடம் 1 இன் 2பாடத்திட்டத்தில் 9/14~12 min
தொகுதி பாடங்கள் (1/2)

ஜெனரிக்ஸ் மற்றும் செயல்பாடுகள்

ஜெனரிக்ஸ் பல்வேறு தரவு வகைகளுக்கான தர்க்கத்தின் நகல்களைத் தவிர்த்து, நெகிழ்வான, மீண்டும் பயன்படுத்தக்கூடிய குறியீட்டை எழுத உங்களை அனுமதிக்கிறது. வெவ்வேறு வகைகளுக்கு (i32, f64, அல்லது String) பல செயல்பாடுகள் அல்லது கட்டமைப்புகளை வரையறுப்பதற்குப் பதிலாக, T என்ற எழுத்தால் வழக்கமாகக் குறிப்பிடப்படும் பொதுவான வகை அளவுருவைப் பயன்படுத்தலாம்.

ரஸ்ட் கம்பைலர் மோனோமார்ஃபிசேஷன் எனப்படும் செயல்முறையைப் பயன்படுத்தி ஜெனரிக்ஸை நிர்வகிக்கிறது: தொகுப்பின் போது, ​​அது உண்மையில் பயன்படுத்தப்படும் ஒவ்வொரு கான்கிரீட் வகைக்கும் பொதுவான குறியீட்டின் நகலை உருவாக்குகிறது. இதன் அர்த்தம் பூஜ்ஜிய இயக்க நேர செயல்திறன் மேல்நிலை உள்ளது.


பொதுவான செயல்பாடுகள்

பொதுவான செயல்பாட்டை வரையறுக்க, செயல்பாட்டின் பெயருக்குப் பிறகும் வாதப் பட்டியலுக்கு முன்பும் <T> வகை அளவுருவைச் செருகுவோம்:

Rust
fn print_value<T: std::fmt::Debug>(value: T) {
    println!("Value: {:?}", value);
}

பொதுவான செயல்பாடுகளில், வாத வகைகள் மற்றும் திரும்பும் வகைகள் ஆகிய இரண்டிற்கும் பொதுவான வகை T ஐப் பயன்படுத்தலாம்:

Rust
fn identity<T>(value: T) -> T {
    value
}

பொதுவான கட்டமைப்புகள்

நெகிழ்வான புலங்களை வரையறுக்க, கட்டமைப்புகளுக்குள் (struct) பொதுவான வகை அளவுருக்களையும் பயன்படுத்தலாம்:

Rust
struct KeyValuePair<K, V> {
    key: K,
    value: V,
}

fn main() {
    let pair = KeyValuePair {
        key: String::from("age"),
        value: 30,
    };
}

பொதுவான கட்டமைப்பிற்கான impl தொகுதியில், impl முக்கிய சொல்லுக்குப் பிறகு <T> வகை அளவுருவை அறிவிக்க வேண்டும்.

Rust
struct Container<T> {
    value: T,
}

impl<T> Container<T> {
    fn new(value: T) -> Self {
        Container { value }
    }

    fn value(&self) -> &T {
        &self.value
    }
}

நீங்களே முயற்சி செய்து பாருங்கள்

பயிற்சி 1: புள்ளி அமைப்பு

உடற்பயிற்சி#rust.m5.l1.e1
முயற்சிகள்: 0ஏற்றுகிறது…

Point<T> எனப் பெயரிடப்பட்ட ஒரு பொதுவான கட்டமைப்பை இரண்டு புலங்களுடன் வரையறுக்கவும்: T வகை T மற்றும் y வகை T. முக்கிய செயல்பாட்டில், x = 5 மற்றும் y = 10 என்ற முழு மதிப்புகள் கொண்ட ஒரு புள்ளியைக் கொண்ட மாறி புள்ளியை உடனடியாகக் குறிப்பிடவும், பின்னர் point.x இன் மதிப்பை அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

`struct Point<T> { x: T, y: T }`ஐப் பயன்படுத்தி struct ஐ அறிவிக்கவும். அதை முதன்மையாக உடனடியாகச் செய்து, அச்சிட`point.x` ஐப் பயன்படுத்தவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

பயிற்சி 2: ஸ்வாப் மூலம் ஒரு டூபிளை மாற்றுதல்

உடற்பயிற்சி#rust.m5.l1.e2
முயற்சிகள்: 0ஏற்றுகிறது…

swap<T> எனப் பெயரிடப்பட்ட ஒரு பொதுவான செயல்பாட்டை எழுதவும், இது இரண்டு தனிமங்களின் (T, T) ஒரு துப்பிளை ஏற்று, அவற்றின் நிலைகள் தலைகீழாக மாற்றப்பட்ட புதிய tuple (T, T) ஐ வழங்கும். முக்கிய செயல்பாட்டில், tuple (1, 2) உடன் செயல்பாட்டை அழைக்கவும் மற்றும் முடிவை அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

செயல்பாட்டு கையொப்பம் `fn swap<T>(ஜோடி: (T, T)) -> (T, T)`ஆக இருக்க வேண்டும்.`(ஜோடி.1, ஜோடி.0)` உடன் தலைகீழான டூபிளைத் திருப்பி அனுப்பவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

பயிற்சி 3: கொள்கலன் அமைப்பு

உடற்பயிற்சி#rust.m5.l1.e3
முயற்சிகள்: 0ஏற்றுகிறது…

T வகையின் மதிப்புப் புலத்தைக் கொண்ட ஒரு பொதுவான கட்டமைப்பு கொள்கலனை <T> வரையறுக்கவும். T வகையின் மதிப்பை ஏற்று கொள்கலன்<T> இன் நிகழ்வை வழங்கும் புதிய முறையை வரையறுக்க ஒரு பொதுவான இம்ப்ல் பிளாக்கைச் செயல்படுத்தவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

`impl<T> கொள்கலனைப் பயன்படுத்தவும்<T>`தொடர்புடைய முறையைச் செயல்படுத்த`fn புதிய(மதிப்பு: T) -> சுய { கொள்கலன் {மதிப்பு } }`.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்