ماڈیول اسباق (2/2)
قدیم اقسام
زنگ ایک سٹیٹک طور پر ٹائپ شدہ زبان ہے، جس کا مطلب ہے کہ اسے کمپائل کے وقت تمام متغیرات کی قسم کا علم ہونا چاہیے۔ عام طور پر، مرتب کرنے والا تفویض کردہ قدر کی بنیاد پر قسم کا اندازہ لگا سکتا ہے، لیکن بعض اوقات اسے دستی طور پر بیان کرنا ضروری یا مددگار ہوتا ہے۔
زنگ میں قدیم اقسام کو دو اہم زمروں میں تقسیم کیا گیا ہے: اسکالرز (واحد قدر) اور مرکب (قدروں کا گروپ)۔
اسکیلر کی اقسام
اسکیلر قسمیں ایک ہی قدر کی نمائندگی کرتی ہیں۔ زنگ کی چار بنیادی اسکیلر اقسام ہیں:
- انٹیجرز: پورے نمبر۔ ان پر دستخط کیے جاسکتے ہیں (
i8,i16,i32,i64,i128,isize) یا غیر دستخط شدہ (PROTECTED_INLINE_IN_LINETECTED,IN7__PROTECTED,u32,u64,u128,usize)۔ پہلے سے طے شدہ قسمi32ہے۔ - فلوٹنگ پوائنٹ: اعشاریہ پوائنٹس کے ساتھ اعداد۔ وہ
f32یاf64(دوہری درستگی، ڈیفالٹ) ہو سکتے ہیں۔ - بولین: منطقی سچائی کو
trueیاfalse(ٹائپbool) کے ساتھ پیش کریں۔ - حروف: ایک واحد یونیکوڈ اسکیلر قدر جو سنگل اقتباسات میں بند ہے (قسم
char)، جیسے،'a'،'ℤ'، یا emoji'😻'۔
واضح قسم کی تشریح کی مثال:
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';مرکب کی اقسام
کمپاؤنڈ کی اقسام متعدد اقدار کو ایک قسم میں گروپ کر سکتی ہیں۔ زنگ کی دو اہم قدیم مرکب اقسام ہیں:
ٹوپلس
ایک ٹپل مختلف اقسام کی اقدار کو ایک مقررہ سائز کے مجموعہ میں گروپ کرتا ہے:
let person: (String, i32) = (String::from("Alice"), 30);
// Destructuring to extract values
let (name, age) = person;
// Direct access with index using dot (.)
let name_direct = person.0;
let age_direct = person.1;صفیں (فکسڈ سائز کی فہرستیں)
ایک ارے ایک ہی قسم کے متعدد عناصر کو اسٹیک پر ذخیرہ کردہ ایک مقررہ سائز کے مجموعہ میں گروپ کرتا ہے:
let numbers = [1, 2, 3, 4, 5]; // Inferred as [i32; 5]
let first = numbers[0]; // Access by index
let third = numbers[2];اگر آپ صف کی حدود سے باہر کسی انڈیکس تک رسائی حاصل کرنے کی کوشش کرتے ہیں (مثال کے طور پر، numbers[10])، تو رن ٹائم پر غیر مجاز میموری تک رسائی کی اجازت دینے کے بجائے زنگ فوری طور پر کریش ہو جائے گا۔
موازنہ
| خصوصیت | ٹوپل | صف |
|---|---|---|
| عنصر کی اقسام | مختلف ہو سکتا ہے | ایک ہی ہونا چاہیے |
| سائز | فکسڈ | فکسڈ |
| رسائی | انڈیکس بذریعہ ڈاٹ (جیسے، .0) | مربع بریکٹ (جیسے، [0]) |
خود ہی آزمائیں۔
30 سال کی عمر (انٹیجر) اور اسکور 95.5 (فلوٹ) پر مشتمل ٹیپل نامی اعدادوشمار کا اعلان کریں۔ اس کے بعد، اس کے انڈیکس کا استعمال کرتے ہوئے ٹیپل کے دوسرے عنصر تک براہ راست رسائی حاصل کرکے اسکور کو اسکرین پر پرنٹ کریں۔
اشارہ دکھائیں۔
`let stats = (30, 95.5);` کے ساتھ ٹیپل بنائیں۔ `println!` میکرو کے اندر `stats.1` کا استعمال کرتے ہوئے دوسرے عنصر تک رسائی حاصل کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
1 سے 5 تک عددی اقدار پر مشتمل ایک صف نامی نمبر کا اعلان کریں۔ پرنٹ ایل این کا استعمال کرتے ہوئے صف کے تیسرے عنصر (انڈیکس 2) کو اسکرین پر پرنٹ کریں۔
اشارہ دکھائیں۔
`لیٹ نمبرز = [1, 2, 3, 4, 5];` کے ساتھ صف کا اعلان کریں اور تیسرے عنصر کو `[2]` کے ساتھ انڈیکس کرکے اس تک رسائی حاصل کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ٹیوپل `لیٹ پوائنٹ = (10، 20);` کو دیکھتے ہوئے، قدروں کو `x` اور `y` نامی دو متغیرات میں نکالنے کے لیے تخریب کاری کا استعمال کریں۔ پھر، `x` اور `y` کا مجموعہ پرنٹ کریں۔
اشارہ دکھائیں۔
نحو کا استعمال کریں `let (x, y) = point;` tuple کو ختم کرنے کے لئے اور پھر متغیرات کو `println!` میں جمع کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔