Skip to content
4 changes: 0 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,6 @@ repos:
- --disallow-any-generics
- --local-partial-types
- --pretty
- --force-uppercase-builtins
- --force-union-syntax
- --warn-unreachable
- --warn-redundant-casts
- --warn-return-any
Expand Down Expand Up @@ -188,8 +186,6 @@ repos:
- --disallow-any-generics
- --local-partial-types
- --pretty
- --force-uppercase-builtins
- --force-union-syntax
- --warn-unreachable
- --warn-redundant-casts
- --warn-return-any
Expand Down
99 changes: 99 additions & 0 deletions python/clean_code/chapter_4_correct_names.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "dde5fd14",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Чистый код для продолжающих.'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"\"\"Чистый код для продолжающих.\"\"\""
]
},
{
"cell_type": "markdown",
"id": "f7e5c31c",
"metadata": {},
"source": [
"Выбор компактных, содержательных имён - важный шаг в подготовке к написанию кода.\n",
"\n",
"Схемы регистра имен: \n",
"Змеиный регистр (snake_case): бывает нижний и верхний. Для констант: UPPER_SNAKE_CASE;\n",
"Верблюжий регистр (camelCase);\n",
"Pascal (PascalCase).\n",
"Змеиный и верблюжий регистры встречаются чаще всего. В одном проекте можно использовать только одну схему.\n",
"\n",
"Соглашение об именах PEP 8: \n",
"все буквы должны входить в ASCII;\n",
"имена модулей - короткие, только из букв нижнего регистра; \n",
"имена классов в схеме Pascal;\n",
"имена констант - верхний змеиный регистр;\n",
"имена функций, методов и переменных - нижний змеиный регистр; \n",
"первый аргумент методов всегда должен называться self в нижнем регистре; \n",
"первый аргумент классов всегда должен называться cls в нижнем регистре;\n",
"приватные атрибуты классов всегда начинаются с символа (_), а публичные, наоборот, не начинаются с (_).\n",
"При необходимости эти правила могут быть нарушены, например, могут быть использованы символы не только латинского алфавита, но и других языков.\n",
"\n",
"Длина имён\n",
"Длина имён не должна быть слишком короткой, или слишком длинной. \n",
"Исключение: i, j для циклов; х, у для декартовых координат. \n",
"Но в случае, когда область видимости переменной большая, содержательность переменной в приоритете над её длиной.\n",
"Например, в коде на 10000 строк вместо “payment” лучше использовать \n",
"salesClientMonthPayment или annual_electric_bill_payment. \n",
"\n",
"Префиксы в именах бывают избыточны: например, strName, iVacationDays - венгерская запись, считается устаревшей.\n",
"Префиксы is и has у переменных, содержащих логические значения, делают эти имена более понятными.\n",
"Включение единиц измерения даёт полезную информацию: weight_kg означает, что вес задаётся в килограммах. \n",
"\n",
"Последовательные числовые суффиксы в именах стоит использовать только тогда, когда в этом действительно есть необходимость. \n",
"Например, вместо переменных payment1, payment2, payment3 лучше использовать список, или преобразовать в кортеж с именем payments, в которой хранятся эти переменные. \n",
"\n",
"Для того, чтобы имена были пригодны для поиска, нужно создавать уникальные имена, содержащие конкретную информацию. Например, вместо email выбирайте конкретное и более содержательное имя: emailAddress, downloadEmailAttachment, emailMessage и т.д.\n",
"\n",
"Избегайте шуток, каламбуров и культурных отсылок. \n",
"\n",
"Никогда не используйте встроенные имена Python для своих переменных. К ним относятся all, any, date, email, file, format, hash, id, input, list, min, max, object, open, random, set, str, sum, test, type. \n",
"\n",
"Чтобы узнать, используется ли имя в Python, нужно ввести его в интерактивной оболочке или попробовать импортировать. \n",
"\n",
"Также нельзя допускать присвоение файлам .py имён, совпадающих с именами сторонних модулей. \n",
"Пример: Pyperclip - сторонний модуль. Файл нельзя называть pyperclip.py, так как тогда при вызове функции copy() или paste() произойдёт ошибка. \n",
"\n",
"Избегайте бессодержательных имён, таких как data, var, temp. \n",
"Таким образом, хотя выбор имён не имеет никакого отношения к компьютерным алгоритмам, это остаётся важным фактором удобочитаемости кода. \n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
49 changes: 49 additions & 0 deletions python/clean_code/chapter_4_correct_names.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"""Чистый код для продолжающих."""

# Выбор компактных, содержательных имён - важный шаг в подготовке к написанию кода.
#
# Схемы регистра имен:
# Змеиный регистр (snake_case): бывает нижний и верхний. Для констант: UPPER_SNAKE_CASE;
# Верблюжий регистр (camelCase);
# Pascal (PascalCase).
# Змеиный и верблюжий регистры встречаются чаще всего. В одном проекте можно использовать только одну схему.
#
# Соглашение об именах PEP 8:
# все буквы должны входить в ASCII;
# имена модулей - короткие, только из букв нижнего регистра;
# имена классов в схеме Pascal;
# имена констант - верхний змеиный регистр;
# имена функций, методов и переменных - нижний змеиный регистр;
# первый аргумент методов всегда должен называться self в нижнем регистре;
# первый аргумент классов всегда должен называться cls в нижнем регистре;
# приватные атрибуты классов всегда начинаются с символа (_), а публичные, наоборот, не начинаются с (_).
# При необходимости эти правила могут быть нарушены, например, могут быть использованы символы не только латинского алфавита, но и других языков.
#
# Длина имён
# Длина имён не должна быть слишком короткой, или слишком длинной.
# Исключение: i, j для циклов; х, у для декартовых координат.
# Но в случае, когда область видимости переменной большая, содержательность переменной в приоритете над её длиной.
# Например, в коде на 10000 строк вместо “payment” лучше использовать
# salesClientMonthPayment или annual_electric_bill_payment.
#
# Префиксы в именах бывают избыточны: например, strName, iVacationDays - венгерская запись, считается устаревшей.
# Префиксы is и has у переменных, содержащих логические значения, делают эти имена более понятными.
# Включение единиц измерения даёт полезную информацию: weight_kg означает, что вес задаётся в килограммах.
#
# Последовательные числовые суффиксы в именах стоит использовать только тогда, когда в этом действительно есть необходимость.
# Например, вместо переменных payment1, payment2, payment3 лучше использовать список, или преобразовать в кортеж с именем payments, в которой хранятся эти переменные.
#
# Для того, чтобы имена были пригодны для поиска, нужно создавать уникальные имена, содержащие конкретную информацию. Например, вместо email выбирайте конкретное и более содержательное имя: emailAddress, downloadEmailAttachment, emailMessage и т.д.
#
# Избегайте шуток, каламбуров и культурных отсылок.
#
# Никогда не используйте встроенные имена Python для своих переменных. К ним относятся all, any, date, email, file, format, hash, id, input, list, min, max, object, open, random, set, str, sum, test, type.
#
# Чтобы узнать, используется ли имя в Python, нужно ввести его в интерактивной оболочке или попробовать импортировать.
#
# Также нельзя допускать присвоение файлам .py имён, совпадающих с именами сторонних модулей.
# Пример: Pyperclip - сторонний модуль. Файл нельзя называть pyperclip.py, так как тогда при вызове функции copy() или paste() произойдёт ошибка.
#
# Избегайте бессодержательных имён, таких как data, var, temp.
# Таким образом, хотя выбор имён не имеет никакого отношения к компьютерным алгоритмам, это остаётся важным фактором удобочитаемости кода.
#
Loading
Loading