ماڈیول اسباق (1/2)
ڈھانچے کی وضاحت اور انسٹیٹیئٹنگ
زنگ میں سٹرکٹس (یا ڈھانچے) حسب ضرورت ڈیٹا کی قسمیں ہیں جو آپ کو متعدد متعلقہ اقدار کو ایک ساتھ گروپ کرنے کی اجازت دیتی ہیں۔ وہ دوسری زبانوں میں اشیاء یا کلاسوں سے ملتے جلتے ہیں، لیکن وراثت کے بغیر۔
ایک ساخت کی تعریف
ساخت کی وضاحت کرنے کے لیے، ہم struct کلیدی لفظ استعمال کرتے ہیں جس کے بعد PascalCase میں نام آتا ہے۔ اندر، ہم کھیتوں کے نام اور اقسام کی وضاحت کرتے ہیں:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}ایک مثال بنانا
ایک ڈھانچہ استعمال کرنے کے لیے، ہمیں تمام مخصوص فیلڈز کو بھر کر ایک مثال بنانا ہوگی۔
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}ساخت کی تبدیلی
زنگ میں، اگر آپ اس کے کسی بھی فیلڈ میں ترمیم کرنا چاہتے ہیں تو پوری مثال کو تبدیل کرنے کے قابل (mut) کے بطور نشان زد کرنا ضروری ہے۔ زنگ صرف کچھ فیلڈز کو متغیر کے طور پر نشان زد کرنے کی اجازت نہیں دیتا:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}ٹیپل سٹرکٹس اور یونٹ جیسی ساخت
زنگ کلاسک نامزد فیلڈ سٹرکٹس کے علاوہ دو دیگر ڈھانچے کی شکلوں کی بھی حمایت کرتا ہے:
- Tuple Structs: ان کا ایک منسلک نام ہے لیکن فیلڈز کے انفرادی نام نہیں ہیں، صرف قسمیں ہیں۔ وہ مخصوص اقسام کی وضاحت اور تفریق کے لیے مفید ہیں:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - یونٹ کی طرح کے ڈھانچے: وہ کسی فیلڈ کی وضاحت نہیں کرتے ہیں۔ وہ
()یونٹ کی قسم کی طرح برتاؤ کرتے ہیں۔ وہ اس وقت کارآمد ہوتے ہیں جب آپ کو کسی قسم میں کوئی ڈیٹا اسٹور کیے بغیر طرز عمل (خصائص) کو نافذ کرنے کی ضرورت ہو۔
خود ہی آزمائیں۔
کھیتوں کے ساتھ اوپر والے صارف کے ڈھانچے کی وضاحت کریں: صارف نام (سٹرنگ کی قسم) اور فعال (بول قسم)۔
اشارہ دکھائیں۔
لکھیں `struct User { username: String, active: bool }`before`main`۔
3 کوششوں کے بعد حل دستیاب ہے۔
یوزر 1 کو تبدیل کرنے کے لیے اس میں ترمیم کریں (یوزر 1 کو تبدیل کرنے دیں) اور پرنٹ کرنے سے پہلے فعال فیلڈ کو غلط میں تبدیل کریں۔
اشارہ دکھائیں۔
اسے `let mut user1`بنانے کے لئے`mut`to`let user1`شامل کریں، پھر`user1.active = false;` داخل کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
تین i32 فیلڈز پر مشتمل Color نامی ایک tuple struct کی وضاحت کریں۔ بنیادی طور پر، 255، 0، اور 100 کی قدروں کے ساتھ رنگ کو متغیر my_color کو تفویض کریں، پھر println کا استعمال کرتے ہوئے اس کا پہلا عنصر (سرخ قدر) پرنٹ کریں۔
اشارہ دکھائیں۔
tuple struct کی تعریف `struct Color(i32, i32, i32);`کے ساتھ کریں۔ بنیادی طور پر، اسے`let my_color = Color(255, 0, 100);`کے طور پر انسٹیٹیوٹ کریں اور`my_color.0` کے ساتھ سرخ قدر پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔