먼저 Visual / Real Basic에서 프로그래밍을 시작한 다음 Java로 이동했기 때문에 점 구문에 상당히 익숙합니다. 그러나 마침내 Objective-C로 옮겨 대괄호에 익숙해 졌을 때 Objective-C 2.0의 도입과 도트 구문을보고 정말 마음에 들지 않는다는 것을 깨달았습니다. (다른 언어의 경우 괜찮습니다.
Objective-C에는 점 구문이있는 세 가지 주요 쇠고기가 있습니다.
쇠고기 # 1 : 오류가 발생하는 이유가 명확하지 않습니다. 예를 들어 다음과 같은 줄이있는 경우 :
something.frame.origin.x = 42;
그런 다음 something은 객체 이기 때문에 컴파일러 오류가 발생 하고 객체의 구조체를 표현식의 lvalue로 사용할 수 없습니다. 그러나 다음과 같은 경우 :
something.frame.origin.x = 42;
그런 다음 somethingNSRect 멤버가있는 구조체 자체 이므로 잘 컴파일 되며 lvalue로 사용할 수 있습니다.
이 코드를 채택했다면, 무엇인지 알아 내기 위해 시간을 할애해야 할 것 something입니다. 구조체입니까? 개체입니까? 그러나 대괄호 구문을 사용하면 훨씬 더 명확 해집니다.
[something setFrame:newFrame];
이 경우 something객체인지 아닌지 에 대한 모호성은 전혀 없습니다. 모호함의 도입은 내 쇠고기 # 1입니다.
Beef # 2 : C에서 점 구문은 메서드를 호출하는 것이 아니라 구조체의 멤버에 액세스하는 데 사용됩니다. 프로그래머는 개체 의 setFoo:및 foo메서드를 재정의 할 수 있지만 something.foo. 내 생각에 점 구문을 사용하는 표현식을 볼 때 나는 그것들이 ivar에 대한 간단한 할당이 될 것으로 기대하고 있습니다. 항상 그런 것은 아닙니다. 배열과 테이블 뷰를 중재하는 컨트롤러 객체를 고려하십시오. 을 호출 myController.contentArray = newArray;하면 이전 배열을 새 배열로 대체 할 것으로 예상됩니다. 그러나 원래 프로그래머 setContentArray:는 배열을 설정할뿐만 아니라 테이블 뷰를 다시로드하도록 재정의했을 수 있습니다 . 라인에서 그 행동의 징후는 없습니다. 내가 본다면[myController setContentArray:newArray];, 그러면 "아하, 방법입니다.이 방법이 무엇을하는지 알고 있는지 확인하기 위해이 방법의 정의를 확인해야합니다."
따라서 Beef # 2에 대한 요약은 사용자 지정 코드로 점 구문의 의미를 재정의 할 수 있다는 것입니다.
쇠고기 # 3 : 안 좋은 것 같아요. Objective-C 프로그래머로서 저는 구문을 괄호로 묶는 데 전적으로 익숙합니다. 따라서 함께 읽고 아름다운 괄호의 줄과 줄을보고 갑자기 foo.name = newName; foo.size = newSize;등으로 깨지는 것은 나에게 약간 산만합니다. 어떤 것에는 점 구문 (C 구조체)이 필요하다는 것을 알고 있지만 그게 제가 사용하는 유일한 시간입니다.
물론 자신을 위해 코드를 작성하고 있다면 편한 것을 사용하십시오. 그러나 오픈 소싱을 계획중인 코드를 작성하거나 영원히 유지하지 않을 것으로 예상되는 코드를 작성하는 경우 대괄호 구문을 사용하는 것이 좋습니다. 물론 이것은 제 의견입니다.
점 구문에 대한 최근 블로그 게시물 : http://weblog.bignerdranch.com/?p=83
위 게시물에 대한 반박 : http://eschatologist.net/blog/?p=226 (점 구문을 선호하는 원본 기사 포함 : http://eschatologist.net/blog/?p=160 )