Menu
Coddy logo textTech

מילת המפתח yield

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

מתודות שאתה מגדיר בעצמך יכולות לקבל בלוק, בדיוק כמו המתודות המובנות. בתוך המתודה, מילת המפתח yield מריצה את הבלוק שהקורא העביר.

def greet
  puts "Before block"
  yield
  puts "After block"
end

greet do
  puts "Hi from the block!"
end
# לפני הבלוק
# שלום מהבלוק!
# אחרי הבלוק

אפשר להעביר ארגומנטים לבלוק על ידי העברתם אל yield:

def with_each(items)
  items.each { |item| yield item }
end

with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30

אם מתודה קוראת ל־yield אבל מי שקרא לה לא העביר בלוק, Ruby מעלה שגיאה. בעזרת block_given? אפשר לבדוק זאת תחילה:

def maybe
  yield if block_given?
end

maybe                       # שום דבר לא קורה
maybe { puts "called!" }    # נקרא!
challenge icon

אתגר

קל

הגדירו מתודה בשם repeat שמקבלת ארגומנט אחד n (מספר שלם) ומעבירה לבלוק שלה את הערכים 1, 2, ..., n, אחד בכל פעם.

לאחר מכן קראו למתודה עם n = 4 ועם בלוק שמדפיס "Got <value>" עבור כל ערך שמועבר אליו.

הפלט הוא:

Got 1
Got 2
Got 3
Got 4

נסו בעצמכם

# TODO: להגדיר את `repeat` שמעביר לבלוק שלו את הערכים 1..n

# TODO: לקרוא ל־repeat(4) עם בלוק שמדפיס "Got <value>"
quiz iconבחנו את עצמכם

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

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

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