Menu
CoddyTech

class Buku dan Pengguna

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 57 dari 65.

challenge icon

Tantangan

Mudah

Tambahkan class Book dan User, masing-masing dalam filenya sendiri, lalu buat library menyimpan keduanya. Pertahankan semua yang kamu tulis pada langkah sebelumnya.

Book dalam book.gd:

  • Konstruktor menerima title, author dan isbn (semuanya String) lalu menyimpannya dalam property dengan nama yang sama.
  • available dimulai dengan nilai true dan borrower_id dimulai dengan nilai "".
  • _to_string() mengembalikan TITLE by AUTHOR (ISBN: ISBN) - Available, dengan Not Available di bagian akhir saat available bernilai false.

User dalam user.gd:

  • Konstruktor menerima user_id dan user_name, lalu menyimpannya.
  • borrowed_isbns adalah Array[String] yang dimulai dalam keadaan kosong.
  • _to_string() mengembalikan User: NAME (ID: ID) - Books borrowed: N, dengan N sebagai ukuran borrowed_isbns.

Dalam library.gd, ubah books menjadi Array[Book] dan users menjadi Array[User], lalu tambahkan method add_book(book: Book) dan add_user(user: User) untuk menambahkan item ke masing-masing array.

Buku mengingat peminjamnya melalui id pengguna, dan pengguna mengingat buku melalui ISBN-nya. Jika buku menyimpan object User dan pengguna menyimpan object Book, keduanya akan saling mempertahankan keberadaan satu sama lain, dan Godot akan melaporkan keduanya sebagai kebocoran saat program berakhir.

Kode yang disediakan dalam main.gd telah berubah: field kini dipisahkan dengan |. Perintahnya adalah book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (perintah ini menetapkan property buku dan pengguna secara langsung), books dan users (mencetak setiap buku atau pengguna), serta show. Untuk input ini:

Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show

output-nya adalah:

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)

Tulis kodemu di book.gd, user.gd, dan library.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	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()

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online