آموزش Rust-قسمت ششم(دستورات شرطی و حلقه‌ها)

اگر قبلا با دستورات شرطی توی هر زبانی آشنایی داشته باشید حتما این قسمت براتون خیلی آسون میشه کافیه به مثال زیر نگاهی بندازید که داره مقدار متغیر number رو بررسی می‌کنه،اگر مقدار کوچکتر از 7 باشه ()print اولی اجرا میشه در غیر این صورت ()print دومی.

fn main() {
     let number = 3;
     if number < 5 {
              println!(&quotcondition was true&quot);
     } else 
     {         
              println!(&quotcondition was false&quot);
     } 
}

توجه کنید که عبارت if در صورتی شرطی رو چک میکنه که مقدار بازگشتیش true یا false باشه:

fn main() {
     let number = 3;
     if number {
              println!(&quotnumber was three&quot);
     }
 }

برنامه بالا خطای زیررو تولید می‌کنه:

چند شرطی

میشه با ترکیب if و else عبارت else if رو به وجود آورد:

fn main() {
     let number = 6;
     if number % 4 == 0 {
              println!(&quotnumber is divisible by 4&quot);
     } else if number % 3 == 0 {
              println!(&quotnumber is divisible by 3&quot);
     } else if number % 2 == 0 {
              println!(&quotnumber is divisible by 2&quot);
    } else {
             println!(&quotnumber is not divisible by 4, 3, or 2&quot);
   }
}

خروجی برنامه بالا:

number is divisible by 3

استفاده از if و کلید واژه‌ی let

به دلیل این که if می‌تونه مقدار برگردونه می‌تونیم مثل مثال زیر ازش استفاده کنیم:

fn main() {
     let condition = true;
     let number = if condition {
          5 
     }
     else { 
          6    
    }; 
    println!(&quotThe value of number is: {}&quot, number); }

خروجی برنامه بالا :

The value of number is: 5

توجه کنید هر قسمت از بلاک های if باید نوع یکسانی رو برگردونن مثال:

fn main() {
     let condition = true;
     let number = if condition {
              5    
    } else {
              &quotsix&quot
    };
    println!(&quotThe value of number is: {}&quot, number); }

برنامه بالا به این دلیل که نوع های یکسانی رو برنمی‌گردونه توسط کامپایلر خطا میده:

به همین دلیل می‌گیم راست در زبان کامپایل نیاز داره تا نوع همه متغیرها رو بدونه.

loop,while,for

حلقه‌ای که با کلید واژه‌ی loop ساخته میشه تا ابد، کد رو تکرار می‌کنه.تنها راه خارج شدن این که به صورت مستقیم خارج بشیم که جلوتر توضیح میدیم.

fn main() {
     loop {
              println!(&quotagain!&quot);    
     }
}

نتیجه:

again!
again!
again!
again!
^Cagain!

برای خروج از این حلقه بینهایت توی cmd باید ctrl+c بزنید.

بازگشت مقدار از حلقه

میشه با کلیدواژه‌ی break از داخل حلقه خارج شد و حتی مقداری رو برگردوند.

fn main() {
     let mut counter = 0;
     let result = loop {
              counter += 1;
              if counter == 10 {
                       break counter * 2; 
              }
    };
    println!(&quotThe result is {}&quot, result); 
}

مثال بالا یه متغیر شمارنده ساختیم و تغییر پذیرش(mut) کردیم. حالا توی یه حلقه به مقدارش اضافه کردیم و چک می کنیم که اگر برابر 10 شد ضربدر 2 کنه و مقدارش رو برگدونه در واقع با دستور break هم از حلقه خارج شدیم و هم مقداری رو برگردوندیم. که نتیجه برابر 20 میشه.

while

میشه با استفاده از این دستور هم عمل چک کردن و هم عمل تکرار رو انجام داد:

fn main() {
     let mut number = 3;
     while number != 0 {
          println!(&quot{}!&quot, number);
          number -= 1;
     }
     println!(&quotLIFTOFF!!!&quot); }

حتی میشه ازش برای خواندن عناصر آرایه‌ها هم استفاده کرد:

fn main() {
     let a = [10, 20, 30, 40, 50];
     let mut index = 0;
     while index < 5 {
              println!(&quotthe value is: {}&quot, a[index]);
              index += 1;
     }
}

که نتیجه میشه:

the value is: 10
the value is: 20
the value is: 30
the value is: 40
the value is: 50

for

میشه از for هم برای حلقه‌ها استفاده کرد. که خیلی شبیه به foreach توی زبون های دیگست.مثال زیر یه حلقست که عناصر یه آرایه رو میخونه:


fn main() {
     let a = [10, 20, 30, 40, 50];
           for element in a.iter() {
                    println!(&quotthe value is: {}&quot, element);
           }
}

آرایه ها به صورت پیش فرض قابل شمارش نیستند به این معنی که باید اون ها رو با متد ()iter. برای for قابل شمارش کرد درباره‌ی این موضوع بعد بیشتر صحبت می‌‌کنیم.کد بالا عناصر آرایه a رو یکی یکی واکشی میکنه و در آرایه‌ی element میزاره و داخل حلقه توسط print چاپ میکنه.

مثال دیگه ای از for برای چاپ کردن اعداد به صورت برعکس:

fn main() {
     for number in (1..4).rev() {
              println!(&quot{}!&quot, number);
     }
     println!(&quotLIFTOFF!!!&quot); }

یه بازه از اعداد با .. از 1 تا 4 ساختیم و داخل پرانتز قرار دادیم و بهش یه متد توکاری به نام ()rev. رو بهش دادیم یعنی به جای این که از 1 تا 4 بره،به صورت برعکس از 4 تا 1 اعداد رو چاپ میکنه.

این بخش هم تموم شد.من توی 4 قسمت مهمترین و اساسی ترین مفاهیم Rust رو گفتم.امیدوارم حالا با این مفاهیم چند تا تمرین کوچیک بنویسید و خوب تمرین کنید برای شروع می‌تونید از تمرینات زیر استفاده کنید:

  • تبدیل فارنهایت به سیلیسیوس و برعکس
  • چاپ اعداد فیبوناچی
  • چاپ اعداد زوج و فرد

اگر خواستید می‌تونید جواب ها رو توی بخش نظرات برام بفرستید.

https://virgool.io/@komeilshahmoradi/yfbfbeugvbwt