Rust

Rust — دامنه (Scope)

آخرین بروزرسانی: 1404/08/14

دامنه (Scope)

دامنه در راست یعنی «کجا متغیر زنده است». متغیر (Variable) فقط داخل بلوکی که ساخته شده معتبر است. بلوک یعنی هر چیزی بین آکولادها { } . مثل کلاس درس؛ کارت حضور فقط همان کلاس می خورد.

دامنه در راست چیست؟

دامنه (Scope) محدوده استفاده از متغیر است. بیرون از محدوده، دسترسی نداری. بنابراین خطا می گیری. این قانون از شلوغی و اشتباه جلوگیری می کند.

متغیر داخل تابع

متغیر ساخته شده داخل تابع، فقط همان جا معتبر است. بیرونش خطا می دهد.

fn my_function() {
  let message = "Hello!";
  println!("{}", message);
}

fn main() {
  my_function();
  // println!("{}", message); // Error: out of scope
}

مشاهده در ادیتور

متغیر داخل بلوک

در if یا حلقه هم بلوک داریم. متغیر داخل بلوک فقط همان جا در دسترس است.

fn main() {
  let score = 80;
  if score > 50 {
    let result = "Pass";
    println!("Result: {}", result);
  }
  // println!("Result: {}", result); // Error: out of scope
}

مشاهده در ادیتور

سایه زنی (Shadowing) در همان دامنه

در راست می توانی با let دوباره همان نام را بدهی. مقدار قبلی پوشانده می شود.

fn main() {
  let x = 5;
  let x = 10;
  println!("x is: {}", x);
}

مشاهده در ادیتور

سایه زنی داخل بلوک جدید

می توانی همان نام را داخل بلوک جدید دوباره بسازی. بیرون بلوک مقدار قبلی برقرار است.

fn main() {
  let x = 5;
  {
    let x = 10;
    println!("Inside block: {}", x);
  }
  println!("Outside block: {}", x);
}

مشاهده در ادیتور

گام های تمرین

  1. یک تابع بساز و متغیر داخلی چاپ کن.
  2. یک if بساز و متغیر داخل آن تعریف کن.
  3. با let سایه زنی انجام بده.
  4. همان نام را داخل بلوک جدید تست کن.

چرا دامنه مهم است؟

دامنه از تداخل نام ها جلوگیری می کند. خطاهای دسترسی را کم می کند. کد تمیزتر و قابل فهم تر می شود.

جمع بندی سریع

  • دامنه در راست، محدوده زندگی متغیر است.
  • بیرون بلوک، متغیر در دسترس نیست.
  • سایه زنی با let مجاز است.
  • بلوک جدید، دامنه جدید می سازد.

برای ادامه، صفحه توابع را مرور کن. همچنین به رشته ها سر بزن تا مدیریت متن را یاد بگیری.