文字列から数値へのパース
CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 47/66。
Resultの最も一般的な実用例の1つは、文字列を数値に変換することです。Rustでは、これは.parse()メソッドを使って行います。これは、なぜResultが存在するのかをよく示しています。解析は失敗することがあるからです。
.parse()メソッドは文字列を数値に変換しようとしますが、すべての文字列が有効な数値を表すわけではありません。たとえば、"42"は数値42に解析できますが、"hello"はいかなる数値にも変換できません。
let valid_number = "42";
let invalid_number = "hello";
let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();解析に成功すると、.parse()は変換された値を含むOk(number)を返します。失敗すると、解析が失敗した理由に関する情報を含むErr(error)を返します。これにより、両方の可能性を明示的に処理する必要があり、無効な入力によってプログラムがクラッシュするのを防げます。
これまでに学んだResultの手法を使って、解析結果を処理できます。明示的に処理するにはmatchを使い、成功すると確信できる場合はunwrap()を使うか、エラーを伝播させるには?演算子を使います。
チャレンジ
簡単文字列 input を受け取り、解析した整数値を返す関数 parse_to_integer を書きましょう。文字列を有効な整数に解析できない場合は、デフォルト値として 0 を返します。
.parse() メソッドを使って文字列を i32 に変換し、安全な戻り値を提供できるように Result を適切に処理します。
パラメーター:
input(String):整数に解析する文字列
戻り値:解析に成功した場合は解析された整数、失敗した場合は 0(i32)
自分で試してみよう
fn parse_to_integer(input: String) -> i32 {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
7'Result' によるエラーハンドリング
'Result' とは?'Result' で 'match' を使うis_ok() と is_err()ショートカット: unwrap と expectクエスチョンマーク演算子 '?'文字列から数値へのパースまとめ - 安全な除算関数自分で練習してみよう: Rustオンラインコンパイラ