C 스타일 for-loop
는 Swift 고유의 구조라기보다는 C 언어에서 기계적으로 가져온 요소로 보인다. 이 문법은 잘 사용되지 않으며, Swift 스타일과도 잘 맞지 않는다.
Swift에서는 이미 for-in
문과 stride
를 통해 더 전형적인 반복 구문을 제공하고 있다. C 스타일 for-loop
를 제거하면 언어를 단순화할 수 있으며, --
와 ++
연산자의 가장 흔한 사용처를 없앨 수 있다. 이 연산자들은 이미 언어에서 제거될 예정이다.
이 구조의 가치는 제한적이며, 제거를 진지하게 고려해야 한다고 생각한다.
이 제안은 Swift Evolution 포럼의 C 스타일 For 루프 스레드에서 논의되었으며, [리뷰] 조건과 증감 연산자를 사용한 C 스타일 for 루프 제거 스레드에서 검토되었다.
Swift는 친숙한 상수와 제어 구조를 사용해 학습 곡선을 낮추는 설계를 채택했다. for
반복문은 C 언어와 유사하게 동작하며, 이 제어 흐름을 익히는 데 필요한 노력을 최소화한다.
for-in
과 stride
는 레거시 용어에 얽매이지 않으면서도 Swift 스타일의 일관된 접근 방식을 제공한다.for-in
에 비해 for-loop
는 간결성 측면에서 명확한 표현적 단점이 있다.for-loop
구현은 컬렉션이나 Swift의 핵심 타입과 함께 사용하기에 적합하지 않다.for-loop
는 단항 증가/감소 연산자를 사용하도록 유도하며, 이는 곧 언어에서 제거될 예정이다.for-loop
가 존재하지 않았다면, Swift 3에 포함될 가능성은 낮았을 것이다.Swift 2.x에서 for-loop를 더 이상 사용하지 않도록 권고하고, Swift 3에서는 완전히 제거할 것을 제안한다. 또한 Swift 프로그래밍 언어에서 관련 내용을 삭제하여 현재 2.2 업데이트의 수정 사항과 일치시키는 방안을 제안한다.
Swift에서 for-loop
를 제거하지 않아 언어를 간소화하고 불필요한 제어 흐름 요소를 제거할 기회를 놓쳤다.
Apple Swift 코드베이스를 검색한 결과, 이 기능은 거의 사용되지 않는다. Swift-Evolution 메일링 리스트의 커뮤니티 멤버들도 이 기능이 많은 프로급 앱에서 사용되지 않는다고 확인했다. 또한 for-loop
가 필요한 경우에도 대체 방법을 사용할 수 있다. 예를 들어:
char *blk_xor(char *dst, const char *src, size_t len)
{
const char *sp = src;
for (char *dp = dst; sp - src < len; sp++, dp++)
*dp ^= *sp;
return dst;
}
위 코드와 아래 코드를 비교해 보자.
func blk_xor(dst: UnsafeMutablePointer<CChar>, src:
UnsafePointer<CChar>, len: Int) -> UnsafeMutablePointer<CChar> {
for i in 0..<len {
dst[i] ^= src[i]
}
return dst
}
Github의 Swift gist를 검색한 결과, 이 접근 방식은 주로 언어에 익숙하지 않은 초보자들이 사용하며, 언어를 숙달하면 더 이상 사용하지 않는다. 예를 들어:
for var i = 0 ; i < 10 ; i++ {
print(i)
}
그리고
var array = [10,20,30,40,50]
for(var i=0 ; i < array.count ;i++){
println("array[i] \(array[i])")
}