SW Swift  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Result builders

Разбирает тему «Result builders» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют не только узнать конструкцию, но и проследить выполнение, найти причину дефекта, выбрать исправление и оценить пограничный сценарий. Языковые примеры рассчитаны на Swift 6; задания с Apple SDK рассматриваются в контексте современных платформенных контрактов.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, на работу отведено 70 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 5 тематических шкал и подробные объяснения.
Вопрос 1 из 25
Как поведёт себя программа в этом коротком сценарии, связанном с «Преобразования построителя»? Важно учесть: этап преобразования выражений построителем.
SwiftПреобразования построителя · фрагмент для разбора
@resultBuilder enum ListBuilder20 {
    static func buildBlock(_ parts: [Int]...) -> [Int] { parts.flatMap { $0 } }
    static func buildExpression(_ value: Int) -> [Int] { [value] }
}
@ListBuilder20 func numbers20() -> [Int] { 1; 2; 3 }
print(numbers20())
Вопрос 2 из 25
Какой из пяти выводов подтверждается построчной трассировкой? Сосредоточьтесь на следующем: соответствие синтаксической конструкции методам построителя.
SwiftУсловные ветви · фрагмент для разбора
@resultBuilder enum TextBuilder20 {
    static func buildBlock(_ parts: String...) -> String { parts.joined() }
    static func buildEither(first: String) -> String { first }
    static func buildEither(second: String) -> String { second }
}
Вопрос 3 из 25
Где окажется состояние программы после выполнения всех показанных операций? Здесь оценивается отделение описания от исполнения.
SwiftПредметно-ориентированный язык · фрагмент для разбора
struct Field20 { let name: String }
@resultBuilder enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}
@FormBuilder20 func form20() -> [Field20] { Field20(name: "email"); Field20(name: "age") }
Вопрос 4 из 25
В этом примере важна одна точная деталь механизма «Диагностика ошибок». Что действительно произойдёт? Здесь оценивается методика разбора ошибок построителя результата.
SwiftДиагностика ошибок · фрагмент для разбора
@resultBuilder
enum IntBuilder20 {
    static func buildBlock(_ values: Int...) -> [Int] { values }
    static func buildExpression(_ value: Int) -> Int { value }
    static func buildExpression(_ value: String) -> Int { Int(value) ?? 0 }
}

@IntBuilder20
func values20() -> [Int] {
    1
    "2"
}

print(values20())
Вопрос 5 из 25
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Тестирование декларативного построителя»? Сосредоточьтесь на следующем: полнота тестов декларативного построителя.
SwiftТестирование и диагностика · фрагмент для разбора
struct Field20 { let name: String }

@resultBuilder
enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}

@FormBuilder20
func empty20() -> [Field20] { }
Вопрос 6 из 25
Почему этот код не выполняет заявленный контракт? Важно учесть: этап преобразования выражений построителем.
SwiftПреобразования построителя · фрагмент для разбора
@resultBuilder enum B20 {
    static func buildBlock(_ values: Int...) -> [Int] { values }
}
@B20 func f20() -> [Int] { "x" }
Вопрос 7 из 25
Что именно делает этот фрагмент неверным или неочевидным с точки зрения «Условные ветви»? Важно учесть: соответствие синтаксической конструкции методам построителя.
SwiftУсловные ветви · фрагмент для разбора
@resultBuilder enum OnlyBlock20 { static func buildBlock(_ x: String...) -> String { x.joined() } }
@OnlyBlock20 func text20(_ flag: Bool) -> String {
    if flag { "A" } else { "B" }
}
Вопрос 8 из 25
Какой диагноз согласуется и с исходным кодом, и с правилами Swift? Сосредоточьтесь на следующем: отделение описания от исполнения.
SwiftПредметно-ориентированный язык · фрагмент для разбора
struct Field20: Equatable { let name: String }

@resultBuilder
enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}

@FormBuilder20
func form20() -> [Field20] {
    Field20(name: "email")
    Field20(name: "age")
}

var global20: [Field20] = []
@FormBuilder20
func badForm20() -> [Field20] {
    global20.append(Field20(name: "x"))
    Field20(name: "y")
}
Вопрос 9 из 25
Что именно делает этот фрагмент неверным или неочевидным с точки зрения «Диагностика ошибок»? Здесь оценивается методика разбора ошибок построителя результата.
SwiftДиагностика ошибок · фрагмент для разбора
import Foundation

@resultBuilder
enum IntBuilder20 {
    static func buildBlock(_ values: Int...) -> [Int] { values }
    static func buildExpression(_ value: Int) -> Int { value }
    static func buildExpression(_ value: String) -> Int { Int(value) ?? 0 }
}

@IntBuilder20
func broken20() -> [Int] {
    1
    Date()
}
Вопрос 10 из 25
Какую причину стоит указать в отчёте об ошибке, прежде чем предлагать исправление? Здесь оценивается полнота тестов декларативного построителя.
SwiftТестирование и диагностика · фрагмент для разбора
struct Field20: Equatable { let name: String }

@resultBuilder
enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}

@FormBuilder20
func form20() -> [Field20] {
    Field20(name: "email")
    Field20(name: "age")
}

func test20() {
    let fields = form20()
    assert(fields.count == 2)
    assert(fields.map(\.name) == ["email", "age"])
}
Вопрос 11 из 25
Какое исправление соответствует правилам Swift и не прячет сбой за обходным значением? Здесь оценивается этап преобразования выражений построителем.
SwiftПреобразования построителя · фрагмент для разбора
@resultBuilder enum B20 {
    static func buildBlock(_ values: Int...) -> [Int] { values }
}
@B20 func f20() -> [Int] { "x" }
Вопрос 12 из 25
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Сосредоточьтесь на следующем: соответствие синтаксической конструкции методам построителя.
SwiftУсловные ветви · фрагмент для разбора
@resultBuilder enum OnlyBlock20 { static func buildBlock(_ x: String...) -> String { x.joined() } }
@OnlyBlock20 func text20(_ flag: Bool) -> String {
    if flag { "A" } else { "B" }
}
Вопрос 13 из 25
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Важно учесть: отделение описания от исполнения.
SwiftПредметно-ориентированный язык · фрагмент для разбора
struct Field20: Equatable { let name: String }

@resultBuilder
enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}

@FormBuilder20
func form20() -> [Field20] {
    Field20(name: "email")
    Field20(name: "age")
}

var global20: [Field20] = []
@FormBuilder20
func badForm20() -> [Field20] {
    global20.append(Field20(name: "x"))
    Field20(name: "y")
}
Вопрос 14 из 25
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Важно учесть: методика разбора ошибок построителя результата.
SwiftДиагностика ошибок · фрагмент для разбора
import Foundation

@resultBuilder
enum IntBuilder20 {
    static func buildBlock(_ values: Int...) -> [Int] { values }
    static func buildExpression(_ value: Int) -> Int { value }
    static func buildExpression(_ value: String) -> Int { Int(value) ?? 0 }
}

@IntBuilder20
func broken20() -> [Int] {
    1
    Date()
}
Вопрос 15 из 25
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Здесь оценивается полнота тестов декларативного построителя.
SwiftТестирование и диагностика · фрагмент для разбора
struct Field20: Equatable { let name: String }

@resultBuilder
enum FormBuilder20 {
    static func buildBlock(_ fields: Field20...) -> [Field20] { fields }
}

@FormBuilder20
func form20() -> [Field20] {
    Field20(name: "email")
    Field20(name: "age")
}

func test20() {
    let fields = form20()
    assert(fields.count == 2)
    assert(fields.map(\.name) == ["email", "age"])
}
Вопрос 16 из 25
Какое уточнение защищает решение от слишком широкого толкования? Не упускайте из виду следующее: этап преобразования выражений построителем.
Вопрос 17 из 25
Какую предпосылку стоит явно записать в документации и тестах? Здесь оценивается соответствие синтаксической конструкции методам построителя.
Вопрос 18 из 25
Какую предпосылку стоит явно записать в документации и тестах? Важно учесть: отделение описания от исполнения.
Вопрос 19 из 25
Что нужно учесть, прежде чем объявлять найденное правило универсальным? Не упускайте из виду следующее: методика разбора ошибок построителя результата.
Вопрос 20 из 25
Какую предпосылку стоит явно записать в документации и тестах? Проверяется полнота тестов декларативного построителя.
Вопрос 21 из 25
Как организовать этот механизм, чтобы владение и отказ оставались понятными после расширения проекта? Здесь оценивается этап преобразования выражений построителем.
Вопрос 22 из 25
Команда выбирает не просто рабочую строку, а устойчивое устройство решения. Какой подход сильнее? Здесь оценивается соответствие синтаксической конструкции методам построителя.
Вопрос 23 из 25
Что должно определять архитектуру этого участка, когда появятся новые входы и владельцы? Проверяется отделение описания от исполнения.
Вопрос 24 из 25
Что должно определять архитектуру этого участка, когда появятся новые входы и владельцы? Проверяется методика разбора ошибок построителя результата.
Вопрос 25 из 25
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Сосредоточьтесь на следующем: полнота тестов декларативного построителя.

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу