Подтвердить что ты не робот

Соглашения об именах переменных экземпляра в Cocoa

Этот вопрос касается стиля именования переменных в объектах c и cocoa. Я просто хочу подчеркнуть, что я не ищу "правильный" ответ, просто хорошие идеи.

Я прочитал руководства по стилю Apple и Google в стиле c, и я не очень доволен ни одним из них. В руководстве Apple нет рекомендаций по реальному стилю относительно переменных экземпляра и локальных переменных. Фактически, библиотека Cocoa сама по себе выглядит совершенно счастливой, имея функциональные параметры с тем же именем, что и переменные экземпляра. Это заставляет меня съеживаться лично.

В руководстве Googles указано, что переменные экземпляра должны быть указаны с завершающим подчеркиванием. Хорошо, все хорошо и хорошо, но это говорит о том, что мы затем синтезируем каждую публичную собственность с помощью @synthesize property = property_. Я не знаю ни о ком другом, но я буду проклят, если я собираюсь сделать это для каждой переменной экземпляра в моем проекте. Я считаю это расточительным и запутанным решением.

Я испытываю соблазн пойти с стилем наименования myX (например, "myInstanceVariable" ) для свойств объекта, но я редко видел этот стиль в объекте c.

Итак, что вы используете? Любые соглашения о стилях, которые я не знаю о том, что вы нашли полезными? Считаете ли вы, что параметры функции с тем же именем, что и переменные экземпляра, опасны, особенно в нескольких средах разработчиков? Спасибо, парни и девушки!

ПРИМЕЧАНИЕ. Как и многие люди, моя терминология была отключена в ОП. Извините, если оригинальная формулировка повредила ясность, но я думаю, что этот вопрос все еще был ясен.

4b9b3361

Ответ 1

Я предпочитаю использовать не префиксные имена экземпляра переменной (обратите внимание, что "переменная-член" является С++-ism, поскольку она наводит на мысль о том, что структуры и классы в основном взаимозаменяемы, что не имеет места в Objective-C), и в тех случаях, когда возникает неоднозначность, я использую соглашение Smalltalk о присвоении имени параметру его типом с помощью "a" или "an", например:

- (void)setFoo:(SOFoo *)aFoo;
{
    foo = aFoo;
}

(конечно, в современном ObjC вы использовали бы свойство для этого.)

Использование theFoo вместо aFoo также довольно часто; см. ответы на этот вопрос.

Соглашение Google имеет смысл, если вы действительно беспокоитесь о конфликтах. Если вы используете текстовый макрос Xcode или инструмент, например Словарь завершения или Accessorizer для создания ваших директив, это довольно просто принять.

Обратите внимание, что Cocoa правила кодирования значения ключа в значительной степени предполагают, что (а) вы не префикс/суффикс вашей переменной экземпляра имена или (b) вы реализуете (или синтезируете) не префикс/суффикс-аксессоры для них. Как уже упоминалось, не используйте префикс _; он зарезервирован для использования Apple в их рамках.

Ответ 2

Во-первых: в Objective-C нет "переменных-членов", есть "Переменные экземпляра" или "ivars".

Google не является никаким видом полномочий при кодировании Objective-C или Mac. Google Earth - это приложение Qt: "сказал он.

Кажется, я помню, как официальный стиль руководства по кодированию от Apple для Objective-C, который я не нахожу в данный момент. Эта статья является довольно хорошим резюме, хотя:

http://cocoadevcentral.com/articles/000082.php

Нашел! Здесь официальные инструкции Apple по кодированию для Cocoa:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

Ответ 3

В Cocoa стиль должен иметь pascalCased (или это имена camelCased? Я никогда не помню); и иметь переменные-члены как те же, что и методы доступа. (Например, NSInteger anInteger, - anInteger и - setAnInteger:).

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

Ответ 5

m_variableName довольно распространен для переменных-членов. Лично, большую часть времени я просто перехожу с тем же именем для обеих переменных и делаю различие между this.varname и varname.