בנאי (_init)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 7 מתוך 65.
הגדרת כל מאפיין אחרי new() דורשת כמה שורות, וקל לשכוח אחד מהם. בנאי מגדיר אובייקט בעת יצירתו. ב-GDScript הבנאי הוא המתודה _init():
# book.gd
class_name Book
extends RefCounted
var title: String
var author: String
var pages: int
func _init(book_title: String, book_author: String, page_count: int) -> void:
title = book_title
author = book_author
pages = page_countהארגומנטים שמעבירים אל new() מועברים אל _init(), שפועלת אוטומטית לפני ש־new() מחזירה את האובייקט:
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412כאשר ל־_init() יש פרמטרים, new() חייבת להעביר אותם: קריאה ל־Book.new() ללא ארגומנטים היא שגיאה שמדווחים עליה לפני שהתוכנית רצה. פרמטר עם ערך ברירת מחדל הוא אופציונלי:
func _init(book_title: String, book_author: String = "Unknown") -> void:בעזרת הבנאי הזה, Book.new("Notes") יוצר ספר שהמחבר שלו הוא "Unknown".
שמות הפרמטרים שלמעלה שונים משמות המאפיינים. אם הם היו זהים, היית כותב self.title = title, כמו בשיעור על self.
אתגר
קלהשלם את המחלקה Book בקובץ book.gd:
- הבנאי
_init(book_title, book_author, page_count)שומר את הארגומנטים שלו במאפייניםtitle,authorו־pages describe()מחזירה'TITLE' by AUTHOR, PAGES pages, כשהכותרת בתוך גרשיים בודדים
הקוד שסופק קורא כמה ספרים מופיעים בהמשך, ואז שורה אחת לכל ספר ובה הכותרת, המחבר ומספר העמודים, מופרדים באמצעות ;. הוא יוצר כל ספר באמצעות Book.new(), מדפיס את describe(), ולבסוף מדפיס את הסכום של מאפייני pages. עבור השורה Dune;Frank Herbert;412 הוא מדפיס:
'Dune' by Frank Herbert, 412 pages
Total pages: 412יש לכתוב את הקוד שלך בקובץ book.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
extends Node
func _ready():
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var count := int(OS.read_string_from_stdin())
var total := 0
for i in count:
var parts := OS.read_string_from_stdin().split(";")
var book := Book.new(parts[0], parts[1], int(parts[2]))
print(book.describe())
total += book.pages
print("Total pages: %d" % total)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין