Почему Objective-C считается простым языком? - PullRequest
0 голосов
/ 14 июля 2010

Я слышал, что Objective-C - это «простой» язык, то есть с точки зрения его языковых особенностей. Это действительно единственный язык, который я знаю, но раньше я немного занимался Java, и с точки зрения языковых возможностей они кажутся довольно близкими.

Я никогда не касался C ++. Есть ли в C ++ больше возможностей по сравнению с Objective-C, и если да, то является ли преимуществом работа с этим дополнительным набором функций?

1 Ответ

6 голосов
/ 14 июля 2010

Я никогда не слышал о Objective-C, описанном как «простой язык»; напротив, некоторые языковые возможности Objective-C, такие как динамическое связывание, категории и самоанализ, делают его довольно мощным языком.

Однако есть несколько причин, по которым этот язык может показаться менее функциональным, чем другие, в том числе:

  • Не было никакого сбора мусора (вообще говоря) до Apple Objective-C 2.0, до которой память в основном управлялась подсчетом ссылок; это отличается от языков, таких как Java, которые используют сборку мусора для всего управления памятью.
  • В Objective-C нет пространств имен; опять же, в отличие от других языков, таких как C ++. Соглашение состоит в том, что классы и функции должны иметь префикс, как можно видеть в Foundation, AppKit и т. Д., Которые имеют префикс NS -. Иногда это может быть недостатком.
  • Нет настоящих абстрактных классов. В Objective-C абстрактные классы являются только абстрактными по своему замыслу и могут быть созданы как есть, и не будут генерировать предупреждения или ошибки компилятора.
  • Оператор не перегружен. Это связано с характером среды выполнения Objective C и с тем, как работает диспетчеризация метода. Вместо этого методы, которые принимают разные типы аргументов, должны называться по-разному; это не обязательно может быть недостатком, поскольку часто может улучшить ясность кода.

Однако, несмотря на все это, Objective-C имеет некоторые довольно полезные функции, некоторые из которых прямо или косвенно являются результатом отсутствия определенных функций, которые могут иметь другие языки, такие как:

  • Использование описательных имен (из-за отсутствия перегрузки операторов) часто уточняет код и позволяет самодокументироваться во многих обстоятельствах.
  • Категории полезны для расширения классов, к которым у вас нет прямого доступа.
  • Динамическая диспетчеризация означает, что вы можете добавлять, изменять или удалять методы по своему усмотрению и обеспечивает мощный самоанализ классов.
...