diff --git a/essential_rust.tex b/essential_rust.tex index bb99847def573eda3ca94950811ea775a57a2a02..1987c6f0a7abdbf71b96f20d18cc77402b152f70 100644 --- a/essential_rust.tex +++ b/essential_rust.tex @@ -446,12 +446,13 @@ fn somme(vect: &Vec<usize>) -> usize { + \section{Conditions et boucles} \begin{lstlisting}[style=Rust, language=Rust] fn main() { let age: u32 = 15; - + if age < 18 { println!("Tu es mineur(e)"); } else { @@ -462,16 +463,33 @@ fn main() { \begin{lstlisting}[style=Rust, language=Rust] fn main() { - let array: [i32; 5] = [1, 2, 3, 4, 5]; + let array: [char; 4] = ['a', 'b', 'c', 'd']; // On va itérer sur chacun des éléments du tableau - for elem in array.iter() { - println!("{}", elem); - } // "1" "2" "3" "4" "5" + + for elem in array.iter() { // équivalent: for elem in \&array + print!("{} ", elem); + } // affiche "a b c d " + + for (index, elem) in array.iter().enumerate() { + print!("{}:{} ", index, elem); + } // affiche "0:a 1:b 2:c 3:d " + + for index in 0..array.len() { + print!("{}:{} ", index, array[elem]); + } // idem + + for elem in array.into_iter() { // équivalent: for elem in array + print!("{} ", elem); + } // cette boucle semble très similaire à la première, + // mais il y a deux différences : + // - elem est de type char au lieu de \&char + // - array n'est plus utilisable ensuite + // On va modifier (de manière impérative) chaque élément du tableau let mut vector: Vec<i32> = vec![10, 20, 30]; - for elem in &mut vector { + for elem in vector.iter_mut() { // équivalent: for elem in \&mut vector *elem += 50; } @@ -504,6 +522,7 @@ fn main() { } \end{lstlisting} +Il se trouve que les boucles et tests sont des expressions: voir \Cref{expressionsEverywhere}. \section{Structures, Enums et Pattern matching}