מאחזרי מאפיינים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 12 מתוך 65.
בלוק get:, הgetter של המאפיין, מופעל בכל פעם שקוראים את המאפיין, והערך שהוא מחזיר הוא הערך שהקורא מקבל. השתמשו בו עבור ערך שמחושב ממאפיינים אחרים:
# 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יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין