You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[Основные принципы при написании кода](#основные-принципы-при-написании-кода)
10
9
-[Про код](#про-код)
11
-
-[Размеры методов, функций и модулей](#размеры-методов-функций-и-модулей)
12
-
-[Импорты](#импорты)
13
-
-[Файлы `__init__.py`](#файлы-__init__py)
14
-
-[Докстринги](#докстринги)
15
-
-[Документация к REST API](#документация-к-rest-api)
10
+
-[Основные принципы](#основные-принципы)
11
+
-[Атомарность операций](#атомарность-операций)
12
+
-[Размеры методов, функций и модулей](#размеры-методов-функций-и-модулей)
13
+
-[Импорты](#импорты)
14
+
-[Файлы `__init__.py`](#файлы-__init__py)
15
+
-[Докстринги](#докстринги)
16
16
-[Про Pull Request](#про-pull-request)
17
-
-[Размер Pull Request](#размер-pull-request)
18
-
-[Пакетный менеджер](#пакетный-менеджер)
19
-
-[Форматирование кода](#форматирование-кода)
20
-
-[Типизация](#типизация)
17
+
-[Создание Pull Request](#создание-pull-request)
18
+
-[Размер Pull Request](#размер-pull-request)
19
+
-[Про тулинг](#про-тулинг)
20
+
-[Пакетный менеджер](#пакетный-менеджер)
21
+
-[Форматирование кода](#форматирование-кода)
22
+
-[Pre-commit хуки](#pre-commit-хуки)
23
+
-[Типизация](#типизация)
24
+
-[Прочее](#прочее)
25
+
-[Документация к REST API](#документация-к-rest-api)
21
26
22
27
23
-
## Основные принципы при написании кода
28
+
## Про код
29
+
30
+
### Основные принципы
24
31
-**Поддерживаемость** (представьте, сможете ли вы понять свой код через год или через два)
25
32
-**Простота** (между сложным и простым решением следует выбрать простое)
26
33
-**Очевидность** (представьте, когда подключится новый программист, насколько ему будет понятно, почему именно **так** написан этот код)
27
34
28
35
29
-
##Про код
36
+
### Атомарность операций
30
37
**1 действие ~ 1 строка**
31
38
32
-
На каждой строке надо постараться делать ровно одно действие.
39
+
Постарайтесь делать атомарные операции в коде - на каждой строке ровно **одно** действие.
33
40
34
41
Плохо ❌:
35
42
```python
@@ -74,7 +81,7 @@ result = calculate_weather(hello)
74
81
**Почему?** Потому что код становится более читабельным, не нужно исполнять несколько выражений в голове во время чтения кода. Разбитый до простых атомных операций код воспринимается гораздо лучше, чем сложный уан-лайнер. Постарайтесь упростить свой код настолько, насколько это возможно - код чаще читается, чем пишется.
75
82
76
83
77
-
## Размеры методов, функций и модулей
84
+
### Размеры методов, функций и модулей
78
85
79
86
Предельный размер метода или функции -**50** строк.
80
87
Достижение предельного размера говорит о том, что функция (метод) делает слишком много - декомпозируйте действия внутри функции (метода).
@@ -86,7 +93,7 @@ result = calculate_weather(hello)
86
93
Длина строки -100 символов.
87
94
88
95
89
-
## Импорты
96
+
### Импорты
90
97
91
98
Рекомендуемый способ импортирования - абсолютный.
92
99
@@ -107,36 +114,31 @@ from some.absolute.path import foo, bar
107
114
импорте всегда нужно помнить путь и вычислять в уме локацию модулей `foo.py`, `bar.py` относительно `spam.py`
108
115
109
116
110
-
## Файлы `__init__.py`
117
+
### Файлы `__init__.py`
111
118
112
119
В `__init__.py` файлах пишем только импорты.
113
120
114
121
**Почему?** Потому что `__init__.py`- последнее место, в которое посмотрит программист, который будет читать код в будущем.
115
122
116
123
117
-
## Докстринги
124
+
### Докстринги
118
125
Рекомендуем добавлять докстринги в функции, методы и классы.
119
126
120
127
**Почему?** Потому что программист, который впервые увидит ваш код, сможет быстрее понять, что в нем происходит.
Схема для OpenAPI должна генерироваться "на лету", чтобы обеспечивать клиентов API свежими изменениями.
127
-
128
-
**Почему?** Потому что это один из распространенных форматов для документирования RESTAPI, которая вышла из Swagger. Данный формат документации поддерживается большим количеством клиентов (Swagger, Postman, Insomnia Designer и многие другие). Также, рукописная документация имеет свойство быстро устаревать, а документация, которая генерируется напрямую из кода позволяет не думать о постоянном обновлении документации.
129
-
130
-
131
131
## Про Pull Request
132
+
133
+
### Создание Pull Request
132
134
**1 Pull Request=1 issue**
133
135
134
136
Один Pull Request должен решать ровно одно issue.
135
137
136
138
**Почему?** Потому что ревьюверу сложнее держать контекст нескольких задач в голове и переключаться между ними.
137
139
138
140
139
-
## Размер Pull Request
141
+
### Размер Pull Request
140
142
Итоговый дифф PR не должен превышать +/-600 измененных строк.
141
143
142
144
Плохо ❌:
@@ -158,14 +160,15 @@ from some.absolute.path import foo, bar
158
160
Также, большинству ревьюверов будет сложно воспринять такой объем изменений за один раз.
159
161
160
162
161
-
## Пакетный менеджер
163
+
## Тулинг
162
164
163
-
[poetry](https://python-poetry.org) - менеджер зависимостей и сборщик пакетов
165
+
### Пакетный менеджер (poetry)
164
166
167
+
[poetry](https://python-poetry.org) - менеджер зависимостей и сборщик пакетов
165
168
166
-
## Форматирование кода
167
169
168
-
[black](https://black.readthedocs.io/en/stable/) - автоформаттер кода по PEP8
170
+
### Форматирование кода (Black)
171
+
[Black](https://black.readthedocs.io/en/stable/) - автоформаттер кода по PEP8
Схема для OpenAPI должна генерироваться "на лету", чтобы обеспечивать клиентов API свежими изменениями.
269
280
281
+
**Почему?** Потому что это один из распространенных форматов для документирования RESTAPI, который вышел из Swagger. Данный формат документации поддерживается большим количеством клиентов (Swagger, Postman, Insomnia Designer и многие другие). Также, рукописная документация имеет свойство быстро устаревать, а документация, которая генерируется напрямую из кода позволяет не думать о постоянном обновлении документации.
0 commit comments