2010-07-14 2 views
0

Objective-C는 '단순한'언어, 즉 언어 기능면에서 그렇다고 들었습니다. 제가 아는 유일한 언어지만, 자바의 비트를하기 전에, 언어 기능면에서 꽤 가까운 것 같습니다.Objective-C가 왜 단순한 언어라고 생각하나요?

나는 C++을 한번도 읽지 않았습니다. Objective-C에 비해 C++에 더 많은 기능이 있습니까? 그렇다면이 추가 기능 세트로 작업하는 것이 유리합니까?

+0

C++ 및 Java와 같은 고급 언어에 대해 많이 알지 못하기 때문에 누군가에게 매우 철저한 설명이있을 것으로 확신하므로 대답으로 게시하고 싶지는 않지만 그것이 언어 적 특징이라면 그들은 정말로 떨어져 있습니다. 마음에 오는 첫 번째 사항은 네임 스페이스와 연산자 오버로드입니다. 거의 모든 고급 언어에는 Objective-C가 없지만 이러한 언어가 있습니다. 그래도 꽤 멋진 언어입니다. 특히 오래된 메서드 호출 대신 객체 메시징과 같은 작은 토큰에서 빌린 규칙 덕분입니다. –

+0

감사합니다. 네임 스페이스와 과부하에 대해 읽어 보겠습니다. '꽤 굉장한 언어'- 동의했다. – Remover

+0

C++ 템플릿만으로는 전체 objc 언어가 더 복잡해졌습니다. 언어의 복잡성을보고 컴파일러의 관점에서 구현/지원을 고려한다면. – justin

답변

6

나는 '간단한 언어'로 묘사 된 Objective-C에 대해 들어 본 적이 없다. 반대로 Objective-C의 언어 기능 중 일부는 동적 바인딩, 범주 및 내부 분석과 같이 강력한 언어입니다.

그러나 덜 다양한 기능을 포함하여, 다른 사람보다 언어로 볼 수있는 몇 가지 이유가 있습니다 : 있었다

  • 애플의 목표 - C까지 가비지 수집하지 않습니다 (일반적으로) 2.0 이전에는 메모리가 주로 참조 카운팅에 의해 관리되었습니다. 이것은 모든 메모리 관리를 위해 가비지 콜렉션을 사용하는 Java와 같은 언어와 다릅니다.
  • Objective-C에는 네임 스페이스가 없습니다. 다시 이것은 C++ 같은 다른 언어와는 다릅니다. 컨벤션은 Foundation, AppKit 등에서 볼 수 있듯이 접두어가 붙는 클래스와 함수가 접두어로 붙는 것입니다. 접두사는 NS -입니다. 이것은 때로는 단점이 될 수 있습니다.
  • 실제 추상 클래스가 없습니다. Objective-C에서 추상 클래스는 설계 상 추상화 된 것이며 여전히 그대로 인스턴스화 될 수 있으며 컴파일러 경고 또는 오류를 생성하지 않습니다.
  • 운영자 과부하가 없습니다. 이것은 Objective-C 런타임의 특성과 메소드 디스패치의 작동 방식 때문입니다. 대신, 다른 인수 유형을 취하는 메소드의 이름을 다르게 지정해야합니다. 이것이 종종 코드의 명확성을 향상시킬 수 있기 때문에 반드시 불리한 것은 아닙니다.

      :이 모든에도 불구하고 그러나

  • 은, 오브젝티브 C는 직접 또는 간접적으로 같은 다른 언어가 가질 수있는 특정 기능의 부족의 결과 중 일부는 다소 유용한 기능을 가지고 있습니다
  • 연산자 오버로딩이 없기 때문에 설명적인 이름을 사용하면 코드를 명확히하고 많은 경우 상황에 따라 자체적으로 문서화 할 수 있습니다.
  • 카테고리는 직접 액세스 할 수없는 클래스를 확장하는 데 유용합니다.
  • 동적 전달은 원하는대로 메서드를 추가, 변경 또는 제거 할 수 있으며 클래스에 대한 강력한 내성을 제공한다는 것을 의미합니다.
+0

많은 감사드립니다. 나는 그 요점들 중 일부를 읽을 것이다. 필자는 긴 메소드 이름의 규칙이 자신을 문서화하는 방법에 유용하다는 데 동의합니다.처음 엔 어색해 보였지만 'parseNamesInDictionaryAndPutInOtherDictionary'라는 느낌으로 들어갔다. – Remover

관련 문제