Konwertowanie ciągów znaków na liczby
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 47 z 66.
Jednym z najczęstszych zastosowań typu Result w praktyce jest konwertowanie ciągów znaków na liczby. W Rust robi się to za pomocą metody .parse(), co doskonale pokazuje, dlaczego istnieje Result — ponieważ parsowanie może się nie powieść.
Metoda .parse() próbuje przekonwertować ciąg znaków na liczbę, ale nie każdy ciąg znaków przedstawia prawidłową liczbę. Na przykład ciąg „42” można sparsować jako liczbę 42, ale ciągu „hello” nie można przekonwertować na żadną liczbę:
let valid_number = "42";
let invalid_number = "hello";
let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();Gdy parsowanie się powiedzie, .parse() zwraca Ok(number) zawierające przekonwertowaną wartość. Gdy się nie powiedzie, zwraca Err(error) z informacją o przyczynie niepowodzenia parsowania. Dzięki temu musisz jawnie obsłużyć obie możliwości, co zapobiega awarii programu w przypadku nieprawidłowych danych wejściowych.
Możesz obsłużyć wynik parsowania, korzystając z dowolnej z poznanych technik pracy z typem Result — użyć match do jawnej obsługi, unwrap(), jeśli masz pewność, że operacja się powiedzie, albo operatora ?, aby propagować błędy.
Wyzwanie
ŁatwyNapisz funkcję parse_to_integer, która przyjmuje ciąg znaków input i zwraca sparsowaną wartość całkowitą. Jeśli ciągu znaków nie można sparsować jako prawidłowej liczby całkowitej, zwróć 0 jako wartość domyślną.
Użyj metody .parse(), aby przekonwertować ciąg znaków na i32, i odpowiednio obsłuż typ Result, aby zwrócić bezpieczną wartość.
Parametry:
input(String): Ciąg znaków do sparsowania jako liczba całkowita
Zwraca: Sparsowaną liczbę całkowitą, jeśli operacja się powiedzie, lub 0, jeśli parsowanie się nie powiedzie (i32)
Spróbuj swoich sił
fn parse_to_integer(input: String) -> i32 {
// Wpisz tutaj kod
}
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
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book7Obsługa błędów za pomocą „Result”
Czym jest „Result”?Używanie „match” z „Result”is_ok() i is_err()Skróty: unwrap i expectOperator znaku zapytania „?”Konwertowanie ciągów znaków na liczbyPodsumowanie — bezpieczna funkcja dzielenia2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online