Menu
CoddyTech

OOP入門

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

オブジェクト指向プログラミング(OOP)は、プログラムをオブジェクトを中心に構成します。オブジェクトは、データ(変数)と、そのデータを扱う関数をひとまとめにしたものです。クラスは、そのオブジェクトが何を保持し、何を行うかを記述し、必要な数だけクラスからオブジェクトを作成します。

GDScriptでは、すべてのスクリプトファイルがクラスです。class_nameで名前を付け、各オブジェクトが持つ変数を宣言します。

# car.gd
class_name Car
extends RefCounted

var brand: String = "Generic"
var wheels: int = 4

extends RefCounted を使うと、どの変数からも参照されなくなった時点で、Godot が Car オブジェクトを自動的に解放します。データを保持し、ノードではないすべてのクラスでこれを使います。extends 行のないスクリプトも、RefCounted を継承します。

クラスでnew()を呼び出してオブジェクトを作成し、ドットを使ってその変数にアクセスします:

# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # true

is演算子は、オブジェクトがどのクラスから作成されたかを確認します。オブジェクト自体を出力すると、<RefCounted#-9223372009860233781>のようなIDしか表示されないため、代わりにその変数を出力します。

クラスは設計図であり、それぞれのオブジェクトはそこから作られた別個のものです。Car.new()を2回呼び出すと、2台の車が得られます。

challenge icon

チャレンジ

簡単

car.gd にクラス Car を作成します。

  • クラス名は Car で、RefCounted を継承します
  • "Generic" で初期化される String 型の変数 brand
  • 4 で初期化される 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)
quiz icon腕試し

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

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

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