Menu
Coddy logo textTech

学生の追加

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 49/56。

共有されている student_records ハッシュに新しい学生を登録する add_student メソッドを定義してください。

重複の拒否が唯一の分岐条件です。すでに学生が存在する場合は、その旨を報告し、上書きせずに処理を終了してください。

challenge icon

チャレンジ

簡単

ファイルの先頭に student_records = {} を保持してください。次に、以下の処理を行うメソッド add_student(name, age, courses) を定義します。

  1. もし name がすでに student_records のキーとして存在する場合、Student '<name>' already exists. と出力して終了(return)します。
  2. そうでない場合は、name をキーとして { age: age, grades: [], courses: courses } を保存し、Student '<name>' added. と出力します。

ファイルの最後に、テストブロックを以下に置き換えてください。

add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspect

期待される出力は以下の通りです。

Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}

メソッドは囲んでいるスクリプトのローカル変数にアクセスできないため、メソッドが読み書きできるように student_records$student_records(グローバル変数)として宣言してください。メソッド内でもその名前を使用してください。

チートシート

グローバル変数($variable_name)を使用すると、メソッドがそのスコープ外で定義された変数にアクセスしたり、変更したりできるようになります。

$student_records = {}

def add_student(name, age, courses)
  if $student_records.key?(name)
    puts "Student '#{name}' already exists."
    return
  end
  $student_records[name] = { age: age, grades: [], courses: courses }
  puts "Student '#{name}' added."
end

主なポイント:

  • 変数をグローバル(メソッド内からアクセス可能)にするには、接頭辞に $ を付けます
  • ハッシュに既にキーが含まれているか確認するには、.key?(name) を使用します
  • 重複を処理した後、メソッドを早期に終了するには return を使用します

自分で試してみよう

$student_records = {}

# TODO: def add_student(name, age, courses)を定義し、重複を防止する
# { age:, grades: [], courses: }を保存し、追加済みまたは既に存在することを出力する

add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン