ماڈیول اسباق (1/2)
متغیرات اور تغیر پذیری۔
زنگ میں، متغیر اور میموری کا انتظام دو بنیادی اصولوں سے ہوتا ہے: حفاظت اور کنٹرول۔ اس وجہ سے، بہت سی دیگر پروگرامنگ زبانوں کے برعکس، Rust میں متغیرات بذریعہ ڈیفالٹ ناقابل تغیر ہوتے ہیں۔
اس کا مطلب ہے کہ ایک بار ایک قدر متغیر کو تفویض کر دی جائے تو اسے تبدیل نہیں کیا جا سکتا۔ اگر آپ اس میں ترمیم کرنے کی کوشش کرتے ہیں تو، مرتب کرنے والا ایک غلطی اٹھائے گا۔
ناقابل تغیر متغیرات اور mut کلیدی لفظ
متغیر کا اعلان کرنے کے لیے، ہم let کلیدی لفظ استعمال کرتے ہیں:
let x = 5; // Immutable by default
// x = 6; // ERROR! The compiler will refuse to build this code.اگر آپ کو کسی متغیر کی قدر میں ترمیم کرنے کی ضرورت ہے، تو آپ کو mut کلیدی لفظ let کے فوراً بعد استعمال کرکے اسے واضح طور پر تبدیل کرنا ہوگا۔
let mut y = 10; // Mutable
println!("Il valore di y e: {}", y);
y = 15; // Valid!
println!("Il valore modificato di y e: {}", y);mut کا سابقہ استعمال کرنے سے کمپائلر اور کوڈ کو پڑھنے والے کسی بھی شخص کو واضح طور پر بات ہوتی ہے کہ عمل درآمد کے دوران قدر بدل جائے گی۔
سایہ دار
زنگ شیڈونگ کے تصور کی بھی اجازت دیتا ہے، جو let کلیدی لفظ کو دوبارہ استعمال کرتے ہوئے اسی نام کے ساتھ متغیر کا دوبارہ اعلان ہے۔ نیا متغیر "سائے" (یا احاطہ کرتا ہے) پچھلے ایک:
let x = 5;
let x = x + 1; // Shadowing: x is now 6
let x = x * 2; // Shadowing: x is now 12mut کے برعکس، شیڈونگ آپ کو اجازت دیتا ہے:
- اسی نام کو رکھتے ہوئے متغیر کی ڈیٹا کی قسم کو تبدیل کریں۔
- تبدیلیوں کے بعد متغیر کی عدم تغیر کو برقرار رکھیں۔
let spaces = " "; // Type: &str (string)
let spaces = spaces.len(); // Type: usize (number)شیڈونگ اور اسکوپس کی افادیت
شیڈونگ ایک ہی بلاک تک محدود نہیں ہے۔ اسے نیسٹڈ بلاکس ({}) کے اندر عارضی طور پر کسی قدر کو اوور رائڈ کرنے کے لیے استعمال کیا جا سکتا ہے۔ جب اندرونی بلاک ختم ہوجاتا ہے، تو اصل متغیر دوبارہ نظر آتا ہے:
let x = 5;
{
let x = x * 2; // Shadowing valid only inside the block
println!("Value in the inner block: {}", x); // Prints 10
}
println!("Value in the outer block: {}", x); // Prints 5یہ طریقہ کار انتہائی محفوظ اور موثر ہے کیونکہ یہ مکمل طور پر مرتب وقت پر ہوتا ہے، بغیر کسی رن ٹائم کارکردگی کے اوور ہیڈ کے قسم کی حفاظت کو یقینی بناتا ہے۔
خود ہی آزمائیں۔
5 کی ابتدائی قیمت کے ساتھ x نامی ایک متغیر متغیر کا اعلان کریں۔ اس کے بعد، x میں 10 شامل کریں اور پرنٹ ایل این کا استعمال کرتے ہوئے اسے اسکرین پر پرنٹ کریں! میکرو
اشارہ دکھائیں۔
متغیر کا اعلان `let mut x = 5;` کے ساتھ کریں، پھر اسے `x += 10;` (یا `x = x + 10;`) سے بڑھائیں اور آخر میں اسے `println!('{}', x);` کے ساتھ پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
10 کی قدر کے ساتھ ایک ناقابل تغیر متغیر y کا اعلان کریں۔ شیڈو y کو اس کی پچھلی قدر کو 2 سے ضرب دینے کے لیے دوبارہ اعلان کر کے، اور آخر میں پرنٹ ایل این کا استعمال کرتے ہوئے پرنٹ کریں۔
اشارہ دکھائیں۔
Use `let y = 10;`, then shadow it by declaring it again with `let y = y * 2;` and finally use `println!` to display it.
3 کوششوں کے بعد حل دستیاب ہے۔
Declare an immutable variable named input containing the string value "42". Shadow input by declaring it as an integer of type i32, converting the original value via input.parse::<i32>().unwrap(). Finally, print it using the println! macro.
اشارہ دکھائیں۔
Declare `let input = "42";`, then shadow it with `let input: i32 = input.parse().unwrap();` and print it using `println!("{}", input);`.
3 کوششوں کے بعد حل دستیاب ہے۔