今日の目的

  • Rustの開発環境構築
  • Week1課題(偶数/奇数判定)を実装して実行
  • プロジェクト構成の理解(Cargo.toml / main.rs)

実施内容

1. 環境構築

  • rustup をインストール
  • cargo --version / rustc --version で確認
  • PATH に C:\Users\PC_User\.cargo\bin を追加してコマンドを直接実行可能に

2. プロジェクト作成

  • cargo new rust_week1 でプロジェクト作成
  • 主要ファイルの役割を確認
    • Cargo.toml: プロジェクト設定・依存関係
    • Cargo.lock: 依存バージョンの固定
    • src/main.rs: エントリーポイント

3. Week1課題の実装(偶数/奇数判定)

  • 標準入力から整数を受け取り、偶数なら even、奇数なら odd を出力
  • 1行入力の読み取りに read_line を利用
  • 数値変換は parse() + match で安全に処理

実行コマンド

cd rust_week1
cargo run

学んだこと(ポイント)

  • Rustは所有権・借用の前に「型の厳密さ」と「安全な入力/エラー処理」が重要
  • matchResult でエラー処理が明確になる
  • print! の後に flush() で即時表示できる

次回予定

  • Week2: 所有権・借用(TypeScriptとの比較を交えた解説)

メモ: プロンプトが出たら数値を入力して Enter。結果が even/odd で表示される。

main.rs 詳細解説

1) 入出力のための宣言

use std::io::{self, Write};
  • 標準入力/出力を使うための宣言。
  • Writeflush() を使うために必要。

2) エントリーポイント

fn main() {
  • プログラムの開始点。

3) 入力プロンプト表示

    print!("整数を入力してください: ");
    let _ = io::stdout().flush();
  • print! は改行なし。
  • flush() で即時に画面へ出力。

4) 1行入力を読む

    let mut input = String::new();
    if io::stdin().read_line(&mut input).is_err() {
        eprintln!("入力の読み取りに失敗しました");
        return;
    }
  • read_line で1行を読み込む。
  • 失敗時は eprintln! でエラー出力して終了。

5) 空入力のチェック

    let trimmed = input.trim();
    if trimmed.is_empty() {
        eprintln!("数値が入力されていません");
        return;
    }
  • trim() で前後の空白/改行を削除。
  • 何も入力されていない場合は終了。

6) 文字列→数値の変換

    let number: i64 = match trimmed.parse() {
        Ok(value) => value,
        Err(_) => {
            eprintln!("数値として解釈できません: {}", trimmed);
            return;
        }
    };
  • parse() の結果(Result)を match で分岐。
  • 変換失敗時はエラーを出して終了。

7) 偶数・奇数判定

    if number % 2 == 0 {
        println!("even");
    } else {
        println!("odd");
    }
}
  • % で余りを判定し、偶数なら even、奇数なら odd

コード一覧(main.rs)

use std::io::{self, Write};
 
fn main() {
    print!("整数を入力してください: ");
    let _ = io::stdout().flush();
 
    let mut input = String::new();
    if io::stdin().read_line(&mut input).is_err() {
        eprintln!("入力の読み取りに失敗しました");
        return;
    }
 
    let trimmed = input.trim();
    if trimmed.is_empty() {
        eprintln!("数値が入力されていません");
        return;
    }
 
    let number: i64 = match trimmed.parse() {
        Ok(value) => value,
        Err(_) => {
            eprintln!("数値として解釈できません: {}", trimmed);
            return;
        }
    };
 
    if number % 2 == 0 {
        println!("even");
    } else {
        println!("odd");
    }
}