Menu
CoddyTech

プロパティのゲッター

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

get:ブロック(プロパティのゲッター)は、プロパティが読み取られるたびに実行され、返される値が読み取り側に渡される値になります。他のプロパティから計算される値には、次のように使います。

# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
	get:
		return width * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.area は変数のように括弧なしで読み取りますが、読み取るたびに再計算されるため、常に現在の幅と高さに一致します。

プロパティには両方のブロックを設定できます。ここでは、fahrenheitは変換のみを行います。値を読み取るとcelsiusから変換され、値を代入すると逆方向に変換され、結果がcelsiusに保存されます。

# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
	get:
		return celsius * 9 / 5 + 32
	set(value):
		celsius = (value - 32) * 5 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

get: だけを持つプロパティは、慣例上読み取り専用です。代入してもエラーにはなりませんが、ゲッターは代入された値を無視します。r.area = 100 の後も、r.area は 30 を返します。

challenge icon

チャレンジ

簡単

Temperatureクラスをtemperature.gdで完成させてください。値を1つ、celsiusに格納し、そこから他の温度尺度を計算します。

  • fahrenheit: ゲッターはcelsius * 9 / 5 + 32を返し、セッターは(value - 32) * 5 / 9をcelsiusに格納します
  • kelvin: ゲッターがcelsius + 273.15を返す読み取り専用プロパティです

提供されたコードは、後に続くコマンドの数を読み取り、その後、1行に1つずつ読み取ります。c VALUEはcelsiusを設定し、f VALUEはfahrenheitを設定します。各コマンドの後、3つのプロパティを小数点以下2桁で出力します。c 25、f 98.6、c -40に対して、次のように出力します。

25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 K

コードはtemperature.gdに記述してください。main.gdには提供された入出力コードがあり、編集できません。

自分で試してみよう

extends Node

func _ready():
	# 提供された入出力コード:そのままにしてください
	var temp := Temperature.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "c":
			temp.celsius = float(parts[1])
		else:
			temp.fahrenheit = float(parts[1])
		print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
quiz icon腕試し

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

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

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