Обновить

Комментарии 13

В этой статье мы рассмотрели несколько наиболее распространенных ошибок начинающих разработчиков С++. 

Лично мне было бы чрезвычайно интересно посмотреть на код настоящих профессионалов и послушать их истории про то, что им им что-то помогло, а что-то не очень.

Ну я вот я скептически отношусь к критике глобальных переменных, потому что попытка написать «приложение для всего» в любом случае превращается в слабоотлаживаемую кашу. А если разбить его на кучу отдельных бинарников, связанных общим фреймворком (самописным, под данный круг задач), и каждому назначить одну производственно-диагностическую операцию (Рюриковичи приборостроители мы) — глобалы в таких плагинах вполне уместны. Он сам, по сути, функция :) и его глобалы не сказать чтоб очень глобальны…

Но если архитектура не сложилась и её нельзя привести к чему-то стройному, то это тоже превращается в кашу, а фреймворк — в надстройку над компилятором, не делающую ничего полезного и просто лишний раз запутывающую взаимодействие. В это я тоже влипал :)

Бледно.

Об именах переменных: не используйте что-либо вне ASCII-набора, даже если среда это позволяет (потому что нынче она, к сожалению, иногда позволяет). Отладка путаницы между int cap и int сар согреет вашу пятую точку как мало что другое.

Обращайте внимание на предупреждение "name XXX hides outer variable". C++ позволяет дублирование имён во вложенных блоках:
int a = 2;
for(int b = 0; b < a; ) {
int a = 17;
//...
--a;
}

- но это почти никогда не идёт на пользу читаемости программы.

Если вы таки-используете глобальные переменные, называйте их уникальным образом, чтобы при чтении было очень хорошо видно, что вот здесь модифицируется глобальная переменная.
Аналогичный совет относится к статическим переменным в функциях/методах и данным-членам классов.

Разделяйте имена переменных и функций (скажем, одни с маленькой буквы, другие с большой), потому что в C++ они умеют конфликтовать.

Либо не используйте макросы вообще, либо давайте им визуально отличные от всего остального имена (обычное соглашение - ИСПОЛЬЗОВАТЬ_КАПС). Имя макроса может быть распознано в совершенно любом контексте и результат способен порождать очень озадачивающие сообщения компилятора.
(Да, старайтесь не включать windows.h по крайней мере в заголовочных файлах, эта падла определяет тонну макросов, иногда с очень неудачными именами.)

Называйте переменные и функции по тому, что они представляют, а не потому, как они реализованы:
bool IsLessThanMinusTen(int number) {return number <= -10;} // плохо
bool IsLethalHP(int hp) {return hp <= -10;} // лучше

Хотя имена могут быть слишком длинными, на современных мониторах "строка не влезает в экран" - отчётливый признак того, что вы делаете что-то кошмарно не то. Найдите в настройках среды визуализацию вертикальной линеечки и выставьте её на какую-нибудь разумную ширину. Есть люди которые рекомендуют 80, на мой вкус это бывает слишком коротко, я предпочитаю 120 (это удачно совпадает со строкой, которая не переносится в интерфейсе нашего gitlab при сравнении side-by-side).

Называйте переменные и функции по тому, что они представляют

Воистину. Вот это прямо в точку. КАК функция делает своё дело — по ней самой понятно. А название должно отвечать на вопрос, накукуя она вообще это делает :-D

Стиль написания вещь на которую многие увы забивают.

Для себя всегда пишу так:

#define MACROS - заглавными буквами.

Int g_nGlobalValue - в начале пишу g потом нижнее подчёркивание, потом тип данных условно n - number, s - string, p - pointer и т.д. и потом название того, что она в себе содержит, при этом каждое слово начиная с большой буквы.

Члены классов или структур оформляю похоже.

m_nMemberValue.

Считаю, что это красиво, удобно и читаемо.

Записывать тип в имя это лишний шум, если работаешь в IDE. Все эти pwsz и прочая срань только отвлекают.

применимо, в целом-то, не только лишь к С++)

При чем тут C++...

Вы что, cout не заметили? /s

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

Статья ни-о-чем. По сути то, что должны знать даже самые наизеленейшие новички. И в материале о С++ ничего нет. Хотелось бы конкретных примеров из реальных проектов, как вот PVSку развивают и освещают занятные случаи или по игровым движкам - узкие места, утечки памяти, проблемы указателей, может что-то из эмбеда. Статей для новичков пруд пруди. А вот собрать с десяток С++ курьёзов с разбором, вот это бы народ с удовольствием почитал.

Про имена переменных:

1. Чем идеоматичнее часть, которую вы пишете - тем короче имена переменных, чем "задаче-специфичнее" код, тем длиннее
2. Чем локальнее время жизни переменной - тем короче имя (т.к. один раз прочитав g /* guess */ в течении 5 минут читающий способен это помнить.

Дальше статью читать не стал. Если она настолько поверхностна - не стоит тратить на неё своё время.

Полностью согласен по первому пункту, счётчики по жизни i j k, минимум-максимум внутри небольшой функции часто m и M… но только внутри небольшой. Это прямо по второму пункту в десяточку. По третьему — не согласен, такие статьи часто порождают ценные камменты типа Вашего :) А первые два — всё так.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS