まとめ - 安全な除算関数
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 48/66。
チャレンジ
簡単2つの入力を受け取ります。最初の入力は被除数(割られる数)を表す数値で、2番目の入力は除数(割る数)を表す数値です。2つの f64 パラメータを受け取り、Result<f64, &'static str> を返す関数 safe_divide を作成してください。この関数は、除数がゼロの場合は Err("Cannot divide by zero") を返し、それ以外の場合は除算結果を含む Ok を返す必要があります。match 式を使用して結果を処理し、適切な出力を表示してください。
要件:
- 最初の入力(被除数)を読み込み、空白をトリミングする
- 最初の入力を
f64にパースする - 2番目の入力(除数)を読み込み、空白をトリミングする
- 2番目の入力を
f64にパースする - 2つの
f64パラメータを受け取り、Result<f64, &'static str>を返す関数safe_divideを作成する - 関数内で、除数が
0.0かどうかを確認する:- もしそうなら、
Err("Cannot divide by zero")を返す - そうでなければ、
Ok(dividend / divisor)を返す
- もしそうなら、
- パースした2つの数値を使用して関数を呼び出す
match式を使用してResultを処理するOk(value)アームでは、Division result: [value]と出力するErr(error)アームでは、Error: [error]と出力する
入力:
- 1行目: 被除数を表す数値 (例:
20.0) - 2行目: 除数を表す数値 (例:
4.0)
出力:
- 除算が成功した場合:
Division result: [result] - ゼロ除算の場合:
Error: Cannot divide by zero
自分で試してみよう
use std::io;
// TODO: ここにsafe_divide関数を作成してください
// fn safe_divide(dividend: f64, divisor: f64) -> Result<f64, &'static str> {
// ここにコードを記述してください
// }
fn main() {
// 最初の入力(被除数)を読み取ります
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");
// 2番目の入力(除数)を読み取ります
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: safe_divideを呼び出し、matchを使用してResultを処理してください
// 結果に基づいて適切な出力を表示してください
}Logic & Flowのすべてのレッスン
7'Result' によるエラーハンドリング
'Result' とは?'Result' で 'match' を使うis_ok() と is_err()ショートカット: unwrap と expectクエスチョンマーク演算子 '?'文字列から数値へのパースまとめ - 安全な除算関数