書籍クラスとユーザークラス
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 57/65。
チャレンジ
簡単クラス Book と User をそれぞれ別のファイルに追加し、ライブラリにそれらを保存させましょう。前のステップで書いたものはすべて残してください。
book.gd の Book:
- コンストラクターは
title、author、isbn(すべてString)を受け取り、同じ名前のプロパティに保存します。 availableはtrueで始まり、borrower_idは""で始まります。_to_string()はTITLE by AUTHOR (ISBN: ISBN) - Availableを返します。availableがfalseの場合は、末尾がNot Availableになります。
user.gd の User:
- コンストラクターは
user_idとuser_nameを受け取り、それらを保存します。 borrowed_isbnsは、空の状態で始まるArray[String]です。_to_string()はUser: NAME (ID: ID) - Books borrowed: Nを返します。Nはborrowed_isbnsのサイズです。
library.gd では、books を Array[Book] に、users を Array[User] に変更し、それらに追加するメソッド add_book(book: Book) と add_user(user: User) を追加します。
本は借り手をユーザーの id で記憶し、ユーザーは本を ISBN で記憶します。本が User オブジェクトを保存し、ユーザーが Book オブジェクトを保存すると、互いに参照し合って解放されなくなり、プログラム終了時に Godot がリークとして報告します。
main.gd の提供コードが変更されました。フィールドは | で区切られています。コマンドは book TITLE|AUTHOR|ISBN、user ID|NAME、lend ISBN|ID(本とユーザーのプロパティを直接設定します)、books と users(すべての本またはユーザーを表示します)、および show です。次の入力の場合:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show出力は次のとおりです:
Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)コードは book.gd、user.gd、および library.gd に記述します。main.gd には提供された入出力コードがあり、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード:そのままにしてください
var library := Library.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"book":
library.add_book(Book.new(fields[0], fields[1], fields[2]))
"user":
library.add_user(User.new(fields[0], fields[1]))
"lend":
for book in library.books:
if book.isbn == fields[0]:
book.available = false
book.borrower_id = fields[1]
for user in library.users:
if user.user_id == fields[1]:
user.borrowed_isbns.append(fields[0])
"books":
for book in library.books:
print(book)
"users":
for user in library.users:
print(user)
"show":
print(library)
line = OS.read_string_from_stdin()
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ