Język

Błędy i cleanup

Opisuj oczekiwane błędy przez Result i Option, a zasoby sprzątaj deterministycznie.

Około 12 minWersja: 0.10.1

Option i Result

Option<T> przechowuje Some(value) albo None. Result<T, E> przechowuje Ok(value) albo Err(error). Wyrażenie match musi obsłużyć wszystkie warianty.

result.orvi
1fn load_config(path: string) -> Result<string, string> {2    defer print("load finished")3    let contents = fs.read_text(path)?4    return Ok(contents)5}67let result = load_config("orvi.toml")8print(match result {9    Ok(contents) => contents,10    Err(message) => "error: " + message,11})

Propagacja przez ?

Operator ? rozpakowuje Some i Ok. None albo Err natychmiast wraca z bieżącej zgodnej funkcji. Ścieżka błędu pozostaje widoczna bez powtarzania ręcznych match.

defer i using

defer rejestruje wyrażenie wykonywane w kolejności LIFO przy wyjściu z zakresu, także przez return, propagację błędu i anulowanie. using łączy związanie wartości z wyrażeniem sprzątającym.

cleanup.orvi
1fn work() -> Result<void, string> {2    using resource = "database" => print("zamknięto", resource)3    defer print("koniec")4    fs.write_text("result.txt", "gotowe")?5    return Ok()6}