Skip to content

Commit cbec7dd

Browse files
committed
Добавил статью про коммиты
1 parent 3accf1a commit cbec7dd

1 file changed

Lines changed: 103 additions & 0 deletions

File tree

1_python_basics/18_comments.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
## Какие бывают
2+
3+
### Обычные комментарии
4+
5+
Комментарии – способ прокомментировать код на ходу, на той же строке.
6+
7+
:::python
8+
price = Column(BigInteger) # рубли * 100
9+
10+
11+
### Докстринги
12+
13+
Докстринг – строковая переменная, которая идёт сразу за объявлением функции, класса, метода или модуля.
14+
Она нужна для документирования всей функции: описания входящих параметров, результата, логики, крайних случаев.
15+
Заключается в тройные двойные кавычки. Вот так:
16+
17+
:::python
18+
def tensorsolve(a, b, axes=None):
19+
"""
20+
Solve the tensor equation ``a x = b`` for x.
21+
It is assumed that all indices of `x` are summed over in the product,
22+
together with the rightmost indices of `a`, as is done in, for example,
23+
``tensordot(a, x, axes=len(b.shape))``.
24+
"""
25+
26+
В серьёзных проектах из них часто генерируется документация, поэтому они могут быть большими, по несколько экранов.
27+
Это касается проектов, у которых есть документация для разработчиков: Django, numpy, sqlalchemy.
28+
29+
Если проект не подразумевает, что им будут пользоваться другие разработчики, такого быть не должно.
30+
Длинных докстрингов не должно быть в скрипте ресайза изображений, сайте блога или алгоритме обучения нейронной сети.
31+
32+
Прямо в докстрингах можно писать короткие тесты, их называют доктесты. Ни разу не видел, чтобы кто-то
33+
это использовал в боевом проекте.
34+
35+
36+
## Как не использовать
37+
38+
39+
### Дублировать информацию из кода
40+
41+
Самая частая ошибка, связанная с комментариями: дублирование информации.
42+
В таком случае комментарий не несёт дополнительной информации, а просто переводит соседний код
43+
с Питона на русский/английский. Пример:
44+
45+
:::python
46+
# загружаем данные из файла data.json
47+
with open('users.json', 'r') as handler:
48+
data = json.load(handler)
49+
50+
Вот как можно исправить:
51+
52+
:::python
53+
with open('users.json', 'r') as handler:
54+
data = json.load(handler)
55+
56+
А так – ещё лучше:
57+
58+
:::python
59+
data = load_all_users_from_file()
60+
61+
62+
### Не сопровождать комментарии
63+
64+
Другая частая ошибка: не менять комментарии при изменении кода. В примере выше мы загружали данные из файла.
65+
Через месяц взялись за голову и поселили данные в базе данных. Код стал таким:
66+
67+
:::python
68+
# загружаем данные из файла data.json
69+
data = db_session.query(User).all()
70+
71+
Данные из файла? WAT?
72+
73+
74+
### Думать, что все поймут
75+
76+
Когда программист пишет кусок кода, он глубоко в него погружён: держит в голове все детали, связи и особые случаи.
77+
В таком состоянии всё поведение кажется понятным, поэтому разработчик может оставить комментарий самому себе.
78+
Проблема в том, что когда он переключится на другую задачу и забудет про детали, комментарий может взорвать мозг:
79+
80+
:::python
81+
inv(strain_tensor) - rigidity.T # правый случай
82+
83+
Правый, правда? Ну, теперь всё понятно.
84+
85+
86+
### Шутить
87+
88+
Шутки к неидеальному коду смотрятся неуместно. Представь, как чувствует себя разработчик, копающийся в чужом
89+
коде три часа и находящий новый модуль с заглавным комментарием `оставь надежду, всяк сюда входящий`.
90+
Не будь автором этого комментария. Лучше наведи порядок в своём коде.
91+
92+
93+
## Как использовать
94+
95+
Вот хорошие причины использовать комментарии:
96+
97+
- *объяснить неочевидное поведение*: бывает, что нужно объяснить какой-нибудь подводный камень куска кода
98+
или объяснить поведение в особом случае; использовать только если ту же информацию в коде поселить нельзя или
99+
очень сложно;
100+
- *оставить напоминание себе или коллеге*: речь про комментарии вроде `TODO: кешировать ответ ручки`
101+
или `FIXME: учитывать часовой пояс`.
102+
103+
Прежде чем написать комментарий, попробуй поселить его в коде, указав параметр или дав подходящее название переменной.

0 commit comments

Comments
 (0)