Твій обов'язок як програміста - економити час, ресурси і гроші. Ми вирішили поділитися зі світом важливими принципами чистого коду. Поїхали!
Основні принципи
Писати чистий код - як писати книгу: спочатку чернетка, а потім редагування до стану завершеності і легкої читабельності. Це гарантує, що наступному програмісту, що зіткнеться з твоєю роботою, не доведеться витрачати час на розшифровку вкладеного тобою сенсу.
- Осмислені імена. Якщо ім'я об'єкта не відповідає його функціоналу і призначенням, то його слід перейменувати в щось підходяще. Якщо це неможливо - значить, щось не так з функціоналом, і треба зробити рефакторинг.
- Повторне використання і гнучкість. Різні модулі додатку повинні легко повторно використовуватися в контексті одного проекту або легко переноситися в інший проект.
- Єдина відповідність. Будь-яка сутність повинна відповідати за один і тільки один функціонал. Само собою, що все повинно бути красиво і лаконічно описано.
- Простота. Код повинен бути таким, щоб через деякий час, відкривши його, ти зміг зрозуміти суть.
- Code review. Весь код кожного члена команди проходить через строгий аналіз (в ідеалі, командний) і QA-тестування до тих пір, поки не вирішаться всі спірні моменти або поки вони не будуть покриті TODO-коментарями.
- Далекоглядність і помилки. Пиши свій код з поглядом у майбутнє, щоб уникнути дорогих помилок і багів, викликаних пізніше в процесі розробки.
- Обслуговуваність. Це мало не найважливіший атрибут хорошого коду. Твоя писанина рано чи пізно буде переписана/дописана, так що немає необхідності ускладнювати цей процес.
- "Магічні числа" повинні бути поміщені в константи.
- Функції та аргументи. Функція не повинна приймати велику кількість аргументів. Якщо аргументів занадто багато, це може вказувати на необхідність ще однієї функції.
- Код повинен бути покритий тестами. Якщо ти почав рефакторинг або реалізацію нових фіч, а тестами покритий не весь код, є велика ймовірність появи помилки, яка дасть про себе знати згодом.
- Захист від потенційних вразливостей. Особливу увагу слід приділяти вразливостям коду, особливо коли він написаний без урахування його безпеки.
Тепер перейдемо до теорії, що уточнює деякі нюанси для кращого розуміння.
Функції
- Уникай передачі boolean в функцію. Це натяк на те, що код виконує кілька дій, а це недобре.
- Функції повинні або робити щось або відповідати на щось, а не одночасно обидва завдання. Це гарантує, що з часом не вилізуть приховані побічні ефекти. Наприклад, функція isPresent() повинна повертати тільки bool і нічого більше не виконувати.
- Для обробки виключень і для повернення коду помилок використовуй тільки блоки try-catch. Добре б взагалі винести все в окремий метод. Не змішуй даний код з іншим - це ускладнює його читабельність.
- Стережися вихідних аргументів. Функція повинна (якщо має) змінити стан свого батьківського об'єкта.
- Код завжди повинен бути розділений символом нового рядка, щоб об'єднати логічні блоки разом.
- Реалізація функції завжди повинна слідувати за її викликом.
- Не повертай значення null.
Об'єкти і структури даних
- Змінні повинні бути private, щоб можна було змінювати їх тип або реалізацію, коли це буде потрібно. Використовуйте геттери і сеттери.
- Приховування реалізації. Не слід розкривати деталі даних, а скоріше висловлювати дані у вигляді абстрактних термінів.
Коментарі
- Дійсно хороший коментар - це коментар, в наявності якого немає необхідності.
- Не використовуй коментар, якщо можна придумати гарне і зрозуміле ім'я для функції або змінної.
- Будь-який коментар, що змушує шукати сенс в іншому шматку коду або модулі, не повинен існувати.
Тести
Існує п'ять принципів тестування - F.I.R.S.T. Розшифровується це так:
- Fast (Швидкість): тести повинні виконуватися швидко, інакше їх ніхто не буде запускати.
- Independent (Незалежність): тести не повинні залежати один від одного. Один тест не повинен створювати умови для наступного. Ти повинен мати можливість запускати кожен тест незалежно і в будь-якому порядку.
- Repeatable (Повторюваність): тести повинні бути повторюваними в будь-якому середовищі - в продакшені, в середовищі QA і на ноуті в метро без мережі.
- Self-Validating (Самоперевірка): тести повинні мати висновок типу boolean. Або вони проходять, або зазнають невдачі. Для того щоб дізнатися результати, не потрібно лізти в файлик журналу.
- Timely (Своєчасність): тести повинні бути написані своєчасно.
Проектування
- KISS: Keep It Simple Stupid . Уникай непотрібної складності. Питання, який потрібно задати в процесі кодингу: "Чи можна це написати простіше?"
- DRY: Do not Repeat Yourself. Результатом роботи цього принципу є відсутність необхідності внесення змін до інших, логічно не пов'язаних елементів, при зміні єдиних елементів системи.
- YAGNI: You Are not Gonna Need It. Суть принципу - відмова від створення надлишкового функціоналу, в якому на даний момент немає необхідності.
- Композиція краще успадкування. Складний для розуміння принцип, але все ж. Класи повинні досягати поліморфної поведінки і повторного використання коду шляхом їх композиції (шляхом утримання примірників інших класів, що реалізують бажану функціональність), а не успадкування від базового або батьківського класу.
- Читабельність. Питання вже піднімався вище, але слід повторитися. При роботі над проектом (особливо в команді), завжди віддавай перевагу читабельності над лаконічністю.
0 комментариев
Добавить комментарий