Day 1: 所有権マスター

課題概要

Rustの所有権システムを実践的に習得するための課題です。

目標

  • 所有権の3つのルールを理解する
  • Move と Copy の違いを実装で確認する
  • 所有権を使った安全なコードを書く
  • 課題

    Exercise 1: 所有権の移動 (Move)

    以下のコードがコンパイルできるように修正してください:

    fn main() {
        let s1 = String::from("hello");
        let s2 = s1;
    
        // TODO: この行がコンパイルエラーになる
        // s1とs2の両方を使えるようにしてください
        println!("s1 = {}, s2 = {}", s1, s2);
    }
    

    Exercise 2: 関数への所有権渡し

    関数に所有権を渡し、戻り値で返す実装を完成させてください:

    fn take_ownership(s: String) -> String {
        // TODO: 文字列を大文字に変換して返す
    }
    
    fn main() {
        let s = String::from("hello");
        let s = take_ownership(s);
        println!("{}", s); // HELLO
    }
    

    Exercise 3: Copy trait

    Copy traitを実装した型とStringの違いを確認するコードを書いてください:

    fn main() {
        let x = 5;
        let y = x;
        // xとyの両方が使える理由を説明するコメントを追加
        println!("x = {}, y = {}", x, y);
    
        // TODO: Stringで同じことを試して違いを確認
    }
    

    提出物

  • 3つのExerciseの実装コード
  • 各Exerciseのコンパイル結果(成功)
  • 所有権の理解を示すコメント