diff --git a/errors.md b/errors.md index 6f7faa8fc24be69f8f747118f64aa538411d3157..f62fd19a66e675c70fe3ecf6c9bd11a56de4d9da 100644 --- a/errors.md +++ b/errors.md @@ -22,7 +22,7 @@ sansfont: Sans Serif None, } ``` -- Type utilisé lorsque une valeur peut être "quelque chose" ou "rien". +- Type utilisé lorsque une valeur peut être "quelque chose" ou "rien" (ex: recherche d'un élément dans un tableau). - Exmple: la division <pre><code data-trim="hljs rust" class="lang-rust"> @@ -44,14 +44,14 @@ sansfont: Sans Serif } </code></pre> -- Typiquement vos fonctions doivent retourner des `Option`{.rust}. +- Il est commun que des fonction retournent des `Option`{.rust}. # Panique! ## `panic!()`{.rust} -- Nous avons vu la macro `panic!("texte")`{.rust}. +- Nous avons vu le macro `panic!("texte")`{.rust}. - Le programme s'arrête et affiche le `"texte"`{.rust}. - Utilisation: - Le programme ne **doit pas** continuer quoi qu'il arrive. @@ -123,3 +123,32 @@ sansfont: Sans Serif # Résultat +- Pour un traitement plus fin des erreurs l'enum + + <pre><code data-trim="hljs rust"> + enum Result<T, E> { + Ok(T), + Err(E), + } + </code></pre> + +- Contient le un élément de type `T` quand tout se passe bien et `E` pour l'erreur. + + <pre><code data-trim="hljs rust" class="lang-rust"> + fn elem(v: &[i32], i: usize) -> Result<i32, &str> { + if i >= v.len() { + return Err("Erreur fatale!") + } else { + Ok(v[i]) + } + } + + fn main() { + let v = [1, 2, 3, 4]; + match elem(&v, 100) { + Ok(i) => println!("L'élément est {}", i), + Err(_) => println!("Mince ça a raté."), + } + } + </code></pre> +