Какой будет вывод программы №25

Будет напечатано 40: два вызова first возвращают 10 и 20, а первый вызов second возвращает 10.

Короткий ответ

Что ответить на собеседовании

Будет напечатано 40: два вызова first возвращают 10 и 20, а первый вызов second возвращает 10.

Подробный разбор

Ответ с пояснениями

Условие

Вопрос: какой результат выведет следующая Swift‑программа?

func a() -> () -> Int {
    var counter = 0
    let closure: () -> Int = {
        counter += 10
        return counter
    }
    return closure
}

let first = a()
let second = a()
print(first() + first() + second())

Определите, какое число будет напечатано на консоли после выполнения кода.

Ответ

Будет напечатано 40: два вызова first возвращают 10 и 20, а первый вызов second возвращает 10.

Каждый вызов функции a создаёт собственную переменную counter, срок жизни которой продолжается благодаря возвращённому closure. Два обращения к first используют одно и то же сохранённое состояние, поэтому второе уже видит результат первого. second создан отдельным вызовом a и имеет независимый счётчик. Сумма равна 10 + 20 + 10, а не 30 и не 60.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее