Menu
CoddyTech
flag Ar iconالعربيةdown icon

مُسترجِعات الخصائص

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 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: فقط تكون للقراءة فقط وفقًا للعرف. إسناد قيمة إليها ليس خطأً، لكن دالة getter تتجاهل القيمة التي أُسنِدت إليها: بعد r.area = 100، تظل r.area تُرجع 30.

challenge icon

التحدي

سهل

أكمِل الصنف Temperature في temperature.gd. يخزّن قيمة واحدة، وهي celsius، ويحسب منها المقياسين الآخرين:

  • fahrenheit: تعيد دالة getter القيمة celsius * 9 / 5 + 32، وتخزّن دالة setter القيمة (value - 32) * 5 / 9 في celsius
  • kelvin: خاصية للقراءة فقط، تعيد دالة getter فيها القيمة celsius + 273.15

يقرأ الكود المُعطى عدد الأوامر التالية، ثم يقرأ أمرًا واحدًا في كل سطر: يعيّن c VALUE قيمة celsius، ويعيّن f VALUE قيمة fahrenheit. بعد كل أمر، يطبع الخصائص الثلاث بمنزلتين عشريتين. بالنسبة إلى 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 عبر الإنترنت