Menu
CoddyTech

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 = color

self. がないと、行 color = color はパラメーターをそれ自身にコピーするため、車の色は古いままです。

challenge icon

チャレンジ

簡単

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())
quiz icon腕試し

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

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

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