מהו בלוק?
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 15 מתוך 56.
כבר כתבת בלוקים. בכל פעם שכתבת each do |x| ... end, החלק שבין do ל-end היה בלוק: קטע קוד שמועבר למתודה.
[1, 2, 3].each do |n|
puts n * 2
endכאן, each היא מתודה של המערך, ו-do |n| ... end הוא הבלוק. each מריצה את הבלוק פעם אחת עבור כל איבר, ומעבירה אותו בתור n.
בלוקים אינם אובייקטים נפרדים ששומרים במשתנים; הם קשורים ישירות לקריאה למתודה. מתודה מקבלת בלוק או לא, ורוב מתודות האיטרציה (each, map, select, times) מיועדות לקבל אחד.
3.times do |i|
puts "hi #{i}"
endקריאה למתודה בלי הבלוק שלה משנה את מה שהיא עושה. [1,2,3].map ללא בלוק מחזירה enumerator במקום מערך שעבר טרנספורמציה, ולכן הבלוק הוא חלק מהמשמעות של המתודה.
אתגר
מתחיליםקרא מספר שלם n מהקלט. השתמש בשיטה times עם בלוק כדי להדפיס את ההודעה Iteration <i> עבור כל ערך של i מ־0 ועד n - 1.
עבור הקלט 3, הפלט הוא:
Iteration 0
Iteration 1
Iteration 2נסו בעצמכם
n = gets.to_i
# TODO: השתמשו ב־n.times עם בלוק כדי להדפיס כל איטרציה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין