Menu
CoddyTech

クラスとオブジェクトの違い

CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 3/65。

クラスとそのオブジェクトは異なるものを保持します。クラス内のconstはクラス自体に属します。値は1つで、オブジェクトを作成せずにクラス名を通して読み取ります。

# dog.gd
class_name Dog
extends RefCounted

const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"
print(Dog.SPECIES) # Canis familiaris

var行は、各オブジェクトが何を保持するかを記述します。new()で作成された各オブジェクトは、それぞれ独自のコピーを持ち、これらの変数はデフォルト値から始まります。

var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed

dog1を変更しても、dog2はそのままです。オブジェクトから定数を読み取ることもできます。dog1.SPECIESはDog.SPECIESと同じ値です。

オブジェクトが持てるのは、そのクラスで宣言された変数だけです。dog1.color = "brown" はエラーでプログラムを停止します。Dog には color 変数がないためです。オブジェクトに必要な変数はすべて、クラスに含めます。

challenge icon

チャレンジ

簡単

student.gd 内のクラス Student を完成させてください。

  • クラス全体で共有される、値が "Godot High School" の定数 SCHOOL
  • String 型の変数 student_name
  • 初期値が "N/A" の String 型の変数 grade

用意されたコードは、続く生徒の人数を読み取り、次に生徒ごとに1行ずつ読み取ります。各行には名前があり、任意でスペースに続いて成績が記されています。各行について Student を作成し、名前を設定します。行に成績がある場合にのみ、成績も設定します。その後、Student.SCHOOL とすべての生徒を出力します。Alice A と Bob の行に対して、次のように出力します。

School: Godot High School
Alice has grade A
Bob has grade N/A

コードは student.gd に記述してください。main.gd には用意された入力/出力コードが含まれており、編集できません。

自分で試してみよう

extends Node

func _ready():
	# 提供された入出力コード:そのままにしてください
	var count := int(OS.read_string_from_stdin())
	var students: Array[Student] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		var student := Student.new()
		student.student_name = parts[0]
		if parts.size() > 1:
			student.grade = parts[1]
		students.append(student)
	print("School: %s" % Student.SCHOOL)
	for student in students:
		print("%s has grade %s" % [student.student_name, student.grade])
quiz icon腕試し

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

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

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