#4 Rustで学ぶ標準入力の基本
Rustにおける標準入力の扱いは、他の学習向け言語に比べると、やや手順を踏む必要があります。この記事では、Rustで利用者からの入力を受け取る基本的な方法を解説します。
std::ioを使う
Rustで標準入力を扱うには、標準ライブラリのstd::ioという部分を利用します。
use std::io;
let mut input = String::new();
io::stdin().read_line(&mut input).expect("読み込みに失敗しました");
あらかじめ空の文字列(String::new())を用意しておき、そこに入力内容を読み込む、という流れになります。Pythonのinput()のように1行では書けない点が、Rustらしい特徴です。
改行文字を取り除く
read_lineで読み込んだ文字列には、利用者がEnterキーを押したことによる改行文字が含まれています。数値として扱う前に、trim()という機能で余分な空白や改行を取り除く必要があります。
let age: i32 = input.trim().parse().expect("数値ではありません");
失敗しても止まらない書き方
expectは失敗するとその場でプログラムを止めてしまうため、実際のプログラムではmatchを使って丁寧に扱うことが推奨されます。
match input.trim().parse::() {
Ok(age) => println!("あなたは{}歳です", age),
Err(_) => println!("数値を入力してください"),
}
Result型というRustらしい仕組み
先ほどのコードに出てきたexpectは、Rustの「失敗するかもしれない処理の結果」を表すResultという仕組みに関わっています。入力の読み込みや数値への変換は失敗する可能性があるため、RustはこのResultという形で「うまくいった場合」と「失敗した場合」の両方を扱うことを求めてきます。
Rustならではの注意点
他の言語の感覚で「入力を受け取って終わり」と考えていると、Resultやtrim()の必要性に戸惑うかもしれません。しかしこれらはすべて、想定外の入力によるバグを未然に防ぐためのRustの工夫です。
まとめ
Rustの標準入力はstd::ioを使い、trim()で余分な文字を取り除いてから変換するという手順を踏みます。matchによる丁寧なエラー処理も含め、手間はかかりますがその分安全性の高い入力処理が書けます。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿