מילת המפתח 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!" } # נקרא!אתגר
קלהגדירו מתודה בשם 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>"
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין