OOP入門
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 2/65。
オブジェクト指向プログラミング(OOP)は、プログラムをオブジェクトを中心に構成します。オブジェクトは、データ(変数)と、そのデータを扱う関数をひとまとめにしたものです。クラスは、そのオブジェクトが何を保持し、何を行うかを記述し、必要な数だけクラスからオブジェクトを作成します。
GDScriptでは、すべてのスクリプトファイルがクラスです。class_nameで名前を付け、各オブジェクトが持つ変数を宣言します。
# car.gd
class_name Car
extends RefCounted
var brand: String = "Generic"
var wheels: int = 4extends RefCounted を使うと、どの変数からも参照されなくなった時点で、Godot が Car オブジェクトを自動的に解放します。データを保持し、ノードではないすべてのクラスでこれを使います。extends 行のないスクリプトも、RefCounted を継承します。
クラスでnew()を呼び出してオブジェクトを作成し、ドットを使ってその変数にアクセスします:
# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # trueis演算子は、オブジェクトがどのクラスから作成されたかを確認します。オブジェクト自体を出力すると、<RefCounted#-9223372009860233781>のようなIDしか表示されないため、代わりにその変数を出力します。
クラスは設計図であり、それぞれのオブジェクトはそこから作られた別個のものです。Car.new()を2回呼び出すと、2台の車が得られます。
チャレンジ
簡単car.gd にクラス Car を作成します。
- クラス名は
Carで、RefCountedを継承します "Generic"で初期化されるString型の変数brand4で初期化されるint型の変数wheels
提供されたコードは、作成する車の台数を読み取り、それぞれを Car.new() で作成します。車の台数と、車輪の合計数を出力します。車を1台以上作成した場合は、最初の車のブランドを読み取り、最初と最後の車のブランドを出力します。入力が 3 と Tesla の場合、次のように出力します。
Cars: 3
Wheels: 12
First car: Tesla
Last car: Genericコードは car.gd に記述します。main.gd には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード: そのままにしてください
var count := int(OS.read_string_from_stdin())
var garage: Array[Car] = []
for i in count:
garage.append(Car.new())
var total := 0
for car in garage:
total += car.wheels
print("Cars: %d" % garage.size())
print("Wheels: %d" % total)
if count > 0:
garage[0].brand = OS.read_string_from_stdin()
print("First car: %s" % garage[0].brand)
print("Last car: %s" % garage[-1].brand)
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ