💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, на работу отведено 55 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 4 тематические шкалы и подробные объяснения.
Вопрос 1 из 20
Что увидит разработчик после выполнения этого примера по теме «Массивы»? Не упускайте из виду следующее: мутация массива, границы индекса и стоимость операций.
Swift Массивы · фрагмент для разбора Копировать
var values = [1, 2, 3]
let removed = values.removeFirst()
values.append(4)
print(removed, values)
Операция с `values` корректна, поскольку словарь возвращает обычное значение, а не Optional, для отсутствующего ключа.
removeFirst возвращает 1, после append массив содержит [2, 3, 4].
removeFirst возвращает 2, после append массив содержит [2, 3, 4].
removeFirst возвращает 1, после append массив содержит [2, 3, 5].
removeFirst возвращает 1, после append массив содержит [3, 3, 4].
Вопрос 8 из 20
Что именно делает этот фрагмент неверным или неочевидным с точки зрения «Преобразования коллекций»? Сосредоточьтесь на следующем: map, compactMap, lazy и сохранение структуры данных.
Swift Преобразования коллекций · фрагмент для разбора Копировать
let input = ["1", "x", "3"]
let numbers = input.map(Int.init)
print(numbers)
map сохраняет число элементов, поэтому получается массив Result: [1, nil, 3].
map сохраняет число элементов, поэтому получается массив Optional: [1, nil, 4].
flatMap сохраняет число элементов, поэтому получается массив Optional: [1, nil, 3].
map сохраняет число элементов, поэтому получается массив Optional: [1, nil, 3].
Причина сбоя в том, что доступ к элементу массива по индексу всегда безопасен после любой мутации массива.
Вопрос 9 из 20
Что нужно поменять в реализации или сигнатуре, чтобы отрицательный сценарий стал корректным? Здесь оценивается мутация массива, границы индекса и стоимость операций.
Swift Массивы · фрагмент для разбора Копировать
let values = [10, 20]
print(values[2])
Достаточно изменить работу с `values`, исходя из того, что доступ к элементу массива по индексу всегда безопасен после любой мутации массива.
Проверять indices или использовать безопасную обёртку доступа, если индекс приходит извне.
Правка сводится к локальному обходу: словарь возвращает обычное значение, а не Optional, для отсутствующего ключа.
Проверять indices или использовать безопасную обёртку доступа, если индекс приходит извнутри. Так сохраняются существующие вызовы values и не требуется менять публичную форму «Массивы».
Сигнатуру можно не менять, если считать, что цепочка `map` и `filter` всегда выполняется лениво.
Вопрос 12 из 20
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Важно учесть: map, compactMap, lazy и сохранение структуры данных.
Swift Преобразования коллекций · фрагмент для разбора Копировать
let input = ["1", "x", "3"]
let numbers = input.map(Int.init)
print(numbers)
Использовать map, если неудачные преобразования нужно отбросить, либо сохранить nil, если позиционная связь важна.
Использовать compactMap, если неудачные преобразования нужно отбросить, либо сохранить nil, если позиционная связь важна.
Достаточно изменить работу с `input`, исходя из того, что словарь возвращает обычное значение, а не Optional, для отсутствующего ключа.
Правка сводится к локальному обходу: цепочка `map` и `filter` всегда выполняется лениво.
Исправление — оставить контракт прежним и учитывать, что доступ к элементу массива по индексу всегда безопасен после любой мутации массива.
Вопрос 13 из 20
Какую предпосылку стоит явно записать в документации и тестах? Проверяется мутация массива, границы индекса и стоимость операций.
Контрпример появляется, когда копия коллекции немедленно создаёт независимую копию всего буфера.
Индекс Set начинается с startIndex, обычно 0, но универсальный код Collection не должен предполагать целочисленный ноль.
Индекс Array начинается с startIndex, обычно 0, но универсальный код Collection не должен предполагать целочисленный ноль.
Индекс Array начинается с startIndex, обычно 1, но универсальный код Collection не должен предполагать целочисленный ноль.
Индекс Array начинается с startIndex, обычно 0, но универсальный код Collection должен предполагать целочисленный ноль.
Вопрос 20 из 20
Как организовать этот механизм, чтобы владение и отказ оставались понятными после расширения проекта? Проверяется map, compactMap, lazy и сохранение структуры данных.
Цепочки преобразований стоит оценивать по сохранению порядка, числа элементов и моменту вычисления, а только по краткости.
Для устойчивого решения достаточно принять, что доступ к элементу массива по индексу всегда безопасен после любой мутации массива.
Главным проектным принципом здесь является утверждение, что цепочка `map` и `filter` всегда выполняется лениво.
В API и тестах следует исходить из правила: словарь возвращает обычное значение, а не Optional, для отсутствующего ключа.
Цепочки преобразований стоит оценивать по сохранению порядка, числа элементов и моменту вычисления, а не только по краткости.