Iterator

O trait Iterator suporta a iteração sobre valores em uma coleção. Ele requer um mĂ©todo next e fornece muitos mĂ©todos. Muitos tipos da biblioteca padrĂŁo implementam Iterator, e vocĂȘ tambĂ©m pode implementĂĄ-lo:

struct Fibonacci {
    curr: u32,
    next: u32,
}

impl Iterator for Fibonacci {
    type Item = u32;

    fn next(&mut self) -> Option<Self::Item> {
        let new_next = self.curr + self.next;
        self.curr = self.next;
        self.next = new_next;
        Some(self.curr)
    }
}

fn main() {
    let fib = Fibonacci { curr: 0, next: 1 };
    for (i, n) in fib.enumerate().take(5) {
        println!("fib({i}): {n}");
    }
}
This slide should take about 5 minutes.
  • O trait Iterator implementa muitas operaçÔes comuns de programação funcional sobre coleçÔes (por exemplo, map, filter, reduce, etc). Este Ă© o trait onde vocĂȘ pode encontrar toda a documentação sobre eles. Em Rust, essas funçÔes devem produzir o cĂłdigo tĂŁo eficiente quanto as implementaçÔes imperativas equivalentes.

  • IntoIterator Ă© o trait que faz os laços for funcionarem. Ele Ă© implementado por tipos de coleção como Vec<T> e referĂȘncias a eles como &Vec<T> e &[T]. Intervalos (ranges) tambĂ©m o implementam. É por isso que vocĂȘ pode iterar sobre um vetor com for i in some_vec { .. }, mas some_vec.next() nĂŁo existe.