SlideShare a Scribd company logo
1 of 21
Чистый код: создание,
анализ и рефакторинг.
2/21
3/21
Какой код называют “чистым”?
• Код приятно читать
• Удобно и возможно сопровождать
• Код не содержит дублирования
• Содержит простые абстракции
• Прямолинеен и компактен
4/21
Содержательные имена
•Не надо так: int d; //прошедшее время
•Лучше так:
•int daysSinceCreation;
•int fileAgeInDays;
5/21
Пример. Что делает эта функция?
• 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
Улучшение 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
Улучшение 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
Имена классов
• Существительные и их комбинации
• Customer, WikiPage, Account, AddressParser, …
9/21
Имена методов
• Глаголы или глагольные словосочетания
• PostPayment, DeletePage, Save, …
10/21
Функции
• Компактность (примерно 20 строк)
• Функция должна выполнять одну операцию и ничего другого
• Один уровень абстракции на функцию
• Чтение кода сверху вниз
11/21
Разделение команд и запросов
if (set(“username”, “unclebob”))
if (AttributeExists("username"))
{
SetAttribute("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

More Related Content

Similar to Чистый код: создание, анализ и рефакторинг

Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1
Yandex
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
d_olex
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Nikolay Samokhvalov
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
quakke
 

Similar to Чистый код: создание, анализ и рефакторинг (20)

Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
About Python
About PythonAbout Python
About Python
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
 
Как читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAINКак читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAIN
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
 

More from Tados

More from Tados (6)

Дарелл Хафф «Как лгать при помощи статистики»
Дарелл Хафф «Как лгать при помощи статистики» Дарелл Хафф «Как лгать при помощи статистики»
Дарелл Хафф «Как лгать при помощи статистики»
 
Дэвид Льюис «Нейромаркетинг в действии»
Дэвид Льюис «Нейромаркетинг в действии»Дэвид Льюис «Нейромаркетинг в действии»
Дэвид Льюис «Нейромаркетинг в действии»
 
Экскурс в Domain-driven design
Экскурс в Domain-driven designЭкскурс в Domain-driven design
Экскурс в Domain-driven design
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
 
Docker в хозяйстве и быту
Docker в хозяйстве и бытуDocker в хозяйстве и быту
Docker в хозяйстве и быту
 
О компании Tados: цифры и факты на 2017 год
О компании Tados: цифры и факты на 2017 годО компании Tados: цифры и факты на 2017 год
О компании Tados: цифры и факты на 2017 год
 

Чистый код: создание, анализ и рефакторинг