Menu
Coddy logo textTech

לכידת ערכים

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

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

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}

let next = makeCounter()
print(next())                    // 1
print(next())                    // 2
print(next())                    // 3

כל קריאה ל־makeCounter נותנת לך count חדש לגמרי, כך ששני מונים לעולם לא חולקים מצב:

let a = makeCounter()
let b = makeCounter()
print(a())                       // 1
print(b())                       // 1
print(a())                       // 2

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

challenge icon

אתגר

בינוני

בנו מפעל קטן ליצירת מונים.

הגדירו פונקציה makeCounter(start: Int, step: Int) שמחזירה סגירה מסוג () -> Int. כל קריאה לסגירה מחזירה את הערך הבא: הקריאה הראשונה מחזירה את start, הבאה מחזירה את start + step, הבאה את start + 2*step, וכן הלאה.

קראו שלושה מספרים שלמים מהקלט: start, step ו-n. בנו מונה עם start ו-step, ואז קראו לו n פעמים והדפיסו כל תוצאה בשורה נפרדת.

עבור הקלט 5 / 3 / 4, הפלט הוא:

5
8
11
14

נסו בעצמכם

let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!

// TODO: ליצור makeCounter(start:step:) -> () -> Int שלוכדת את הערך המשתנה
// לאחר מכן לקרוא לה n פעמים ולהדפיס כל תוצאה
quiz iconבחנו את עצמכם

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

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

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