Swift Collections Performance, functional programming and collections in Swift

Performance, functional programming and collections in Swift

Collections 의 함수 사용 시 성능 고려하기

Prefer contains over first(where:) != nil

Best practice

let numbers = [0, 1, 2, 3]
numbers.contains(1)

Bad practice

let numbers = [0, 1, 2, 3]
numbers.filter { number in number == 1 }.isEmpty == false
numbers.first(where: { number in number == 1 }) != nil
  • contains 를 사용하자

Prefer checking isEmpty over comparing count to zero.

Best practice

let numbers = []
numbers.isEmpty

myString.isEmpty

Bad practice

let numbers = []
numbers.count == 0

myString == ""
myString.count == 0
  • isEmpty 를 사용하자

Get the first object matching a condition

Best practice

let numbers = [3, 7, 4, -2, 9, -6, 10, 1]
let firstNegative = numbers.first(where: { $0 < 0 })

Bad practice

let numbers = [3, 7, 4, -2, 9, -6, 10, 1]
let firstNegative = numbers.filter { $0 < 0 }.first
  • first(where _:) 은 조건 중촉 시 즉시 중단 됨

Getting the minimum or maximum element in a collection

Best practice

let numbers = [0, 4, 2, 8]
let minNumber = numbers.min()
let maxNumber = numbers.max()

Bad practice

let numbers = [0, 4, 2, 8]
let minNumber = numbers.sorted().first
let maxNumber = numbers.sorted().last

Making sure all objects match a condition

Best practice

let numbers = [0, 2, 4, 6]
let allEven = numbers.allSatisfy { $0 % 2 == 0 }

Bad practice

let numbers = [0, 2, 4, 6]
let allEven = numbers.filter { $0 % 2 != 0 }.isEmpty
  • Swift 4.2 버전에 소개된 allSatisfy(_:) 컬렉션의 모든 요소가 특정 조건과 일치하는 지 알 수 있음

대부분의 이런 사례는 SwiftLint 로 알 수 있음.

출처

avanderlee.com

댓글남기기