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 praktycznych zastosowań typu Result jest konwertowanie ciągów znaków na liczby. W Rust robi się to za pomocą metody .parse(), która doskonale pokazuje, dlaczego istnieje Result — ponieważ parsowanie może się nie powieść.
Metoda .parse() próbuje przekształcić ciąg znaków w liczbę, ale nie każdy ciąg znaków reprezentuje prawidłową liczbę. Na przykład „42” można sparsować jako liczbę 42, ale „hello” nie można przekształcić w ż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 przy nieprawidłowych danych wejściowych.
Możesz obsłużyć wynik parsowania, korzystając z dowolnej z poznanych technik pracy z Result — użyj match do jawnej obsługi, unwrap(), jeśli masz pewność, że operacja się powiedzie, lub 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ą w przypadku powodzenia lub 0, jeśli parsowanie się nie powiedzie (i32)
Spróbuj swoich sił
fn parse_to_integer(input: String) -> i32 {
// Wpisz kod tutaj
}
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