دامنه (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);
}
گام های تمرین
- یک تابع بساز و متغیر داخلی چاپ کن.
- یک if بساز و متغیر داخل آن تعریف کن.
- با
letسایه زنی انجام بده. - همان نام را داخل بلوک جدید تست کن.
چرا دامنه مهم است؟
دامنه از تداخل نام ها جلوگیری می کند. خطاهای دسترسی را کم می کند. کد تمیزتر و قابل فهم تر می شود.
جمع بندی سریع
- دامنه در راست، محدوده زندگی متغیر است.
- بیرون بلوک، متغیر در دسترس نیست.
- سایه زنی با
letمجاز است. - بلوک جدید، دامنه جدید می سازد.
برای ادامه، صفحه توابع را مرور کن. همچنین به رشته ها سر بزن تا مدیریت متن را یاد بگیری.