Similar presentations:
Чистый код: создание, анализ и рефакторинг
1. Чистый код: создание, анализ и рефакторинг.
2.
2/213.
3/214. Какой код называют “чистым”?
• Код приятно читать• Удобно и возможно сопровождать
• Код не содержит дублирования
• Содержит простые абстракции
• Прямолинеен и компактен
4/21
5. Содержательные имена
•Не надо так: int d; //прошедшее время•Лучше так:
• int daysSinceCreation;
• int fileAgeInDays;
5/21
6. Пример. Что делает эта функция?
• public List<int[]> getThem(){
List<int[]> list1 = new List<int[]>();
foreach (int[] x in theList)
if (x[0] == 4)
list1.Add(x);
return list1;
}
6/21
7. Улучшение 1.
• public List<int[]> getFlaggedCells(){
List<int[]> flaggedCells = new List<int[]>();
foreach (int[] cell in gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.Add(cell);
return flaggedCells;
}
7/21
8. Улучшение 2.
• public List<Cell> getFlaggedCells(){
List<Cell> flaggedCells = new List<Cell>();
foreach (Cell cell in gameBoard)
if (cell.isFlagged())
flaggedCells.Add(cell);
return flaggedCells;
}
8/21
9. Имена классов
• Существительные и их комбинации• Customer, WikiPage, Account, AddressParser, …
9/21
10. Имена методов
• Глаголы или глагольные словосочетания• PostPayment, DeletePage, Save, …
10/21
11. Функции
• Компактность (примерно 20 строк)• Функция должна выполнять одну операцию и ничего другого
• Один уровень абстракции на функцию
• Чтение кода сверху вниз
11/21
12. Разделение команд и запросов
if (set(“username”, “unclebob”))if (AttributeExists("username"))
{
SetAttribute("username", "unclebob");
...
}
12/21
13. Форматирование кода
13/2114. Объекты и структуры данных. Процедурный код.
14/2115. Объекты и структуры данных. Объектно-ориентированный код.
15/2116. Обработка ошибок
16/2117. SOLID
• S – SRP – Принцип единой отвественности• O – OSP – Принцип открытости/закрытости
• L – LSP – Принцип подстановки Барбары Лисков
• I – ISP – Принцип разделения интерфейса
• D – DIP – Принцип инверсии зависимостей
17/21
18. KISS
• Keep it short and simple (keep it simple, stupid)18/21
19. DRY
• Don’t repeat youserlf• Антоним: WET – Write Everything Twice
19/21
20. YAGNI
• You ain’t gonna need it20/21