Как понять синтаксис сообщения с несколькими аргументами в Objective C? - PullRequest
1 голос
/ 16 августа 2010

Я знаю, что Цель C использует «чередующиеся аргументы», и это сделано специально.

Но я хочу знать, почему вы думаете, что жизнь облегчает объединение имени первого аргумента с именем сообщения.См. Ниже:

Правильно: [myRectangle setOriginX: 30.0 y: 50.0]
вместо
Неправильно: [myRectangle setOrigin x: 30.0 y: 50.0]

[receiver message argument1:value1 argument2:value2...] <<< это не более понятный и интуитивно понятный для васребята? </p>

Ответы [ 3 ]

4 голосов
/ 16 августа 2010

Пытаясь найти кратчайший ответ:

Да:)

3 голосов
/ 16 августа 2010

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

Это также проще, потому что синтаксис сообщений Objective-C был получен из Smalltalk, который использовал точно такой же способ работы с селекторами (хотя это не был препроцессор для C), так что это нулевое изменение по сравнению с синтаксисом Smalltalk.

Похоже, вы спрашиваете, почему Objective-C не взял свои дизайнерские подсказки от языков, которые вошли в моду много десятилетий спустя. Ответ будет: потому что они еще не были вокруг. (Я не уверен, что к тому времени аргументы ключевых слов были распространены в Лиспе, но их не было в большинстве языков программирования.)

2 голосов
/ 16 августа 2010

Я думаю, что вы пытаетесь понять цель-c, связывая это с языками программирования ООП, такими как Java или C ++, которые я не рекомендую. С течением времени вы поймете и понравится подход Objc, мне потребовалось 6 месяцев, чтобы по-настоящему насладиться им, а теперь я наслаждаюсь только разработкой ObjC: с.
Во всяком случае человек ObjC. говорит следующее:

Фактическое название метода (insertObject: atIndex :) является объединение всех подписей ключевые слова, включая символы двоеточия. Символы двоеточия объявляют наличие параметра. Если метод не имеет параметров, вы пропустите двоеточие после первой (и единственной) подписи ключевое слово. В этом примере метод принимает два параметра.

Источник: Методы и обмен сообщениями


Редактировать
Способ именования его методами в ObjC, мне он больше нравится, потому что мне не нужно думать о имени метода, а о том, какие сообщения («представленные другими объектами») я хочу отправить объекту A чтобы я получил от нее то, что хочу;

NSArray *list = [object_a fromCategory:@"Literature" authorsStartingWith:@"Em"];


или же

NSArray *list2 = [object_a fromCategory:@"Literature" authorsStarginWith:@"EM" fromCentury:@"16"]



Попробуйте использовать естественный язык и переведите сообщение в object_a, что-то вроде: «Эй, возьми, дай мне из категории« Литература », все авторы, начинающиеся с« em »и принадлежащие к cetury 16» - это сообщение - вам не нужен отдельный метод Name - все вместе можно рассматривать как имя метода ( как говорит мужчина).
Теперь вы понимаете, насколько элегантен и понятен ObjC способ сделать то, что вы называли «перегрузкой методов»?

...