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_countArgumen 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) # 412Ketika _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.
Tantangan
MudahLengkapi class Book di book.gd:
- constructor
_init(book_title, book_author, page_count)menyimpan argumennya dalam propertytitle,author, danpages 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: 412Tulis 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)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online