Loops

  • Rust has three kinds of loops:

    1. loop - Infinite Loop, uses break and continue
    2. while - Breaks when the condition doesn't meet.
    3. for - Faster and easier to use for iterators and classical for loops.
  • Simple Infinite Loop:

    #![allow(unused)]
    fn main() {
    loop {
      // Do something iteratively
    }
    }
  • Named Loop

    #![allow(unused)]
    fn main() {
    'outer:loop {
     loop {
      break 'outer;
     }
    }
    }
  • Named Loop with different breaks:

    #![allow(unused)]
    fn main() {
    'oulter_loop: loop {
      loop {
        if condition {
          break 'oulter_loop; // Breaks Outer Loop
        }
    
        if some_other_condition {
          break; // Breaks Inner Loop
        }
      }
    }
    }
  • Returning values in loops:

    fn main() {
        let mut counter = 0;
    
        let result = loop {
            counter += 1;
    
            if counter == 10 {
                break counter * 2;
            }
        };
    
        println!("The result is {}", result);
    }
  • The while loop:

    fn main() {
        let mut number = 3;
    
        // Prevents the use of break, by including the condition with while
        while number != 0 {
            println!("{}!", number);
    
            number -= 1;
        }
    
        println!("LIFTOFF!!!");
    }
  • The for loop:

    #![allow(unused)]
    fn main() {
    // Last item in exclusive, or 0..10 === 0..=9
    for x in 0..10 {
        println!("{}", x); // x: i32
    }
    }
  • The for loop for iterator:

    fn main() {
        let a = [10, 20, 30, 40, 50];
    
        for element in a {
            println!("the value is: {}", element);
        }
    }
  • A for loop for iterating characters in String

    #![allow(unused)]
    fn main() {
    for c in name.chars() {
        // c variable stores one charater per iteration
    }
    }
  • Enumeration

    #![allow(unused)]
    fn main() {
    for (i, v) in request.chars().enumerate() {
        // i is index, v is variable
    }
    }
  • The for loop in reverse:

    fn main() {
        for number in (1..4).rev() {
            println!("{}!", number);
        }
        println!("LIFTOFF!!!");
    }
    
    // Output:
    // 3!
    // 2!
    // 1!
    // LIFTOFF!!!