deprecation of C++ style for loop and its replacements are…

New Features in Swift 2.2

Swift… 이거 참..
Telestream에서 일을 한 이래, 제대로 Objective-C/Cocoa에서 새로 나오는 것을 시도하거나, 심지어 Swift를 공부할 짬이 없었다. C#/.NET이나 C++도 마찬가지…
이전 회사들에선 퇴근하고서도 당연히 했고, 회사 내에서도 할 일 다하고, 추가로 더 알아보곤 했는데, 도대체 이 회사에선…
Cocoa에 대해서 알고 있던 것도 까먹고. 그래서들 미국 애들이 이런 회사에 지원을 안하나보다.

아무튼 투덜대는 것은 이만하고..
난  Swift가 도대체 마음에 들지 않는다.
Swift가 후져서가 아니라, 이건 순전히 마케팅에 의한 것이란 생각이 들기 때문이다.
GNU의 Objective-C 컴파일러를 들춰본 사람들은 얼마나 간략하게 Objective-C가 만들어져 있는지 안다. C++쪽은 별 이상한 짓을 해서라도 기능을 추가하는데, 굳이 몇가지 Objective-C의 단점을 들춰서 그걸 Swift를 합리화하는 건 뭐하지 않나? 문제가 있으면 고치면 되지 않나?

더군다나 Swift는 헷갈리는 면이 많다. 새로 언어를 배우는 어린 학생들이야 모르겠지만, 내겐 이 Swift는 어떤 면에선 Pascal, 어디선 C, 어디선 Perl 같은 느낌이 든다. Python을 하는 사람들은 Python 같은 부분도 있다고 한다.
일단 모드가 Pascal 모드로 바뀌면 Pascal 다워야 하고, C로 바뀌면 C 다워야 한다. 그래야 기억하기도 좋고 그렇지. 이건 순전히 잡탕같은 느낌이어서, 간만에 Swift 문서를 읽어서 익혀 두어도 나중에 기억이 잘 안난다. 왜? 파스칼 같으면 쭉 파스칼 같아야 하는데, 어느 순간 Perl 같다거나 그런식이기 때문이다.

그리고 2.2에서 새로 나온 문법을 보자.
다음의 코드를 보자

for var i = 0; i < 10; i++ {
    print(i)
}

이걸 이제 없애고 다음과 같이 바꾼다 한다.

for i in 0 .. < 10 {
    print(i)
}

이까진 좋다. Fast Enumeration 스타일이니까.

근데, 다음을 보자.

for i in (1...10).reverse() {
    print(i)
}

for i in 0.stride(to: 10, by: 2) {
    print(i)
}

저거 그냥 (10…1)로 못 만드나? 물론 reverse()도 지원하면서?
뭐 첫번재 예는 그렇다치자.
두번재 예..

저거.. 영어가 모국어인 사람은 0.stride(to..)가 와 닿을지 몰라도, 외국인들에겐 그렇지 않다. stride의 뜻이 그다지 강하게 다가오지 않기 때문이다.
단어의 뜻을 아는 것과, 그것이 얼마나 강하게 다가오느냐는 다른 문제이다.
stride?
Apple의 사전 앱에서 뜻을 보자.
1. 성큼 성큼 걷기. 활보
2. 한걸음, 한달음.

아.. 안다가온다.
이런게 낫지 않나?

for i in 0.increment(to: 10, by: 2) {
    print(i)
}

for i in 0.increment(to: 10, by: -2) {
    print(i)
}

두번째 것은 다음과 같은 동일 표현을 가질 수 있겠다.

for i in 10.decrement(to: 0, by: 2) {
    print(i)
}

Swift는 컴퓨터 언어에서의 cultural difference와 사람이 쓰는 언어에서의 cultural difference를 고려하지 않고 디자인되는 느낌이다.
이건 문제다. 그리고 내가 Swift를 좋아하지 않는 문제 중의 하나이다.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: