Sobes.tech
Junior — Middle

Тафовутҳои асосии байни пӯшишҳое, ки имкон медиҳанд, ки аз доираи худ берун шаванд, ва онҳое, ки ин имконро намедиҳанд, шарҳ диҳед.

sobes.tech AI

Ҷавоб аз AI

Дар iOS (Swift/Objective-C), қисмҳо (closures) метавонанд тағйирёбандаҳоро аз доираи берунии худ тасхир кунанд. Фарқияти асосӣ байни қисмҳое, ки метавонанд аз доираи худ хориҷ шаванд ва онҳое, ки наметавонанд, бо вақти зиндагӣ ва тасхири контекст вобаста аст:

  • Қисмҳое, ки метавонанд аз доираи худ хориҷ шаванд объектҳое мебошанд, ки ба ишораҳо ба тағйирёбандаҳо аз контексти беруна тасхир мекунанд ва онҳоро нигоҳ медоранд, ки имкон медиҳад истифодаи ин тағйирёбандаҳо ҳатто пас аз анҷоми доираи аслӣ. Ин қисмҳо одатан ҳамчун хосиятҳо нигоҳ дошта мешаванд, ҳамчун callback гузошта мешаванд ва ғайра.

  • Қисмҳое, ки наметавонанд аз доираи худ хориҷ шаванд онҳое мебошанд, ки нигоҳ дошта намешаванд ё контекстро тасхир намекунанд, ё танҳо дар дохили ҳамон доираи, ки дар он муайян шудаанд, истифода мешаванд. Онҳо баъдан наметавонанд даъват шаванд, зеро контекст аллакай нобуд шудааст.

Масалан:

func makeIncrementer(amount: Int) -> () -> Int {
    var total = 0
    let incrementer: () -> Int = {
        total += amount
        return total
    }
    return incrementer
}

let inc = makeIncrementer(amount: 5)
print(inc()) // 5
print(inc()) // 10

Ин ҷо, қисмати incrementer тағйирёбандаҳои total ва amount-ро тасхир мекунад ва онҳоро нигоҳ медорад, ки имкон медиҳад истифодаи онҳо берун аз функсияи аслӣ. Агар қисм контекстро тасхир намекард ё нигоҳ дошта намешуд, пас аз хориҷ шудан аз функсия кор намекард.