コンストラクター(_init)
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 7/65。
new() の後にすべてのプロパティを設定するには複数行かかり、どれかを忘れやすくなります。コンストラクターは、オブジェクトの作成時にその初期設定を行います。GDScript では、コンストラクターは _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_countnew()に渡す引数は_init()に渡され、new()がオブジェクトを返す前に自動的に実行されます。
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412_init()にパラメーターがある場合、new()でそれらを渡す必要があります。引数なしのBook.new()は、プログラムの実行前にエラーとして報告されます。デフォルト値を持つパラメーターは省略可能です。
func _init(book_title: String, book_author: String = "Unknown") -> void:このコンストラクターを使うと、Book.new("Notes") は著者が "Unknown" の本を作成します。
上記のパラメーター名はプロパティ名とは異なります。同じであれば、selfのレッスンと同じように、self.title = titleと書きます。
チャレンジ
簡単book.gd のクラス Book を完成させてください。
- コンストラクター
_init(book_title, book_author, page_count)は、引数をプロパティtitle、author、pagesに格納します。 describe()は、タイトルを一重引用符で囲んだ'TITLE' by AUTHOR, PAGES pagesを返します。
提供されたコードは、後に続く本の冊数を読み取り、続けて各本について、タイトル、著者、ページ数を ; で区切った1行を読み取ります。各本を Book.new() で作成し、describe() を出力した後、最後に pages プロパティの合計を出力します。入力行が Dune;Frank Herbert;412 の場合、次のように出力します。
'Dune' by Frank Herbert, 412 pages
Total pages: 412コードは book.gd に記述してください。main.gd には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
extends Node
func _ready():
# 用意された入出力コード:そのままにしてください
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)
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ