TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #215 1.25K
🔢 Циклы for против функций высшего порядка в Swift: что выбрать.

В Swift у разработчиков есть выбор: использовать традиционные циклы for или функции высшего порядка. Давайте разберемся, где каждый подход раскрывается лучше всего.


Сильные стороны функций высшего порядка.

Для простых преобразований данных map выглядит чище:


// Более читаемо
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
// squaredNumbers = [1, 4, 9, 16, 25]

// Чем
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = [Int]()

for number in numbers {
squaredNumbers.append(number * number)
}
// squaredNumbers = [1, 4, 9, 16, 25]


filter идеален для отбора элементов:


let users = [
User(name: "Анна", isActive: true, age: 25),
User(name: "Петр", isActive: false, age: 30),
User(name: "Мария", isActive: true, age: 22)
]

let activeUsers = users.filter { $0.isActive }
// activeUsers = [User(name: "Анна", isActive: true, age: 25), User(name: "Мария", isActive: true, age: 22)]


reduce отлично подходит для агрегации:


let prices = [100, 200, 300]
let totalPrice = prices.reduce(0) { currentSum, price in
return currentSum + price
}
// totalPrice = 600



Когда циклы for предпочтительнее.

Логика с условиями:


var passedStudents: [String] = []
let studentGrades = [45, 82, 91, 33, 67, 74, 58, 29, 95]

for grade in studentGrades {
guard grade >= 60 else { continue } // Исключаем оценки ниже 60
guard grade <= 90 else { continue } // Исключаем оценки выше 90

passedStudents.append("Студент с оценкой \(grade)")
}

/*
passedStudents = [
"Студент с оценкой 82",
"Студент с оценкой 67",
"Студент с оценкой 74"
]
*/


Ранний выход из цикла:


// Поиск первого отрицательного числа
let dailyTemperatures = [15, 18, -2, 20, 25, -5]
var firstNegative: Int?

for temperature in dailyTemperatures {
if temperature < 0 {
firstNegative = temperature
break // Выходим при первом найденном
}
}
// firstNegative = -2


Изменение внешних переменных:


let itemsToProcess = [1, 15, 41, 3, 22, 61]
var processedItems = 0
var failedItems = 0

for item in itemsToProcess {
if processItem(item) {
processedItems += 1
} else {
failedItems += 1
}
}



Производительность.

Для массивов до 1000 элементов разница в производительности между функциями высшего порядка и циклом for практически незаметна. Современные оптимизации компилятора Swift отлично справляются с функциональными методами. Однако при обработке десятков тысяч элементов циклы for могут быть на 10-30% быстрее.

Функции высшего порядка часто создают промежуточные массивы. Цепочка map, filter, map может создать 3 временных массива, тогда как цикл for работает с одним. Для больших данных это влияет на память.


🔗 Ссылка на подробную статью


💡 Вывод:

Swift предлагает нам два мощных подхода к обработке данных, и мудрый разработчик знает, когда применять каждый из них. Функции высшего порядка прекрасно справляются с простыми и средними по сложности преобразованиями данных. Они делают код более декларативным, читаемым и безопасным за счет неизменяемости.

Однако традиционные циклы for остаются незаменимыми, когда речь идет о сложной бизнес логике с множеством условий внутри цикла, необходимости раннего выхода из цикла или изменении внешних переменных.


➡️ Подписаться на канал
Мобильный трудоголик
  • ❤ 15
  • 👍 11
  • 🔥 2
  • 🙏 1
More from @hardworkerit
  1. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  2. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  3. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  4. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  5. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  6. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →