Чистый код: создание, анализ и рефакторинг.
2/21
3/21
Какой код называют “чистым”? • Код приятно читать • Удобно и возможно сопровождать • Код не содержит дублирования • Содержит простые абстракции • Прямолинеен и компактен 4/21
Содержательные имена • Не надо так: int d; //прошедшее время • Лучше так: • int days. Since. Creation; • int file. Age. In. Days; 5/21
Пример. Что делает эта функция? • public List get. Them() • { • List list 1 = new List(); • foreach (int[] x in the. List) • if (x[0] == 4) • list 1. Add(x); • return list 1; • } 6/21
Улучшение 1. • public List get. Flagged. Cells() • { • List flagged. Cells = new List(); • foreach (int[] cell in game. Board) • if (cell[STATUS_VALUE] == FLAGGED) • flagged. Cells. Add(cell); • return flagged. Cells; • } 7/21
Улучшение 2. • public List get. Flagged. Cells() • { • List flagged. Cells = new List(); • foreach (Cell cell in game. Board) • if (cell. is. Flagged()) • flagged. Cells. Add(cell); • return flagged. Cells; • } 8/21 | | |
Имена классов • Существительные и их комбинации • Customer, Wiki. Page, Account, Address. Parser, … 9/21
Имена методов • Глаголы или глагольные словосочетания • Post. Payment, Delete. Page, Save, … 10/21
Функции • Компактность (примерно 20 строк) • Функция должна выполнять одну операцию и ничего другого • Один уровень абстракции на функцию • Чтение кода сверху вниз 11/21
Разделение команд и запросов if (set(“username”, “unclebob”)) if (Attribute. Exists("username")) { Set. Attribute("username", "unclebob"); . . . } 12/21
Форматирование кода 13/21
Объекты и структуры данных. Процедурный код. 14/21
Объекты и структуры данных. Объектно-ориентированный код. 15/21
Обработка ошибок 16/21
SOLID • S – SRP – Принцип единой отвественности • O – OSP – Принцип открытости/закрытости • L – LSP – Принцип подстановки Барбары Лисков • I – ISP – Принцип разделения интерфейса • D – DIP – Принцип инверсии зависимостей 17/21
KISS • Keep it short and simple (keep it simple, stupid) 18/21
DRY • Don’t repeat youserlf • Антоним: WET – Write Everything Twice 19/21
YAGNI • You ain’t gonna need it 20/21
Рефакторинг 21/21