, 나는이 같은 시간에 표현을 한 변환을 작성하는 많은 청소기로 찾기 : 그러나불필요한 큰 변수를 제거하는 swiftc 컴파일러 최적화가 있습니까? 내가 고차 기능을 가진 코드를 쓰고 있어요 때
let children = objects.map { $0.children }
let validChildren = children.filter { $0.isValid }
let sortedChildren = validChildren.sorted { $0.count < $1.count }
, 내가 알고있는 이들 각각 그 함수는 변수에 저장하는 새로운 Array 객체를 반환하므로 이론적으로 매번 새로운 Array를 만들고 유지하면서 많은 메모리를 낭비합니다. 사용 후에 불필요한 배열이 파괴되도록 호출을 한 줄로 작성하는 것이 좋습니다.
let sortedChildren = objects.map { $0.children } .filter { $0.isValid } .sorted { $0.count < $1.count }
하지만 한 줄의 코드에서 너무 많은 일이 일어나기 때문에 나중에 읽는 것이 더 짜증납니다. 그래서 내 질문은 : 스위프트의 컴파일러가 내 nit-pickiness를 용서하고 컴파일 타임에 사용되지 않는 변수를 제거하는 최적화를 가지고 있습니까?
* "한 줄의 코드에 너무 많은 것이 있습니다"* -'.filter'와'.sorted' 전에 줄 바꿈을 할 수 있습니다 ... –
이것은 조기 최적화와 같은 냄새가납니다. – rmaddy
아니요 컴파일러는 다른 변수로 나누는 것에 신경 쓰지 않습니다. 그러나 메모리에 대해 걱정한다면 @MartinR이 말했듯이 줄 바꿈을 사용하거나 최소한 변수를 private/fileprivate 또는 lazy로 선언 할 수 있습니다. – Vollan