مُسترجِعات الخصائص
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 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) # 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 / 9t.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.
التحدي
سهلأكمِل الصنف Temperature في temperature.gd. يخزّن قيمة واحدة، وهي celsius، ويحسب منها المقياسين الآخرين:
fahrenheit: تعيد دالة getter القيمةcelsius * 9 / 5 + 32، وتخزّن دالة setter القيمة(value - 32) * 5 / 9فيcelsiuskelvin: خاصية للقراءة فقط، تعيد دالة 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])
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت