مرکزی مواد پر جائیں
ماڈیول 4 · سبق 2 از 2کورس میں 8/14~12 min
ماڈیول اسباق (2/2)

طریقے اور impl بلاکس

Rust میں، طریقے فنکشنز سے ملتے جلتے ہیں، لیکن ان کی تعریف کسی ڈھانچے (یا ایک enum یا خاصیت) کے تناظر میں کی جاتی ہے، اور ان کا پہلا پیرامیٹر ہمیشہ self ہوتا ہے، جو اس ڈھانچے کی مثال کو ظاہر کرتا ہے جس پر طریقہ کو بلایا جا رہا ہے۔

impl کے ساتھ طریقوں کی وضاحت

ساخت پر طریقوں کی وضاحت کرنے کے لیے، ہم ساخت کے نام کے ساتھ ایک impl (عمل درآمد) بلاک استعمال کرتے ہیں:

Rust
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // This is an instance method. It takes &self for reading.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Call the method using dot notation
    println!("The area is: {}", rect.area());
}

وابستہ (جامد) افعال

impl بلاک کے اندر بیان کردہ فنکشنز جو ** self کو اپنے پہلے پیرامیٹر کے طور پر قبول نہیں کرتے ہیں انہیں ** وابستہ فنکشنز** کہا جاتا ہے (دیگر زبانوں میں جامد طریقوں کے برابر)۔

وہ اکثر ساخت کی نئی مثالوں کو واپس کرنے کے لیے بطور کنسٹرکٹر استعمال ہوتے ہیں۔ انہیں کال کرنے کے لیے، ڈبل کولن :: نحو استعمال کریں:

Rust
impl Rectangle {
    // Associated function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Call the associated function
    let sq = Rectangle::square(10);
}

وہ طریقے جو حالت میں ترمیم کرتے ہیں: &mut self

اگر کسی طریقہ کو ڈھانچے کے شعبوں میں ترمیم کرنے کی ضرورت ہے، تو اسے اپنے پہلے پیرامیٹر کا اعلان &mut self کے طور پر کرنا چاہیے۔ خود جس مثال پر طریقہ کو بلایا جاتا ہے اسے متغیر (let mut) کے طور پر قرار دیا جانا چاہئے:

Rust
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

خود ہی آزمائیں۔

ورزش#rust.m4.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

ایریا کے طریقہ کار کی وضاحت کرتے ہوئے impl بلاک کو مکمل کریں جو &self لیتا ہے اور u32 واپس کرتا ہے (چوڑائی اور اونچائی کی ضرب)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

لکھیں `fn area(&self) -> u32 { self.width \* self.height }``impl Rectangle` بلاک کے اندر۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#rust.m4.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

impl مستطیل کے اندر مربع سے وابستہ فنکشن کی وضاحت کریں، جو سائز: u32 وصول کرتا ہے اور سائز کے برابر چوڑائی اور اونچائی کے ساتھ مستطیل مثال دیتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

لکھیں `fn مربع (سائز: u32) -> مستطیل { مستطیل { چوڑائی: سائز، اونچائی: سائز } }`` امپل` بلاک کے اندر۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#rust.m4.l2.e3
کوششیں: 0لوڈ ہو رہا ہے…

اسکیل میوٹیٹر طریقہ کو امپل بلاک کے اندر مستطیل میں شامل کریں۔ پیمانے کے طریقہ کار کو خود (&mut self) اور ایک فیکٹر: u32 پیرامیٹر کا ایک تغیر پذیر حوالہ لینا چاہیے، اور مستطیل کی چوڑائی اور اونچائی دونوں کو فیکٹر سے ضرب دینا چاہیے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`fn سکیل (&mut self, factor: u32)` کو اپ ڈیٹ کرنے کے لئے`self.width` اور`self.height`کو`فیکٹر` سے ضرب دے کر لاگو کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔