クラスとオブジェクトの違い
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 familiarisvar行は、各オブジェクトが何を保持するかを記述します。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) # Unnameddog1を変更しても、dog2はそのままです。オブジェクトから定数を読み取ることもできます。dog1.SPECIESはDog.SPECIESと同じ値です。
オブジェクトが持てるのは、そのクラスで宣言された変数だけです。dog1.color = "brown" はエラーでプログラムを停止します。Dog には color 変数がないためです。オブジェクトに必要な変数はすべて、クラスに含めます。
チャレンジ
簡単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])
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ