Menu
Coddy logo textTech

復習 - ユーザーマネージャー

CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 68/70。

challenge icon

チャレンジ

簡単

ユーザー管理システムを構築しましょう。これは、多くの実世界のプログラムで見られる実用的なアプリケーションです!個々のユーザーを表すクラスと、それらのコレクションを効率的に管理するクラスの2つを作成し、それらを連携させます。

コードは3つのファイルに分けて構成します:

  • User.lua: システム内の単一のユーザーを表す User クラスを作成します。各ユーザーは idname を持ちます。"ID: {id}, Name: {name}" という形式の文字列を返す :getInfo() メソッドを含めてください。
  • UserManager.lua: ユーザーのコレクションを扱うマネージャークラスを構築します。効率的な検索のためにユーザーをどのように保存するかを考えてください。ユーザーの ID をテーブルのキーとして使用すると、リスト内を検索するよりもユーザーの特定や削除がはるかに簡単になります。マネージャーには以下のものが必要です:
    • :addUser(user) — User オブジェクトをコレクションに追加します
    • :removeUser(id) — ID を指定してユーザーを削除します
    • :findUser(id) — 一致する ID を持つ User を返します。見つからない場合は nil を返します
    • :listUsers() — すべてのユーザーの情報を1行に1人ずつ表示します
  • main.lua: すべてをまとめます! UserManager を作成し、受け取った入力に基づいていくつかのユーザーを追加し、操作を実行して結果を表示します。

5つの入力を受け取ります:

  1. 1人目のユーザーの ID(数値)
  2. 1人目のユーザーの名前
  3. 2人目のユーザーの ID(数値)
  4. 2人目のユーザーの名前
  5. 検索するユーザーの ID(数値)

メインファイルでの手順:

  1. UserManager を作成し、両方のユーザーを追加します
  2. :listUsers() を呼び出して、すべてのユーザーを表示します
  3. 1人目のユーザーを(1つ目の ID を使用して)削除します
  4. "After removal:" と表示します
  5. 再度 :listUsers() を呼び出します
  6. 5つ目の入力 ID でユーザーを検索します。見つかった場合はその情報を表示し、見つからない場合は "User not found" と表示します

例えば、入力が 101, Alice, 102, Bob, 102 の場合、出力は以下のようになります:

ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bob

入力が 201, Charlie, 202, Diana, 201 の場合、出力は以下のようになります:

ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not found

2つ目の例では、ユーザー 201 (Charlie) を削除した後、その ID を検索すると、システムに存在しなくなったため "User not found" が返されていることに注目してください!

自分で試してみよう

-- main.lua: すべてを統合する

local User = require('User')
local UserManager = require('UserManager')

-- 入力を読み込む
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())

-- TODO: UserManagerのインスタンスを作成する

-- TODO: 入力データを使用して2つのUserオブジェクトを作成する

-- TODO: 両方のユーザーをマネージャーに追加する

-- TODO: listUsers()を呼び出してすべてのユーザーを表示する

-- TODO: 最初のユーザーを削除する (id1を使用)

-- TODO: "After removal:" と表示する

-- TODO: 再度 listUsers() を呼び出す

-- TODO: searchIdでユーザーを検索する
-- 見つかった場合はその情報を表示し、見つからない場合は "User not found" と表示する

Object Oriented Programmingのすべてのレッスン