復習 - ユーザーマネージャー
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 68/70。
チャレンジ
簡単ユーザー管理システムを構築しましょう。これは、多くの実世界のプログラムで見られる実用的なアプリケーションです!個々のユーザーを表すクラスと、それらのコレクションを効率的に管理するクラスの2つを作成し、それらを連携させます。
コードは3つのファイルに分けて構成します:
User.lua: システム内の単一のユーザーを表す User クラスを作成します。各ユーザーはidとnameを持ちます。"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人目のユーザーの ID(数値)
- 1人目のユーザーの名前
- 2人目のユーザーの ID(数値)
- 2人目のユーザーの名前
- 検索するユーザーの ID(数値)
メインファイルでの手順:
- UserManager を作成し、両方のユーザーを追加します
:listUsers()を呼び出して、すべてのユーザーを表示します- 1人目のユーザーを(1つ目の ID を使用して)削除します
"After removal:"と表示します- 再度
:listUsers()を呼び出します - 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 found2つ目の例では、ユーザー 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" と表示する