- •Правило #0, про коментарі
- •Правило #1, про кількість операторів в рядку
- •1. Кількість операторів на рядку повинно бути дорівнює 1.
- •2. Слово var пишеться на окремому рядку.
- •4. Слова begin і end
- •Правило #2, про горизонтальні відступи
- •1. Намагайтеся помістити функцію в екран
- •2. Використовуйте табуляцію замість пробілів.
- •Правило № 4, про горизонтальні відступи
- •Правило #3, про операторні дужки
- •Правило #5, про вертикальні пробіли (порожні рядки)
- •Правило № 6, про оголошення змінних
- •Правило #7, про що говорять ідентифікатори
- •Правило #8, про ініціалізацію масивів
- •Правило #9, про функції/процедури
- •Правило #10, про помилки та ще дещо про що
- •Правило #11, дані про
- •Правило #12, про умову
Правило #5, про вертикальні пробіли (порожні рядки)
Не шкодуйте порожні рядки, вставляйте де вам хочеться, пошкодуйте краще себе і викладача. Обов'язкові порожні рядки перед і після визначень функцій. Логічні частини функції теж потрібно відокремлювати один від одного порожнім рядком, наприклад, цикл від попередніх або наступних операторів.
Невірно:
int func_1(void)
{ return 1;
}int func_1(void)
{ return 2;
}
int void main () {
LIST *l = get_head();double a, b;printf("Hello\.n");
for (l;l->next;l=l->next)
printf("%s\n", l->name);
};printf("Bye.\n");}
Правильно:
int func_1(void)
{
return 1;
}
int func_1(void)
{
return 2;
}
int main(void)
{
LIST *l = get_head();
double a, b;
printf("Hello\.n");
for (l; l->next; l = l->next)
printf("%s\n", l->name);
printf("Bye.\n");
}
Логічні блоки потрібно для ясності розділяти одним вертикальним відступом (тобто одній порожнім рядком). До таким логічним блокам можна, приміром, віднести блок підключення заголовних файлів, блок оголошення змінних, блоки операторів вибору і циклів, функції і так далі.
Правило № 6, про оголошення змінних
Тип у змінної писати для КОЖНОЇ з них. В одному рядку - одна змінна. Невірно: int a,b,c; float *q,w,u,z,tmp,ttt,qqq,aaa,bbb; ........ a,b,c,d,ttt,test,tt0: integer; q,w,u,z,ppp,ddd,ddd0,ddd23: real; Правильно: int a; int b; int c; float *q; ........ a: integer; b: integer; c: integer; q: real; Це правило викликає найбільше здивування. Однак, його дотримання робить текст більш ясним і, крім того, в процесі розробки при виникненні необхідності видалити опис якої змінної це можна зробити одним натисканням (команда видалити рядок), а не багаторазовим натисненням Del чи Backspace. Втім, якщо, наприклад, у програмі є подвійний цикл for(), то керуючі змінні циклу можна описати на одному рядку: int j,k; int counter; Однак, описания змінних, сильно розрізняються за змістом умісту, слід поміщати на різних позиціях. Використовуйте інформаційні назви функцій і змінних. Відмовтеся від змінних типу kkk, або функцій начебто gdfui(), краще уведіть довгу назву getDoubleFromUnsignedInt(), зате відразу буде зрозуміло, що відбувається. При певному розмірі програми використання неінформативних імен функцій і змінних взагалі зробить неможливим подальшу розробку. Один хлопець, абітурієнт, показував нам програму на асемблері, багату змінними kkk, mrstb, g, _g. Прога на асемблері була величезна, як він розбирався у всій своїй писанини для мене до цих пір залишається загадкою (але хлопець був дуже розумним, треба сказати .
Правило #7, про що говорять ідентифікатори
Ідентифікатори (назви змінних, типів, підпрограм) повинні бути значущими настільки, щоб читаючи текст програми можна було розуміти сенс усіх змінних і т.д. без присутності поруч автора. Читає може виявитися і сам автор ... десь так через півроку. І буде боляче згадувати, що означало "ffff_1" і "aaa". Якщо немає ідеї, назвіть ееDeriv, Proizvod, але ніяк не FF. Всі об'єкти програми повинні бути названі обґрунтованими іменами, що говорять про призначення того або іншого об'єкту. counter, increment - лічильник name, lastName - ім'я, прізвище phone - телефон city - місто Не використовуйте в якості доменів функцій російські слова, написані транслітом. Це особисто моє побажання. Я переконаний, що назви типу risuemKrug() некрасиві, на відміну від drawCircle(), наприклад. Назви з використанням англійських слів будуть нормально сприйняті будь-яким програмістом, на відміну від використання русиш неймінг. Навіть якщо ви не припускаєте, що будь хто ще буде дивитися ваш код, все одно слідуйте цим правилом. Гарним тоном буде іменування англійськими словами. Якщо ви не можете якесь слово перевести, тобто безліч онлайн-перекладачів, за допомогою яких всього за кілька секунд ви виконаєте переклад і назвете об'єкт правильно, заодно і англійську мову підучите. Неправильно - правильно matrica - matrix stroka - str razmer - size maksimum - maximum, max parametr - value Константи рекомендується писати у верхньому регістрі. SIZE, POINT, BOOK Для іменування змінних потрібно використовувати іменники, а для іменування функцій дієслова (або дієслово + іменник), оскільки це дія. Приклад функцій playSong() printArray() readString() При іменуванні методів класів і функцій, які повинні повертати значення, використовують префікс get(отримати). Для тих, які встановлюють, використовують set (встановити) getTime(); setTime(); Верблюжа нотація Вище ми розглядали прості імена об'єктів. Досить часто потрібно іменувати об'єкт за допомогою складних слів. У цьому випадку використовують "верблюжу нотацію" (запис нагадує горби верблюдів). У цьому випадку, кілька слів або їх скорочень пишуться злито без пропусків, але при цьому кожне слово починається з великої літери. Нижче приклади lastName userName copyText() firstTimer mySecondBook Угорська нотація В основі угорської нотації лежить додавання спеціальних префіксів на початку імені того або іншого об'єкту. Ці префікси зазвичай говорять про тип створюваного об'єкта. Угорська нотація не входить в стандарти мови, тому використовувати її чи ні, це ваша особиста справа. А я лише коротко розповім про основні тобто префікс string sLastName; int nBook, iMonth; bool bState; int* pCell, ptrRow; class CWocker; void vPrintMatrix();
