Это заключительный урок данного цикла. Здесь я дам некоторые советы, которые помогут вам писать понятный, читаемый код.
Подстатья
15 133
30
EugeAl, если ты назвал функцию ships то сам себе злобный Буратина. Но адекватный пример придумать несложно - nearestShips это массив кораблей или функция по их получению?
Но именование функций с маленькой буквы это устоявшаяся практика, ничего зазорного в этом нет.
23
Во-первых, имена переменных начинаются с буквы в нижнем регистре. Если имя переменной состоит из одного слова, то это слово должно быть записано в нижнем регистре
...
Имена функций, как правило, начинаются с буквы в нижнем регистре
А как читающему кодеру отличать, например переменную ships (предположим, что она хранит текущее кол-во кораблей на карте) от функции ships (допустим, она спавнит группу кораблей на карту)?
Это ж действительно какой-то "ниндзя код" получается - ещё разбираться, что там после названия написано, а не сразу по названию понять.
С функциями в верхнем регистре таких проблем не будет...
24
Есть множество способов разделять области видимости - префиксы, модули, CRUD наборы функций, акцессоры, мутаторы, структуры.
Я с этим полностью согласен.
Но есть одна проблема.
Из всего перечисленного в скрипты Корсаров завезли только венгерскую нотацию.
И я ее рекомендовал только для глобальных переменных. Которых я вообще использовать не рекомендую.
Можно, конечно, без подчеркивания. Просто букву g. С доступными типами, в принципе, не пересекается 🤔
38
Венгерская нотация - это не только мусор и шум в коде, но еще и лишняя трата времени как на код, так и на рефакторинг.
Никогда не используйте венгерскую нотацию в типизированных языках
Есть множество способов разделять области видимости - префиксы, модули, CRUD наборы функций, акцессоры, мутаторы, структуры. Нет ни одной проблемы, которую бы решала эта нотация в долгосрочных перспективах
это моё личное мнение

Те, кто советует венгерскую нотацию, слишком мало рефакторил конструкции вида
g_myStruct.m_lpMySub.pszMyString
На новые типы данных

До статьи:
struct VectorNode {
  float x;
  float y;
  float z;
  PointNode * next;
}

VectorNode * nodes;

void VectorNodeInit(VectorNode * nodes, unsigned int count)
После статьи:
struct VectorNode {
  float fX;
  float fY;
  float fZ;
  PointNode * m_lpNext;
}

VectorNode * g_lpNodes;

void g_fnVectorNodeInit(VectorNode * lpNodes, unsigned int u32Count)

numberOfChars
Не правильно.
g_nNumberOfChars
30
avuremybe, это реальный боевой пример такого форматирования кода.
30
Используйте пробелы и пропуски строк между стейтментами для улучшения читабельности вашего кода:
Вот пример, к чему такое может привести.
Загруженные файлы
24
nazarpunk, предложи более корректную формулировку - я добавлю в статью.
30
Запускать приложение.
Задача любой другой функции поддерживать работоспособность приложения. Так что любая функция выполняет ровно одну задачу по такой логике.