Leer programmeren met Rust · Les

Fouten converteren

From-implementaties

Les 4 van 413 stappen

Fouten converteren is een gratis Leer programmeren met Rust-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Leer programmeren met Rust. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Leer programmeren met Rust bevat in totaal 4 lessen.

Waarom fouten omzetten?

Verschillende lagen van code produceren verschillende fouttypen. Om ze via één functie door te geven, moet u fouten op een lager niveau omzetten naar één uniform type. Rust doet dit via de trait From.

De From-trait

From<T> definieert hoe u het ene type uit een ander opbouwt. Door deze trait voor uw fouttype te implementeren, kunt u bronfouten ernaar omzetten.

trait From<T> {
    fn from(value: T) -> Self;
}

Hoe ? From gebruikt

Wanneer u expr? schrijft en het fouttype verschilt van de fout die de functie teruggeeft, roept de operator From::from aan om de fout om te zetten. Dit maakt het naadloos doorgeven mogelijk.

Eén uniform fouttype

Definieer een enum die elk type fout kan bevatten dat uw functie kan opleveren.

#[derive(Debug)]
enum AppError {
    Io(std::io::Error),
    Parse(std::num::ParseIntError),
}

From implementeren

Schrijf voor elke bronfout een From-impl, zodat deze naar de bijbehorende variant wordt omgezet.

impl From<std::io::Error> for AppError {
    fn from(e: std::io::Error) -> Self {
        AppError::Io(e)
    }
}

impl From<std::num::ParseIntError> for AppError {
    fn from(e: std::num::ParseIntError) -> Self {
        AppError::Parse(e)
    }
}

Automatisch doorgeven

Met deze impls op hun plaats zet ? elke fout automatisch om naar AppError.

fn read_count(path: &str) -> Result<i32, AppError> {
    let text = std::fs::read_to_string(path)?; // io::Error -> AppError
    let n: i32 = text.trim().parse()?;          // ParseIntError -> AppError
    Ok(n)
}

Into is het spiegelbeeld

Door From<A> for B te implementeren, krijgt u automatisch A: Into<B>. Implementeer bij voorkeur From; dan krijgt u into() er gratis bij.

fn make() -> AppError {
    let e: std::io::Error = std::io::Error::other("boom");
    e.into() // uses From<io::Error> for AppError
}

Trait-objecten inpakken

Voor snelle omzettingen accepteert Box<dyn Error> elk fouttype, omdat de standaardbibliotheek algemene From-impls ernaartoe biedt.

use std::error::Error;

fn run() -> Result<(), Box<dyn Error>> {
    let n: i32 = "42".parse()?; // ParseIntError -> Box<dyn Error>
    println!("{n}");
    Ok(())
}

Crates die From genereren

Elke From-impl met de hand schrijven is vervelend. Het attribuut #[from] van thiserror genereert ze, en anyhow zet alles automatisch om naar één type.

Een aanpak kiezen

Samenvatting van strategieën voor omzetting:

  • Handmatige From-impls — volledige controle, meer code
  • thiserror #[from] — getypeerde fouten, gegenereerde impls
  • Box<dyn Error> of anyhow — minimale omhaal

Context toevoegen tijdens omzetting

Een From-impl kan meer doen dan alleen omwikkelen: hij kan de fout verrijken. Hier voegt de omzetting extra context toe, zodat de uiteindelijke fout informatiever is.

impl From<std::num::ParseIntError> for AppError {
    fn from(e: std::num::ParseIntError) -> Self {
        // could log or annotate here before wrapping
        AppError::Parse(e)
    }
}

Korte controle

Welke trait gebruikt de operator ? om het ene fouttype naar een ander om te zetten?

Samenvatting

U hebt geleerd hoe u fouten omzet:

  • ? zet fouten om via de trait From
  • Implementeer From<Source> voor uw fout-enum
  • From geeft u automatisch Into en into()
  • Box<dyn Error> accepteert elke fout
  • thiserror en anyhow automatiseren de standaardcode
Gratis beginnen

Leer Rust met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
39
Lessen
144

Veelgestelde vragen

Is de les “Fouten converteren” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Leer programmeren met Rust, waaronder “Fouten converteren”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Leer programmeren met Rust bevat in totaal 4 lessen.

Wat leer ik in “Fouten converteren”?

From-implementaties Je oefent met Leer programmeren met Rust door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Leer programmeren met Rust te beginnen?

Ervaring vooraf is niet nodig. Leer programmeren met Rust op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Fouten converteren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Leer programmeren met Rust?

Ja. Elke les over Leer programmeren met Rust bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Result en de ?-operator
  2. thiserror
  3. anyhow
  4. Fouten converteren
← Terug naar Leer programmeren met Rust