跳轉到內容

Rust 新手程式設計師/迴圈和迭代

100% developed
來自 Wikibooks,開放世界中的開放書籍

迴圈和迭代

[編輯 | 編輯原始碼]

假設我們想遍歷從 1 到 100 的所有數字,並打印出所有能被 6 整除的數字。我們該如何實現?我們可以編寫一個函式來檢查一個數字是否能被 6 整除,我們先來做這個。透過將我們需要做的事情分開,我們可以一步一步地解決問題,這使我們更容易理解。所以首先讓我們編寫函式的框架

 fn is_divisible_six(input: i32) -> bool {
     //to do
 }

我們在這裡使用註釋來表明我們將填充函式內部的內容。目前,這無法編譯,因為函式**必須**返回一個布林值,即 true 或 false,而目前它什麼也不返回。
我們如何檢查一個數字是否能被 6 整除?快速複習一下,能被 6 整除意味著如果它除以 6,結果將是一個整數。但是,輸入型別是 i32,所以除以 6 將始終返回一個整數,因為它是進行整數除法。那麼我們該如何繼續?一種方法是不斷地從數字中減去 6,直到我們得到一個小於 6 的數字。如果這個數字是 0,就意味著該數字能被 6 整除,如果不是,則不能。然後問題是,如何用程式碼表達這種“不斷地” “直到” 的邏輯。答案是 while 迴圈。只要布林值(稱為條件)為 true,while 迴圈就會不斷地執行 {} 括號中的內容。

 fn is_divisible_six(input: i32) -> bool {
     let mut number = input;
     while number >= 6 {
         number -= 6;
     }
     if number == 0 {
          return true;
     } else {
          return false;
     }
 }

這是前面步驟的直接程式碼轉換。請注意,我們可以寫成 6 < number,這與之前是一樣的,但按照慣例,我們通常將變數放在條件左側,因為這樣更自然地閱讀和理解。
我們在這裡做的是找出輸入的餘數。這是一種非常常見的事情,所以有一個內建的方法來做到這一點,使用百分號 %。所以 a % b 獲取 a 除以 b 的餘數。因此,用這種方式編寫函式要簡單得多

 fn is_divisible_six(input: i32) -> bool {
     let remainder = input % 6;
     if remainder == 0 {
          return true;
     } else {
          return false;
     }
 }

我們可以進一步簡化,因為 remainder == 0 本身就是一個布林值,與我們想要返回的值相對應,所以我們可以這樣做

 fn is_divisible_six(input: i32) -> bool {
     let remainder = input % 6;
     return remainder == 0;
 }

這好多了。餘數運算子的寓意是,如果你正在做一些非常常見的事情,可能有一種簡單的方法可以實現,而找到這些方法的最佳方式通常是搜尋。

回到最初的事情,即遍歷從 1 到 100 的所有數字,並打印出所有能被 6 整除的數字。現在我們可以使用 while 迴圈來做到這一點,我們只需要將一個數字設定為 1,然後在數字小於或等於 100 的情況下繼續迴圈。

 fn main() {
     let mut number = 1;
     while number <= 100 {
          if is_divisible_six(number) {
              println!("{}", number);
          }
     }
 }

這可以工作,但有一種內建的簡單方法可以迭代數字。這些被稱為 for 迴圈,我們將在下面重新編寫上面的程式碼

 fn main() {
     for number in 1..101 {
         if is_divisible_six(number) {
             println!("{}", number);
         }
     }
 }

這與上面的 while 迴圈具有相同的結果,但更簡潔。1..101 被稱為一個範圍,它從 1 到 100。它在右側必須是 101 的原因是它是非包含性的,意味著它不包括最後一個數字。原因將在後面看到。我們可以使用包含性的範圍 ..=,所以 1..=100 將產生相同的結果。'for number in' 表示一個名為 number 的變數,它在 for 迴圈遍歷範圍中的值時儲存該值。for 迴圈可以遍歷任何是“迭代器”的東西,這將在後面解釋。

下一個:陣列和向量

華夏公益教科書