Menu
CoddyTech

Konstruktor (_init)

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

Menetapkan setiap property setelah new() membutuhkan beberapa baris, dan kamu bisa dengan mudah melupakan salah satunya. Constructor menyiapkan object saat dibuat. Di GDScript, constructor adalah method _init():

# book.gd
class_name Book
extends RefCounted

var title: String
var author: String
var pages: int

func _init(book_title: String, book_author: String, page_count: int) -> void:
	title = book_title
	author = book_author
	pages = page_count

Argumen yang kamu berikan ke new() diteruskan ke _init(), yang berjalan otomatis sebelum new() mengembalikan object:

var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412

Ketika _init() memiliki parameter, new() harus meneruskannya: Book.new() tanpa argumen akan menyebabkan error yang dilaporkan sebelum program dijalankan. Parameter dengan nilai default bersifat opsional:

func _init(book_title: String, book_author: String = "Unknown") -> void:

Dengan constructor ini, Book.new("Notes") membuat buku yang author-nya "Unknown".

Nama parameter di atas berbeda dari nama property. Jika namanya sama, kamu akan menulis self.title = title, seperti dalam pelajaran tentang self.

challenge icon

Tantangan

Mudah

Lengkapi class Book di book.gd:

  • constructor _init(book_title, book_author, page_count) menyimpan argumennya dalam property title, author, dan pages
  • describe() mengembalikan 'TITLE' by AUTHOR, PAGES pages, dengan judul diapit tanda kutip tunggal

Kode yang disediakan membaca jumlah buku berikutnya, lalu satu baris untuk setiap buku yang berisi judul, penulis, dan jumlah halaman yang dipisahkan oleh ;. Kode tersebut membuat setiap buku dengan Book.new(), mencetak describe(), lalu mencetak total property pages. Untuk baris Dune;Frank Herbert;412, hasil cetaknya:

'Dune' by Frank Herbert, 412 pages
Total pages: 412

Tulis kodemu di book.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 count := int(OS.read_string_from_stdin())
	var total := 0
	for i in count:
		var parts := OS.read_string_from_stdin().split(";")
		var book := Book.new(parts[0], parts[1], int(parts[2]))
		print(book.describe())
		total += book.pages
	print("Total pages: %d" % total)
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online