آموزش Rust- قسمت سوم(متغیرها و تغییر پذیری )

متغیرها و تغییر پذیری
متغیرها و تغییر پذیری
توجه تمامی آموزش‌های قرار گرفته شده در این مجموعه آموزشی، ترجمه مبتدی help خود زبان Rust می‌‌باشد.منبع اصلی


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

برای تعریف متغیرها در Rust از کلمه‌ی رزرو شده let باید استفاده کنیم و در آخر هر خط ; باید بزاریم:

let _x = 5;

قرارداد نام گذاری متغیرهای محلی در Rust به صورت snake_case هست یعنی تمام نام،با حروف کوچیک نوشته میشه و برای خوانایی بهتر از زیرخط(Underline) استفاده میشه:

let snake_case = 0;

در Rust متغیرها به صورت پیش فرض تغییرناپذیرند(Immutable).خیلی ها این مفهوم رو با ثابت ها(constant)اشتباه می‌گیرن که جلوتر دربارش صحبت می‌کنیم.زمانی که تغییرناپذیری رو با مقداری تعریف می‌‌کنیم اگر دوباره مقداری بهش بدیم کامپایلر خطا میده.اجازه بدین تا با مثال های زیر شروع کنیم:

fn main() {     
    let x = 5;     
    println!("The value of x is: {}", x);     
    x = 6;     
    println!("The value of x is: {}", x); 
} 

اگر برنامه بالا رو در Vscode با هر روش اجرا کنیم خطای زیر رو به ما نشون میده:

error[E0384]: cannot assign twice to immutable variable `x` 
 --> src/main.rs:4:5   
 | 2 |     let x = 5;   
 |         - first assignment to `x` 3 
 |     println!("The value of x is: {}", x); 4 |     x = 6;   
 |     ^^^^^ cannot assign twice to immutable variable

در برنامه‌ی بالا با استفاده از ()!println نتیجه رو در کنسول چاپ کردیم اگر هم با برنامه نویسی c# کار کرده باشین میدونین که استفاده از {} در رشته‌ها باعث چاپ کارکتری مخصوصی در اون قسمت میشه مثال:

println!("The value of x is: {}", x); 

در بالا x به جای {} چاپ میشه.

اما متغیرها فقط به صورت پیش فرض تغییر ناپذیرند و میشه اون ها رو با mut تغییر پذیر کرد:

fn main() {     
    let mut x = 5;  
    println!("The value of x is: {}", x);     
    x = 6;     println!("The value of x is: {}", x); 
}

و نتیجه به صورت زیر هست:

The value of x is: 5 
The value of x is: 6

تفاوت متغیرها(تغییرپذیرها) و ثابت ها

تغییر مقدار یه متغیری که به صورت پیش فرض تغییرناپذیر هست (توی یه جمله چقدر غ گفتم) با یه ثابت کاملا متفاوته.

  • برای تعریف ثابت‌ها از mut نمی‌شه استفاده کرد و همیشه ثابت هستند و در هیچ جای دیگه قابل تغییر نیستند
  • برای تعریف از کلیدواژه const به جای let استفاده میشه
  • حتما باید نوعشون مشخص باشه که در آموزش بعدی با مفهوم نوع ها بیشتر آشنا میشم

در مثال زیر یه ثابت با نامMAX_POINTS تعریف شده که مقدارش برابر شده با 100000 که با استفاده از _ برای خوانایی بیشتر از هم جدا شده.قرارداد نام گذاری ثابت‌ها هم به صورت Uppercase با Underline.

const MAX_POINTS: u32 = 100_000; 

پنهان کردن(Shadowing)

در Rust می‌تونیم یه متغیر، هم اسم متغییر قبلی تعریف کنید،برنامه نویس های Rust که Rustaceans نام دارند به متغیر اول توسط متغیر دوم پنهان شده به این معنا که مقدار متغیر دوم حالا نمایش داده میشه به شرطی که از کلید واژه‌‌ی let استفاده کنیم. مثال:

fn main() {     
    let x = 5;      
    let x = x + 1;      
    let x = x * 2;      
    println!("The value of x is: {}", x); 
}

برنامه باید مقدار 5 رو چاپ کنه یا حداقل خطا بده ولی داره از مفهوم shadowing استفاده می‌کنه و مقدار 12 رو چاپ می‌کنه.پنهان کردن با mut کردن یه متغیر متفاته. مثال:

let spaces = "   " 
let spaces = spaces.len();

با استفاده از let هم از مفهموم shadowing استفاده کردیم و هم نوع متغیر رو تغییر دادیم مثال بالا خطایی ندارد و نتیجه رو اگر چاپ کنیم تعداد space هایی رو که در رشته بوده به صورت عدد بر می‌گردونه که در این مثال 3 هست. اما اگر از کلید واژه ی mut استفاده کنیم :

let mut spaces = "   " 
spaces = spaces.len();

خطا :

error[E0308]: mismatched types  
--> src/main.rs:3:14   
   | 
3 |     spaces = spaces.len();   
   |                     ^^^^^^^^^^^^ expected &str, found usize   
   |   = note: expected type `&str`              
                   found type `usize`

خب این قسمت هم تموم شد سعی کنید خوب این مفاهیم رو درک کنید چرا که هرچی جلوتر بریم مفاهیم یه مقدار سخت‌تر میشه.توی آموزش بعدی درباره‌ی نوع داده ها صحبت می‌کنیم.

https://virgool.io/@komeilshahmoradi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-rust-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-bxx5wevvshp4


https://virgool.io/@komeilshahmoradi/آموزش-rust-قسمت-دومنصب-و-راه-اندازی-qsdpsfe5iqfj