Каково значение начальных констант с 'k'? - PullRequest
21 голосов
/ 01 февраля 2009

Я учу себя Objective-C, и я заметил во многих книгах и примерах использование 'k' и верблюжьей оболочки в постоянном определении, например

#define kMyConstant 0

Какое значение имеет «к»? Это уникальный стиль Objective-C или общий для C в целом? Почему отклонение от (что я всегда считал лучшей практикой) стиля K_MY_CONSTANT?

Спасибо.

Ответы [ 4 ]

23 голосов
/ 01 февраля 2009

Это уже упоминалось в вопросе SO, Строчная буква "k" в Какао .

Это общая нотация программирования не является специфическим для Objective-C (т.е. Венгерская нотация) и «к» означает «постоянный».

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

Имена констант (#defines, enums, локальные переменные const и т. Д.) Должны начинаться со строчной буквы k, а затем для разделения слов использовать смешанный регистр, т.е. kInvalidHandle, kWritePerm.

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

Но с тех пор он был удален в живой версии документа. Следует отметить, что он идет вразрез с Официальным руководством по кодированию для какао от Apple.

3 голосов
/ 01 февраля 2009

Я думаю, что использование ведущего "k" связано с тем, что все языки произносят его как жесткий согласный и, таким образом, оно напоминает людям о английском произношении "constant": -)

Никакие зарезервированные слова не начинаются с k, так что это проще для поиска.

В качестве альтернативы, с графической точки зрения, в качестве ведущего символа он предоставляет очень четкий флаг перед остальной частью имени. Начальная буква «с» менее очевидна и может использоваться для обозначения ролей (например, в венгерской нотации) или классов (если используется язык без учета регистра).

MY_CONSTANT довольно хорошо согласован для констант на основе макросов. Иногда важно знать, что константа определяется макросом, например, что подразумевает, что она основана на литералах и, следовательно, на ограниченном диапазоне типов данных, а также определяется в глобальной области и, следовательно, (как указывал Майкл Берр) out) переопределяет любые локальные константы пространства имен.

3 голосов
/ 01 февраля 2009

kMyConstant восходит к очень старым дням программирования на Mac (80-е / 90-е годы были "очень старыми"). Это был стандарт Apple, используемый многими программистами Mac; это заменило определения типа MY_CONSTANT.

Я полагаю, что авторы, которых вы читаете, были программистами Mac Pascal / C для старой Mac Toolbox до того, как стали программистами NeXT / Cocoa. Библиотеки Mac раньше назывались «Toolbox» - это был набор API и библиотек, которые со временем превратились в Carbon.

Я до сих пор иногда использую kMyConstant; сводит с ума моих старых школьных Unix-программистов. : -)

3 голосов
/ 01 февраля 2009

Все заглавные буквы (как в K_MY_CONSTANT) обычно обозначают макрос - не обязательно константа. Обычно важно, чтобы макросы выделялись, потому что они загромождают все пространства имен.

Соглашение 'k' используется (но не универсально) для не-макроконстант в C / C ++ и, возможно, в других языках. Я подозреваю, что k используется, потому что c уже часто используется - либо для обозначения имени класса (как в CString), либо для того, что переменная является счетчиком.

...