Возвращаемый функцией тип может располагаться над именем самой функции
void
MyClass::myMethod(void)
{
:
}
Так функции выровнены в одну колонку.
6.2
84.
— Операторы следует отбивать пробелами.
— После зарезервированных ключевых слов языка C++ следует ставить пробел.
— После запятых следует ставить пробелы.
— Двоеточия следует отбивать пробелами.
— После точек с запятой в цикле for следует ставить пробелы.
a = (b + c) * d; // НЕ РЕКОМЕНДУЕТСЯ: a=(b+c)*d
while (true) // НЕ РЕКОМЕНДУЕТСЯ: while(true)
{
...
doSomething(a, b, c, d); // НЕ РЕКОМЕНДУЕТСЯ: doSomething(a,b,c,d);
case 100 : // НЕ РЕКОМЕНДУЕТСЯ: case 100:
for (i = 0; i < 10; i++) { // НЕ РЕКОМЕНДУЕТСЯ: for(i=0;i<10;i++){
...
Выделяет отдельные части выражений. Улучшает читаемость. Сложно дать всеобъемлющий набор рекомендаций относительно пробелов в языке C++. Рекомендации выше должны показать общие принципы.
85. После имён методов может идти пробел, если далее следует другое имя.
doSomething (currentFile);
Выделяет отдельные имена. Улучшает читаемость. Если далее нет никакого имени, пробел можно опускать (doSomething()).
Другим подходом является указание пробела сразу после открывающей скобки. Использующие его также обычно ставят пробел и перед закрывающей скобкой: doSomething( currentFile );. Это позволяет выделять отдельные имена; пробел перед закрывающей скобкой выглядит неестественно, но без него выражение выглядит несимметрично (doSomething( currentFile);).
Логические блоки в коде следует отделять пустой строкой.
Matrix4x4 matrix = new Matrix4x4();
double cosAngle = Math.cos(angle);
double sinAngle = Math.sin(angle);
matrix.setElement(1, 1, cosAngle);
matrix.setElement(1, 2, sinAngle);
matrix.setElement(2, 1, -sinAngle);
matrix.setElement(2, 2, cosAngle);
multiply(matrix);
Улучшает читаемость.
Методы рекомендуется отделять тремя пустыми строками.
Это позволяет лучше их выделять.
Переменные в объявлениях можно выравнивать.
AsciiFile* file;
int nPoints;
float x, y;
Улучшает читаемость. Чётче видны пары тип — переменная.
Используйте выравнивание везде, где это улучшает читаемость.
if (a == lowValue) compueSomething();
else if (a == mediumValue) computeSomethingElse();
else if (a == highValue) computeSomethingElseYet();
value = (potential * oilDensity) / constant1 +
(depth * waterDensity) / constant2 +
(zCoordinateValue * gasDensity) / constant3;
minPosition = computeDistance(min, x, y, z);
averagePosition = computeDistance(average, x, y, z);
switch (value) {
case PHASE_OIL : strcpy(phase, "Oil"); break;
case PHASE_WATER : strcpy(phase, "Water"); break;
case PHASE_GAS : strcpy(phase, "Gas"); break;
}
Есть множество случаев, когда код можно дополнительно выравнивать, даже если это нарушает установленные ранее правила.
6.3
90. Сложный код, написанный с использованием хитрых ходов, следует не комментировать, а переписывать!
Следует делать как можно меньше комментариев, делая код самодокументируемым путём выбора правильных имён и создания ясной логической структуры.
Все комментарии следует писать на английском.
В интернациональной среде английский — предпочтительный язык.
92. Используйте// для всех комментариев, включая многострочные.
// Комментарий, расположенный
// на нескольких строках.
Если следовать этой рекомендации, многострочные комментарии /* */ можно использовать для отладки и иных целей.
После // следует ставить пробел, а сам комментарий следует начинать писать с большой буквы завершать точкой.
Комментарии следует располагать так, чтобы они относились к тому, что они описывают.
while (true) { // НЕ РЕКОМЕНДУЕТСЯ: while (true) {
// Do something // Do something
something(); something();
} }
Это делается с тем, чтобы избежать ситуацию, когда комментарии нарушают логическую структуру программы.