Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions python/clean-code/ch4_var_names.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "0e99d094",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Var names chapter 4.'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"\"\"Var names chapter 4.\"\"\""
]
},
{
"cell_type": "markdown",
"id": "445ee8d7",
"metadata": {},
"source": [
"\"Трудно придумать хорошие имена (формально называемые идентификаторами) для переменных, функций, классов и вообще чего угодно в програм-\n",
"мировании.\"\n",
"\n",
"#### Схемы регистра имен\n",
"1. Змеиный регистр (snake_case) разделяет слова символом подчеркивания, который напоминает ползущую между словами змею. Константы часто записываются в верхнем змеином регистре (UPPER_SNAKE_CASE).\n",
"2. Верблюжий регистр (camelCase) — слова записываются в нижнем регистре, но второе и следующие слова начинаются с заглавной.\n",
"3. Схема Pascal (PascalCase) — аналогична схеме верблюжьего регистра, но первое слово в ней тоже начинается с заглавной.\n",
"\n",
"- использую змеиный регистр\n",
"\n",
"#### Соглашения об именах PEP 8\n",
"- Все буквы должны быть буквами ASCII — то есть латинскими буквами верхнего и нижнего регистров без диакритических знаков.\n",
"- Имена модулей должны быть короткими и состоять только из букв нижнего регистра.\n",
"- Имена констант следует записывать в верхнем змеином регистре.\n",
"- Имена классов необходимо записывать в схеме Pascal.\n",
"- Имена функций, методов и переменных записывают в нижнем змеином регистре.\n",
"- Первый аргумент методов всегда должен называться self в нижнем регистре.\n",
"- Первый аргумент методов классов всегда должен называться cls в нижнем регистре.\n",
"- Приватные атрибуты классов всегда начинают с символа подчеркивания ( _ ).\n",
"- Публичные атрибуты классов никогда не начинают с символа подчеркивания ( _ ).\n",
"\n",
"#### Длина имен\n",
"Очевидно, имена не должны быть слишком короткими или слишком длинными. Но так как код читают чаще, чем пишут, лучше все-таки задавать более длинные имена переменных и функций.\n",
"\n",
"##### Слишком короткие имена\n",
"1. Одно- или двухбуквенное имя (например, g), вероятно, обозначает какое-то слово, начинающееся с этой буквы, но таких слов очень много. Сокращения и одно-двухбуквенные имена легко записать, но они плохо читаются. Это замечание относится и к следующему пункту.\n",
"2. Сокращенные имена вида mon — могут означать monitor, month, monster и множество других слов.\n",
"3. Имя из одного слова — например, start (начало) — может трактоваться по разному: начало чего? При отсутствии уточнения другие люди вас вряд ли поймут.\n",
"\n",
"В отдельных случаях короткие имена переменных вполне допустимы (временная переменная в цикле for()). Еще одно исключение — использование x и y для декартовых координат.\n",
"\n",
"##### Слишком длинные имена\n",
"Короткое имя (например, payment) хорошо подойдет для локальной переменной в одной короткой функции. Для глобальной переменной\n",
"лучше использовать более содержательное имя salesClientMonthlyPayment или annual_electric_bill_payment. Дополнительные слова в имени уточняют смысл и устраняют неоднозначность.\n",
"\n",
"Не пропускайте буквы в своем коде. (в названии переменных)\n",
"\n",
"##### Префиксы в именах\n",
"Префиксы is и has у переменных, содержащих логические значения, или функций и методов, возвращающих логические значения, делают эти имена более понятными. Также включение единиц измерения в имена может предоставить полезную информацию.\n",
"\n",
"##### Последовательные числовые суффиксы в именах\n",
"Последовательные числовые суффиксы в именах указывают на то, что вам, возможно, стоит изменить тип данных переменной или включить дополнительную информацию в имя. Числа сами по себе, как правило, не предоставляют достаточной информации, чтобы имена можно было отличить друг от друга.\n",
"\n",
"Имена переменных вида payment1, payment2 и payment3 не сообщают читателю кода, чем они различаются. - это ужасно!\n",
"\n",
"##### Выбирайте имена, пригодные для поиска\n",
"Чтобы имя было найдено немедленно, создавайте уникальные имена с более длинными именами переменных, которые содержат конкретную информацию. (для поиска через Ctrl+F в IDE)\n",
"\n",
"##### Избегайте шуток, каламбуров и культурных отсылок\n",
"При выборе имен в программе у вас может возникнуть соблазн использовать шутки, каламбуры или культурные отсылки, чтобы ваш код выглядел более непринужденно. Не делайте этого.\n",
"\n",
"##### Не заменяйте встроенные имена\n",
"Никогда не используйте встроенные имена Python для своих переменных. \n",
"Например, присвоив переменной имя list или set, вы заместите функции Python list()\n",
"и set(), что позднее может привести к появлению ошибок.\n",
"\n",
"Наиболее часто заменяемые имена Python — all, any, date, email, file, format, hash,\n",
"id, input, list, min, max, object, open, random, set, str, sum, test и type. Не берите их для своих идентификаторов.\n",
"\n",
"Другая распространенная проблема — присваивание файлам .py имен, совпадающих с именами сторонних модулей. Например, если вы установили сторонний модуль Pyperclip, но также создали файл pyperclip.py, команда import pyperclip импортирует pyperclip.py вместо модуля Pyperclip. При попытке вызвать функцию copy() или paste() модуля Pyperclip вы получите ошибку, в которой говорится, что функции не существует.\n",
"\n",
"\n",
"##### Худшие из возможных имен\n",
"Имя data — ужасное и абсолютно бессодержательное, потому что буквально любая переменная содержит данные (data). То же можно сказать об имени var — все равно что выбрать для собаки кличку Собака.\n",
"\n",
"Если вам нужна переменная для хранения статистического отклонения температурных данных, используйте имя temperatureVariance. Не стоит и говорить, что выбор имени tempVarData будет неудачным.\n",
"\n",
"\n",
"##### Итоги\n",
"Выбор имен - это важнейший фактор написания удобочитаемого кода. В PEP 8 вы найдете несколько соглашений о выборе имен — например, имена в нижнем регистре для модулей и имена в схеме Pascal для классов. Имена не должны быть слишком короткими или слишком длинными. Однако часто лучше сделать имя избыточным, чем недостаточно содержательным.\n",
"\n",
"Избегайте имен, уже используемых стандартной библиотекой Python\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.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading
Loading