#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本