Menu
CoddyTech

בנאי (_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.

challenge icon

אתגר

קל

השלם את המחלקה 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)
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין