Menu
Coddy logo textTech

Używanie „match” z „Result”

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 43 z 66.

Teraz, gdy wiesz już, czym jest Result, poznajmy najbardziej przejrzysty i wszechstronny sposób obsługi zarówno przypadków powodzenia, jak i niepowodzenia: użycie wyrażenia match.

Podobnie jak w przypadku Option, match wymusza obsługę obu wariantów Result. Tworzysz jedną gałąź dla Ok, aby obsłużyć powodzenie, i drugą dla Err, aby obsłużyć niepowodzenie:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

Gdy Result ma wartość Ok, wyrażenie match wyodrębnia pomyślną wartość i wykonuje pierwszą gałąź. Gdy ma wartość Err, wyodrębnia informacje o błędzie i wykonuje drugą gałąź. Ten wzorzec gwarantuje, że nigdy przypadkowo nie zignorujesz potencjalnego błędu.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wejścia. Pierwsze wejście to liczba (w postaci ciągu znaków), a drugie wejście to kolejna liczba (w postaci ciągu znaków). Utwórz funkcję, która próbuje podzielić pierwszą liczbę przez drugą i zwraca Result<f64, &'static str>. Jeśli druga liczba wynosi zero, zwróć Err z komunikatem "Division by zero". W przeciwnym razie zwróć Ok z wynikiem dzielenia. Użyj wyrażenia match, aby obsłużyć przypadki Ok i Err, a następnie wypisz odpowiedni komunikat.

Wymagania:

  • Odczytaj pierwsze wejście (dzielną) i usuń białe znaki
  • Przekonwertuj pierwsze wejście na f64
  • Odczytaj drugie wejście (dzielnik) i usuń białe znaki
  • Przekonwertuj drugie wejście na f64
  • Utwórz funkcję, która przyjmuje dwa parametry typu f64 i zwraca Result<f64, &'static str>
  • Wewnątrz funkcji sprawdź, czy dzielnik ma wartość 0.0:
    • Jeśli tak, zwróć Err("Division by zero")
    • Jeśli nie, zwróć Ok(dividend / divisor)
  • Wywołaj funkcję z dwiema przekonwertowanymi liczbami
  • Użyj wyrażenia match, aby obsłużyć wartość Result
  • W gałęzi Ok(value) wypisz: Result: [value]
  • W gałęzi Err(error) wypisz: Error: [error]

Wejście:

  • Pierwszy wiersz: liczba reprezentująca dzielną (np. 10.0)
  • Drugi wiersz: liczba reprezentująca dzielnik (np. 2.0)

Wyjście:

  • Jeśli dzielenie się powiedzie: Result: [result]
  • Jeśli dzielisz przez zero: Error: Division by zero

Spróbuj swoich sił

use std::io;

// TODO: Utwórz tutaj funkcję divide, która zwraca Result<f64, &'static str>


fn main() {
    // Odczytaj pierwszą wartość wejściową (dzielną)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // Odczytaj drugą wartość wejściową (dzielnik)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: Wywołaj funkcję divide i użyj match do obsługi Result
    // Wypisz "Result: [value]" dla wariantu Ok
    // Wypisz "Error: [error]" dla wariantu Err
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online