Menu
CoddyTech

פונקציות Lambda חלק 2

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 55 מתוך 78.

למבדה בשורה אחת יכולה לבחור את התוצאה שלה באמצעות האופרטור התלת־אופני, value_if_true if condition else value_if_false:

var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # Adult

ליותר משני מקרים, שרשר תנאי שלישוני שני אחרי else, או כתוב את הלמבדה כבלוק עם if ו-elif:

var grade = func(score):
	if score == 100:
		return "Perfect"
	elif score >= 60:
		return "Pass"
	return "Fail"
print(grade.call(75)) # Pass

מכיוון שלמבדה היא ערך, אפשר להעביר אותה לפונקציה. הצהר על הפרמטר עם הטיפוס Callable והפעל אותו באמצעות call():

func apply_twice(fn: Callable, value):
	return fn.call(fn.call(value))
print(apply_twice(func(n): return n + 3, 1)) # 7

אפשר להעביר פונקציה בעלת שם באותו אופן: כותבים את שמה בלי סוגריים, כמו ב־apply_twice(double, 5).

גם שיטות מובנות מקבלות פונקציות. sort_custom() ממיינת מערך באמצעות למבדה שמקבלת שני איברים ומחזירה true כשהאיבר הראשון צריך לבוא קודם:

var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]

ביטוי lambda יכול לקרוא את המשתנים המקומיים שסביבו, אבל הוא מעתיק את הערכים שלהם כשהוא נוצר. שינוי של משתנה כזה לאחר מכן לא משפיע על ביטוי ה-lambda, והשמה אליו בתוך ביטוי ה-lambda לא משנה את המשתנה שמחוץ לו.

challenge icon

אתגר

קל

התוכנית קוראת מספר שלם. צרו lambda ושמרו אותו במשתנה בשם categorize_number. הוא מקבל מספר אחד ומחזיר:

  • Positive אם המספר גדול מ-0
  • Zero אם המספר הוא 0
  • Negative אם המספר קטן מ-0

קראו לו עם המספר שקראתם והדפיסו את התוצאה. עבור הקלט 10, הפלט הוא:

Positive

נסו בעצמכם

extends Node

func _ready():
	var number := int(OS.read_string_from_stdin())
	# צרו כאן את פונקציית הלמבדה categorize_number

	# קראו לה עם number והדפיסו את התוצאה
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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