Menu
Coddy logo textTech

Procs ו־Lambdas

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 19 מתוך 56.

בלוק אינו אובייקט, אי אפשר לאחסן אותו במשתנה. כשרוצים קטע קוד שאפשר להעביר הלאה, לשמור ולהפעיל מאוחר יותר, עוטפים אותו ב־Proc או ב־lambda.

Proc נוצר באמצעות Proc.new או מילת המפתח proc. קוראים לו באמצעות .call:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

למבדה דומה, אבל מחמירה יותר: היא בודקת שהעברת את מספר הארגומנטים הנכון. הצורה עם חץ -> היא הכתיב הנפוץ:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (קיצור של .call)

אפשר להעביר את שניהם למתודה שמצפה לבלוק על ידי הוספת & כתחילית:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

השתמשו ב-lambda כשרוצים בדיקת ארגומנטים קפדנית יותר; השתמשו ב-Proc כשרוצים התנהגות מקלה וגמישה יותר.

challenge icon

אתגר

קל

צרו למבדה בשם tripler שמקבלת מספר אחד ומחזירה אותו כפול 3.

לאחר מכן קראו רשימת מספרים שלמים המופרדת בפסיקים והדפיסו, בשורות נפרדות:

  1. את התוצאה של קריאה ל־tripler.call(10)
  2. את מספרי הקלט כשהם מוכפלים פי 3 (השתמשו ב־map(&tripler)) ומחוברים באמצעות ,

עבור הקלט 1,2,3, הפלט הוא:

30
3, 6, 9

נסו בעצמכם

# TODO: הגדירו את `tripler` כביטוי lambda

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: בשורה 1, הדפיסו את tripler.call(10)
# TODO: בשורה 2, הפעילו map על numbers באמצעות &tripler, ואז חברו את התוצאות באמצעות ", "
quiz iconבחנו את עצמכם

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

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

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