Безсмертні best practices в програмуванні на будь-якій мові

  • 20 декабря, 15:33
  • 4344
  • 0

Твій обов'язок як програміста - економити час, ресурси і гроші. Ми вирішили поділитися зі світом важливими принципами чистого коду. Поїхали!

Безсмертні best practices в програмуванні на будь-якій мові

Основні принципи

Писати чистий код - як писати книгу: спочатку чернетка, а потім редагування до стану завершеності і легкої читабельності. Це гарантує, що наступному програмісту, що зіткнеться з твоєю роботою, не доведеться витрачати час на розшифровку вкладеного тобою сенсу.

  1. Осмислені імена. Якщо ім'я об'єкта не відповідає його функціоналу і призначенням, то його слід перейменувати в щось підходяще. Якщо це неможливо - значить, щось не так з функціоналом, і треба зробити рефакторинг.
  2. Повторне використання і гнучкість. Різні модулі додатку повинні легко повторно використовуватися в контексті одного проекту або легко переноситися в інший проект.
  3. Єдина відповідність. Будь-яка сутність повинна відповідати за один і тільки один функціонал. Само собою, що все повинно бути красиво і лаконічно описано.
  4. Простота. Код повинен бути таким, щоб через деякий час, відкривши його, ти зміг зрозуміти суть.
  5. Code review. Весь код кожного члена команди проходить через строгий аналіз (в ідеалі, командний) і QA-тестування до тих пір, поки не вирішаться всі спірні моменти або поки вони не будуть покриті TODO-коментарями.
  6. Далекоглядність і помилки. Пиши свій код з поглядом у майбутнє, щоб уникнути дорогих помилок і багів, викликаних пізніше в процесі розробки.
  7. Обслуговуваність. Це мало не найважливіший атрибут хорошого коду. Твоя писанина рано чи пізно буде переписана/дописана, так що немає необхідності ускладнювати цей процес.
  8. "Магічні числа" повинні бути поміщені в константи.
  9. Функції та аргументи. Функція не повинна приймати велику кількість аргументів. Якщо аргументів занадто багато, це може вказувати на необхідність ще однієї функції.
  10. Код повинен бути покритий тестами. Якщо ти почав рефакторинг або реалізацію нових фіч, а тестами покритий не весь код, є велика ймовірність появи помилки, яка дасть про себе знати згодом.
  11. Захист від потенційних вразливостей. Особливу увагу слід приділяти вразливостям коду, особливо коли він написаний без урахування його безпеки.

Тепер перейдемо до теорії, що уточнює деякі нюанси для кращого розуміння.

Функції

  1. Уникай передачі boolean в функцію. Це натяк на те, що код виконує кілька дій, а це недобре.
  2. Функції повинні або робити щось або відповідати на щось, а не одночасно обидва завдання. Це гарантує, що з часом не вилізуть приховані побічні ефекти. Наприклад, функція isPresent() повинна повертати тільки bool і нічого більше не виконувати.
  3. Для обробки виключень і для повернення коду помилок використовуй тільки блоки try-catch. Добре б взагалі винести все в окремий метод. Не змішуй даний код з іншим - це ускладнює його читабельність.
  4. Стережися вихідних аргументів. Функція повинна (якщо має) змінити стан свого батьківського об'єкта.
  5. Код завжди повинен бути розділений символом нового рядка, щоб об'єднати логічні блоки разом.
  6. Реалізація функції завжди повинна слідувати за її викликом.
  7. Не повертай значення null.

Об'єкти і структури даних

  1. Змінні повинні бути private, щоб можна було змінювати їх тип або реалізацію, коли це буде потрібно. Використовуйте геттери і сеттери.
  2. Приховування реалізації. Не слід розкривати деталі даних, а скоріше висловлювати дані у вигляді абстрактних термінів.

Коментарі

  1. Дійсно хороший коментар - це коментар, в наявності якого немає необхідності.
  2. Не використовуй коментар, якщо можна придумати гарне і зрозуміле ім'я для функції або змінної.
  3. Будь-який коментар, що змушує шукати сенс в іншому шматку коду або модулі, не повинен існувати.

Тести

Існує п'ять принципів тестування - F.I.R.S.T. Розшифровується це так:

  1. Fast (Швидкість): тести повинні виконуватися швидко, інакше їх ніхто не буде запускати.
  2. Independent (Незалежність): тести не повинні залежати один від одного. Один тест не повинен створювати умови для наступного. Ти повинен мати можливість запускати кожен тест незалежно і в будь-якому порядку.
  3. Repeatable (Повторюваність): тести повинні бути повторюваними в будь-якому середовищі - в продакшені, в середовищі QA і на ноуті в метро без мережі.
  4. Self-Validating (Самоперевірка): тести повинні мати висновок типу boolean. Або вони проходять, або зазнають невдачі. Для того щоб дізнатися результати, не потрібно лізти в файлик журналу.
  5. Timely (Своєчасність): тести повинні бути написані своєчасно.

Проектування

  1. KISS: Keep It Simple Stupid . Уникай непотрібної складності. Питання, який потрібно задати в процесі кодингу: "Чи можна це написати простіше?"
  2. DRY: Do not Repeat Yourself. Результатом роботи цього принципу є відсутність необхідності внесення змін до інших, логічно не пов'язаних елементів, при зміні єдиних елементів системи.
  3. YAGNI: You Are not Gonna Need It. Суть принципу - відмова від створення надлишкового функціоналу, в якому на даний момент немає необхідності.
  4. Композиція краще успадкування. Складний для розуміння принцип, але все ж. Класи повинні досягати поліморфної поведінки і повторного використання коду шляхом їх композиції (шляхом утримання примірників інших класів, що реалізують бажану функціональність), а не успадкування від базового або батьківського класу.
  5. Читабельність. Питання вже піднімався вище, але слід повторитися. При роботі над проектом (особливо в команді), завжди віддавай перевагу читабельності над лаконічністю.

0 комментариев
Сортировка:
Добавить комментарий