Skip to content

Commit 11b9524

Browse files
committed
Правки Лены
1 parent b0043fa commit 11b9524

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

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

0 commit comments

Comments
 (0)