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

متغیرات اور تغیر پذیری۔

زنگ میں، متغیر اور میموری کا انتظام دو بنیادی اصولوں سے ہوتا ہے: حفاظت اور کنٹرول۔ اس وجہ سے، بہت سی دیگر پروگرامنگ زبانوں کے برعکس، Rust میں متغیرات بذریعہ ڈیفالٹ ناقابل تغیر ہوتے ہیں۔

اس کا مطلب ہے کہ ایک بار ایک قدر متغیر کو تفویض کر دی جائے تو اسے تبدیل نہیں کیا جا سکتا۔ اگر آپ اس میں ترمیم کرنے کی کوشش کرتے ہیں تو، مرتب کرنے والا ایک غلطی اٹھائے گا۔

ناقابل تغیر متغیرات اور mut کلیدی لفظ

متغیر کا اعلان کرنے کے لیے، ہم let کلیدی لفظ استعمال کرتے ہیں:

Rust
let x = 5; // Immutable by default
// x = 6; // ERROR! The compiler will refuse to build this code.

اگر آپ کو کسی متغیر کی قدر میں ترمیم کرنے کی ضرورت ہے، تو آپ کو mut کلیدی لفظ let کے فوراً بعد استعمال کرکے اسے واضح طور پر تبدیل کرنا ہوگا۔

Rust
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 کلیدی لفظ کو دوبارہ استعمال کرتے ہوئے اسی نام کے ساتھ متغیر کا دوبارہ اعلان ہے۔ نیا متغیر "سائے" (یا احاطہ کرتا ہے) پچھلے ایک:

Rust
let x = 5;
let x = x + 1; // Shadowing: x is now 6
let x = x * 2; // Shadowing: x is now 12

mut کے برعکس، شیڈونگ آپ کو اجازت دیتا ہے:

  1. اسی نام کو رکھتے ہوئے متغیر کی ڈیٹا کی قسم کو تبدیل کریں۔
  2. تبدیلیوں کے بعد متغیر کی عدم تغیر کو برقرار رکھیں۔
Rust
let spaces = "   "; // Type: &str (string)
let spaces = spaces.len(); // Type: usize (number)

شیڈونگ اور اسکوپس کی افادیت

شیڈونگ ایک ہی بلاک تک محدود نہیں ہے۔ اسے نیسٹڈ بلاکس ({}) کے اندر عارضی طور پر کسی قدر کو اوور رائڈ کرنے کے لیے استعمال کیا جا سکتا ہے۔ جب اندرونی بلاک ختم ہوجاتا ہے، تو اصل متغیر دوبارہ نظر آتا ہے:

Rust
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

یہ طریقہ کار انتہائی محفوظ اور موثر ہے کیونکہ یہ مکمل طور پر مرتب وقت پر ہوتا ہے، بغیر کسی رن ٹائم کارکردگی کے اوور ہیڈ کے قسم کی حفاظت کو یقینی بناتا ہے۔


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

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

5 کی ابتدائی قیمت کے ساتھ x نامی ایک متغیر متغیر کا اعلان کریں۔ اس کے بعد، x میں 10 شامل کریں اور پرنٹ ایل این کا استعمال کرتے ہوئے اسے اسکرین پر پرنٹ کریں! میکرو

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

متغیر کا اعلان `let mut x = 5;` کے ساتھ کریں، پھر اسے `x += 10;` (یا `x = x + 10;`) سے بڑھائیں اور آخر میں اسے `println!('{}', x);` کے ساتھ پرنٹ کریں۔

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

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

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 کوششوں کے بعد حل دستیاب ہے۔

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

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 کوششوں کے بعد حل دستیاب ہے۔