プロパティのゲッター
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 12/65。
get:ブロック(プロパティのゲッター)は、プロパティが読み取られるたびに実行され、返される値が読み取り側に渡される値になります。他のプロパティから計算される値には、次のように使います。
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.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 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0get: だけを持つプロパティは、慣例上読み取り専用です。代入してもエラーにはなりませんが、ゲッターは代入された値を無視します。r.area = 100 の後も、r.area は 30 を返します。
チャレンジ
簡単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])
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ