סיכום – רשימה מותאמת אישית
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 34 מתוך 65.
אתגר
בינוניכתבו את CustomList בקובץ custom_list.gd, מחלקה שעוטפת מערך פרטי _items ומספקת את מה שנדרש מרשימה באמצעות מתודות ומתודות וירטואליות:
_init(items = [])שומרת עותק שלitems, כך ששינויים מאוחרים במערך שהועבר פנימה לא ישפיעו על הרשימה.append(item)מוסיפה פריט בסוף.pop_back()מסירה ומחזירה את הפריט האחרון, או מחזירהnullכשהרשימה ריקה.get_at(index)מחזירה את הפריט, אוnullכשהאינדקס מחוץ לטווח0עדsize() - 1.set_at(index, value)מחליפה את הפריט ומחזירהtrue, או מחזירהfalseכאשר האינדקס מחוץ לרשימה.size(),has(item)ו-clear()פועלות כמו מתודות המערך בעלות אותם שמות.concat(other)מחליפה את האופרטור+: היא מחזירהCustomListחדשה עם פריטי הרשימה הזו ואחריהם הפריטים שלother, ואינה משנה אף אחת מהרשימות._to_string()מחזירה את הפריטים כפי שמערך מציג אותם, למשל[3, 1, 4]._iter_init(),_iter_next()ו-_iter_get()מאפשרות ללולאתforלעבור על הפריטים.
הקוד שסופק קורא את המספרים ההתחלתיים (שורה אחת, מופרדים ברווחים, ייתכן שהיא ריקה), יוצר את הרשימה, מוסיף 99 למערך שהועבר אליו ומציג את הרשימה. לאחר מכן הוא קורא את מספר הפקודות ומריץ פקודה אחת בכל שורה: append N, pop, get I, set I N, has N, size, sum (לולאת for שעוברת על הרשימה), clear ו-concat N N .... עבור הקלט הזה:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2הוא מציג:
[3, 1, 4]
[3, 1, 4, 1]
Item 2: 4
No item at 9
[5, 1, 4, 1]
Has 4: true
Sum: 11
Popped 1
[5, 1, 4] + [9, 2] = [5, 1, 4, 9, 2]הקוד שלכם ייכנס לקובץ custom_list.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
extends Node
func _ready():
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# הרשימה חייבת לשמור עותק משלה
numbers.append(99)
print(list)
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
match parts[0]:
"append":
list.append(int(parts[1]))
print(list)
"pop":
var item = list.pop_back()
print("Empty" if item == null else "Popped %d" % item)
"get":
var item = list.get_at(int(parts[1]))
print(("No item at " + parts[1]) if item == null else "Item %s: %d" % [parts[1], item])
"set":
if list.set_at(int(parts[1]), int(parts[2])):
print(list)
else:
print("No item at " + parts[1])
"has":
print("Has %s: %s" % [parts[1], list.has(int(parts[1]))])
"size":
print("Size: %d" % list.size())
"sum":
var total := 0
for item in list:
total += item
print("Sum: %d" % total)
"clear":
list.clear()
print(list)
"concat":
var other := CustomList.new(to_numbers(parts.slice(1)))
print("%s + %s = %s" % [list, other, list.concat(other)])
func to_numbers(words: PackedStringArray) -> Array:
var result := []
for word in words:
result.append(int(word))
return result
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידים3ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותשרשראות ירושהבדיקת טיפוס באמצעות isסיכום – היררכיית עובדים6מתודות מיוחדות
מבוא למתודות וירטואליותהמתודה _to_stringאיטרטורים מותאמים אישיתסיכום – רשימה מותאמת אישיתתרגלו בעצמכם: קומפיילר GDScript אונליין