komeil shahmoradi
komeil shahmoradi
خواندن ۴ دقیقه·۵ سال پیش

آموزش 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!(&quotThe value of x is: {}&quot, x); x = 6; println!(&quotThe value of x is: {}&quot, 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!(&quotThe value of x is: {}&quot, x); 4 | x = 6; | ^^^^^ cannot assign twice to immutable variable

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

println!(&quotThe value of x is: {}&quot, x);

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

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

fn main() { let mut x = 5; println!(&quotThe value of x is: {}&quot, x); x = 6; println!(&quotThe value of x is: {}&quot, 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 می‌تونیم یه متغیر هم اسم متغیر قبلی تعریف کنید، به شرطی که از کلید واژه let قبل از نام متغیر استفاده کنید. مثال:

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

توی خط اول متغیری با نام x با مقدار 5 معرفی کردیم و در خط بعدی بدون این که از کلید واژه mut استفاده کنیم مقدار اون رو تغییر دادیم و همین کار رو در خط سوم هم انجام دادیم.

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

let spaces = &quot &quot let spaces = spaces.len();

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

let mut spaces = &quot &quot 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


برنامه نویسیrustmutimmutableshadowing
Backend Developer | .Net
شاید از این پست‌ها خوشتان بیاید