לימוד מחודש של רובי חלק ראשון

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

כל "חלק" יתן קישור גם לחלק הקודם.

הבנה של yield ובלוקים

ברובי הרבה מהעבודה מתבצעת באמצעות בלוקים (עד כאן ידעתי והכרתי גם לפני). כאשר אנחנו מעבירים בפונקציה פרמטר באמצעות  בלוקים, אנחנו משתמשים בעצם בפרמטר שהועבר ב yield . השם כמובן אינו משנה, כי הוא מקבל את התוכן של הפרמטר ב yield, אבל נהוג לספק את אותו השם בדיוק.

התפקיד של yield הוא לעצור ריצה בנקודה שהוא הוגדר, ולספק את הערך של הפרמטר שמוגדר ב yield (זה גם יכול להיות עוד פונקציה עד כמה שאני יודע), והערך מתקבל ברגע שקוראים לו עם המתודה שהגדירה אותו, ואז הוא ימשיך הלאה. תמיד חשבתי שהבנתי את yield, אבל אחרי קריאה מחודשת עם דוגמאות, אני חייב להגיד שלא באמת הבנתי.

השימוש ב yield נראה כך:


def explain_yield
arr = [1, 2, 3, 4]
arr.each do |i|
yield i
end
end

הפונקציה למעלה תיתן לנו להשתמש בתוכן של i מבחוץ כל פעם שנשתמש בפונקציה explain_yield עם בלוקים. כלומר:

explain_yield { |i| puts i }

תדפיס עבורינו את הערך ש i העומד כרגע בריצה של הלולאה.

דרך לקבל את כל הערכים היא:

explain_yield do |i|
puts i
end

ואנחנו נקבל הדפס של כל הערכים ש i מקבל בריצת הלולאה. למעשה ה do יוצר לנו את הלולאה במקרה הזה.

רשומה זו פורסמה בקטגוריה Ruby, קוד פתוח, תכנות. אפשר להגיע ישירות לרשומה זו עם קישור ישיר.

2 תגובות על לימוד מחודש של רובי חלק ראשון

  1. astupidog הגיב:

    זה נראה מאוד כמו callback בjavascript:


    function explain_yield(yield){
    for(var i=1;i<5;i++){
    yield(i);
    };
    };
    explain_yield(function(i){
    alert(i);
    });

  2. ik_5 הגיב:

    זה ממש לא כמו callback. זו דרך לבצע איטרציה על שדות בלי לשכפל את הקוד שעושה את האיטרציה עצמה.

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s