Menu
CoddyTech

コンストラクター(_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_count

new()に渡す引数は_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と書きます。

challenge icon

チャレンジ

簡単

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)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ