学生の追加
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 49/56。
共有されている student_records ハッシュに新しい学生を登録する add_student メソッドを定義してください。
重複の拒否が唯一の分岐条件です。すでに学生が存在する場合は、その旨を報告し、上書きせずに処理を終了してください。
チャレンジ
簡単ファイルの先頭に student_records = {} を保持してください。次に、以下の処理を行うメソッド add_student(name, age, courses) を定義します。
- もし
nameがすでにstudent_recordsのキーとして存在する場合、Student '<name>' already exists.と出力して終了(return)します。 - そうでない場合は、
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
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。