- Comprendre unwrap() et expect() (c'est simple mais dangereux!)
- Savoir quand les utiliser (rarement!)
- Éviter les panics inutiles
- Gérer les erreurs proprement
Imaginez un hacker 🕵️ qui force une porte:
- unwrap/expect = Forcer la porte (ça marche si la clé est bonne, sinon CRASH!)
- match/? = Vérifier d'abord si la clé fonctionne (plus sûr!)
C'est exactement comme unwrap fonctionne! C'est super rapide mais super dangereux!
┌─────────────────────────────────────────┐
│ ⚠️ UNWRAP = HACKER ⚠️ │
├─────────────────────────────────────────┤
│ │
│ unwrap() (Dangereux!): │
│ Result → Forcer → Valeur ou CRASH! │
│ │
│ match (Sûr!): │
│ Result → Vérifier → Valeur ou Erreur │
│ │
│ ⚠️ Utiliser unwrap seulement dans │
│ les tests ou prototypes! │
│ │
└─────────────────────────────────────────┘
Mnémonique: "Hacker" - unwrap force comme un hacker: ça marche si tout va bien, sinon ça plante!
fn main() {
let x: Option<i32> = Some(5);
let y: Option<i32> = None;
// unwrap: panique si None
let value = x.unwrap(); // OK: retourne 5
// let value2 = y.unwrap(); // PANIC!
println!("Valeur: {}", value);
}use std::fs::File;
fn main() {
// expect: panique avec message personnalisé
let file = File::open("hello.txt")
.expect("Impossible d'ouvrir hello.txt");
// Équivalent à:
let file2 = match File::open("hello.txt") {
Ok(f) => f,
Err(e) => panic!("Impossible d'ouvrir hello.txt: {}", e),
};
}// ❌ MAUVAIS: unwrap dans le code de production
fn process_file(filename: &str) {
let file = File::open(filename).unwrap(); // Peut paniquer!
}
// ✅ BON: Gérer l'erreur
fn process_file(filename: &str) -> Result<(), std::io::Error> {
let file = File::open(filename)?;
// Traitement
Ok(())
}
// ✅ ACCEPTABLE: unwrap dans les tests ou code de démo
#[test]
fn test_example() {
let result = some_function().unwrap(); // OK dans les tests
assert_eq!(result, expected);
}- unwrap/expect : Seulement dans :
- Tests
- Prototypes
- Code où on est sûr que ça ne peut pas échouer
- Production : Toujours utiliser
?oumatch
- Tests unitaires
- Prototypes rapides
- Code où on est 100% sûr que ça ne peut pas échouer
- Exemples pédagogiques
- Code de production
- Code qui traite des données utilisateur
- Code réseau/fichiers
- Code critique
Les panics peuvent être exploitées :
- Éviter unwrap dans le code de production
- Toujours gérer les erreurs
- Utiliser Result<T, E> pour les erreurs récupérables
- Préférer
?oumatchpour la propagation d'erreurs