selfキーワード
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 4/65。
クラス内で宣言された関数は、特定のオブジェクト(呼び出し時にドットの前にあるオブジェクト)に対して実行されます。関数内では、キーワード self はそのオブジェクトを指します。
# car.gd
class_name Car
extends RefCounted
var color: String = "Red"
var model: String = "Sedan"
func describe() -> void:
print("I am a %s %s" % [self.color, self.model])my_car.describe() は self に my_car を設定して describe() を実行するため、その車の変数を読み取ります。self を自分で渡すことはありません。
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # 私は赤いセダンです
taxi.describe() # 私は黄色いセダンですself.と書くのは任意です。クラス関数の中では、colorだけでオブジェクトのcolorを意味するため、print("I am a %s %s" % [color, model])でも同じことができます。
パラメーターがクラスの変数と同じ名前の場合は、selfが必要です。関数内では、その名前はパラメーターを指し、self.を付けるとオブジェクトの変数を指定できます:
func repaint(color: String) -> void:
self.color = colorself. がないと、行 color = color はパラメーターをそれ自身にコピーするため、車の色は古いままです。
チャレンジ
簡単car.gd内のクラスCarの2つの関数を完成させてください:
set_info(year, make, model)は、3つのパラメーターを同じ名前の車の変数に格納しますdescribe()はThis car is a YEAR MAKE MODELを返します。例:This car is a 2020 Toyota Corolla
用意されているコードは、続く車の台数を読み取り、その後、車ごとに1行ずつ読み込みます(year make model)。各車を作成してset_info()を呼び出し、すべての車についてdescribe()の結果を出力します。行が2020 Toyota Corollaの場合、次のように出力します:
This car is a 2020 Toyota Corollaコードはcar.gdに記述してください。main.gdには用意されている入出力コードがあり、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード: そのままにしておいてください
var count := int(OS.read_string_from_stdin())
var cars: Array[Car] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var car := Car.new()
car.set_info(int(parts[0]), parts[1], parts[2])
cars.append(car)
for car in cars:
print(car.describe())
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ