ماڈیول اسباق (2/2)
طریقے اور impl بلاکس
Rust میں، طریقے فنکشنز سے ملتے جلتے ہیں، لیکن ان کی تعریف کسی ڈھانچے (یا ایک enum یا خاصیت) کے تناظر میں کی جاتی ہے، اور ان کا پہلا پیرامیٹر ہمیشہ self ہوتا ہے، جو اس ڈھانچے کی مثال کو ظاہر کرتا ہے جس پر طریقہ کو بلایا جا رہا ہے۔
impl کے ساتھ طریقوں کی وضاحت
ساخت پر طریقوں کی وضاحت کرنے کے لیے، ہم ساخت کے نام کے ساتھ ایک impl (عمل درآمد) بلاک استعمال کرتے ہیں:
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 کو اپنے پہلے پیرامیٹر کے طور پر قبول نہیں کرتے ہیں انہیں ** وابستہ فنکشنز** کہا جاتا ہے (دیگر زبانوں میں جامد طریقوں کے برابر)۔
وہ اکثر ساخت کی نئی مثالوں کو واپس کرنے کے لیے بطور کنسٹرکٹر استعمال ہوتے ہیں۔ انہیں کال کرنے کے لیے، ڈبل کولن :: نحو استعمال کریں:
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) کے طور پر قرار دیا جانا چاہئے:
impl Rectangle {
fn double_size(&mut self) {
self.width *= 2;
self.height *= 2;
}
}خود ہی آزمائیں۔
ایریا کے طریقہ کار کی وضاحت کرتے ہوئے impl بلاک کو مکمل کریں جو &self لیتا ہے اور u32 واپس کرتا ہے (چوڑائی اور اونچائی کی ضرب)۔
اشارہ دکھائیں۔
لکھیں `fn area(&self) -> u32 { self.width \* self.height }``impl Rectangle` بلاک کے اندر۔
3 کوششوں کے بعد حل دستیاب ہے۔
impl مستطیل کے اندر مربع سے وابستہ فنکشن کی وضاحت کریں، جو سائز: u32 وصول کرتا ہے اور سائز کے برابر چوڑائی اور اونچائی کے ساتھ مستطیل مثال دیتا ہے۔
اشارہ دکھائیں۔
لکھیں `fn مربع (سائز: u32) -> مستطیل { مستطیل { چوڑائی: سائز، اونچائی: سائز } }`` امپل` بلاک کے اندر۔
3 کوششوں کے بعد حل دستیاب ہے۔
اسکیل میوٹیٹر طریقہ کو امپل بلاک کے اندر مستطیل میں شامل کریں۔ پیمانے کے طریقہ کار کو خود (&mut self) اور ایک فیکٹر: u32 پیرامیٹر کا ایک تغیر پذیر حوالہ لینا چاہیے، اور مستطیل کی چوڑائی اور اونچائی دونوں کو فیکٹر سے ضرب دینا چاہیے۔
اشارہ دکھائیں۔
`fn سکیل (&mut self, factor: u32)` کو اپ ڈیٹ کرنے کے لئے`self.width` اور`self.height`کو`فیکٹر` سے ضرب دے کر لاگو کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔