0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#База знаний</a></p>
1
<p><a>#База знаний</a></p>
2
<ul><li>10 дек 2020</li>
2
<ul><li>10 дек 2020</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Статья об именах переменных, классов и методов, скобках, комментариях, форматировании кода и других правилах хорошего тона, принятых в языке Javа.</p>
4
</ul><p>Статья об именах переменных, классов и методов, скобках, комментариях, форматировании кода и других правилах хорошего тона, принятых в языке Javа.</p>
5
<p> vlada_maestro / shutterstock</p>
5
<p> vlada_maestro / shutterstock</p>
6
<p>Преподаватель Skillbox. Пишет про Java, учит Go. Помнит рассвет PHP и как "грабить корованы".</p>
6
<p>Преподаватель Skillbox. Пишет про Java, учит Go. Помнит рассвет PHP и как "грабить корованы".</p>
7
<p>В языке Java, как и во многих других языках программирования, есть неофициальные, но принятые сообществом разработчиков соглашения по оформлению кода. Давайте попробуем разобраться, что это такое, как работает и почему важно.</p>
7
<p>В языке Java, как и во многих других языках программирования, есть неофициальные, но принятые сообществом разработчиков соглашения по оформлению кода. Давайте попробуем разобраться, что это такое, как работает и почему важно.</p>
8
<p>Java Code Style - это рекомендации и соглашения о стиле кода, собранные вместе. Например:</p>
8
<p>Java Code Style - это рекомендации и соглашения о стиле кода, собранные вместе. Например:</p>
9
<ul><li>как использовать отступы;</li>
9
<ul><li>как использовать отступы;</li>
10
<li>когда и как ставить скобки всех видов;</li>
10
<li>когда и как ставить скобки всех видов;</li>
11
<li>как оформлять комментарии;</li>
11
<li>как оформлять комментарии;</li>
12
<li>в каком стиле давать названия классам, переменным, константам;</li>
12
<li>в каком стиле давать названия классам, переменным, константам;</li>
13
<li>какой должна быть максимальная длина строки кода.</li>
13
<li>какой должна быть максимальная длина строки кода.</li>
14
</ul><p>Регламентируется множество вещей, связанных с оформлением исходного текста программ, и приводятся требования, которые необходимо учитывать. Почему возникли эти стандарты?</p>
14
</ul><p>Регламентируется множество вещей, связанных с оформлением исходного текста программ, и приводятся требования, которые необходимо учитывать. Почему возникли эти стандарты?</p>
15
<p>Причины, по которым разработчики пришли к таким соглашениям, логичны и просты:</p>
15
<p>Причины, по которым разработчики пришли к таким соглашениям, логичны и просты:</p>
16
<ul><li>70 - 80% расходов при создании ПО приходится на поддержку и развитие кода.</li>
16
<ul><li>70 - 80% расходов при создании ПО приходится на поддержку и развитие кода.</li>
17
<li>Над кодом обычно работают команды программистов, а не один человек. Состав команд меняется со временем, и единый стиль позволяет легче вводить новых разработчиков в проект.</li>
17
<li>Над кодом обычно работают команды программистов, а не один человек. Состав команд меняется со временем, и единый стиль позволяет легче вводить новых разработчиков в проект.</li>
18
<li>Код больше читают, чем пишут. Прежде чем внести изменение, которое может состоять из пары новых строк, приходится изучить сотни, а иногда и тысячи старых.</li>
18
<li>Код больше читают, чем пишут. Прежде чем внести изменение, которое может состоять из пары новых строк, приходится изучить сотни, а иногда и тысячи старых.</li>
19
<li>Правильное оформление кода облегчает чтение. Даже если текст программы пишут разные команды, он будет понятен каждому разработчику, а скорость восприятия будет высокой.</li>
19
<li>Правильное оформление кода облегчает чтение. Даже если текст программы пишут разные команды, он будет понятен каждому разработчику, а скорость восприятия будет высокой.</li>
20
<li>Гораздо проще поддерживать программы и сравнивать версии кода, когда у файлов согласованный стиль.</li>
20
<li>Гораздо проще поддерживать программы и сравнивать версии кода, когда у файлов согласованный стиль.</li>
21
</ul><p>Использование общепринятых соглашений по оформлению позволяет сделать код более аккуратным, избежать ошибок, связанных с разными стилями написания у людей, работающих над одним проектом.</p>
21
</ul><p>Использование общепринятых соглашений по оформлению позволяет сделать код более аккуратным, избежать ошибок, связанных с разными стилями написания у людей, работающих над одним проектом.</p>
22
<p>Стиль не играет роли для компьютера, но важен для чтения кода человеком. Наше зрение устроено так, что сперва получает и анализирует образы, а только затем мы вдаёмся в детали. А если блоки исходного текста унифицированы, разработчик понимает, что перед ним за конструкция, даже не вникая в сам код.</p>
22
<p>Стиль не играет роли для компьютера, но важен для чтения кода человеком. Наше зрение устроено так, что сперва получает и анализирует образы, а только затем мы вдаёмся в детали. А если блоки исходного текста унифицированы, разработчик понимает, что перед ним за конструкция, даже не вникая в сам код.</p>
23
<p>Видя такую конструкцию, программист сразу же понимает, что это if … else. Он прочитает это мгновенно и пойдёт изучать код дальше. А если глазу попадается что-то отличающееся от привычного, чтение сразу переходит в медленный побуквенный режим. Вот здесь, например, потребуется детально изучить код, чтобы понять его смысл:</p>
23
<p>Видя такую конструкцию, программист сразу же понимает, что это if … else. Он прочитает это мгновенно и пойдёт изучать код дальше. А если глазу попадается что-то отличающееся от привычного, чтение сразу переходит в медленный побуквенный режим. Вот здесь, например, потребуется детально изучить код, чтобы понять его смысл:</p>
24
<p>Если стиль форматирования меняется от конструкции к конструкции, это затрудняет считывание паттернов - мы спотыкаемся глазом на каждой нестандартно написанной строчке.</p>
24
<p>Если стиль форматирования меняется от конструкции к конструкции, это затрудняет считывание паттернов - мы спотыкаемся глазом на каждой нестандартно написанной строчке.</p>
25
<p>Единый стиль повышает скорость чтения кода, облегчает взаимодействие между командами, а также имеет эстетическую составляющую. Оркестр не сможет хорошо сыграть, пока все участники не договорятся и не станут попадать в один ритм.</p>
25
<p>Единый стиль повышает скорость чтения кода, облегчает взаимодействие между командами, а также имеет эстетическую составляющую. Оркестр не сможет хорошо сыграть, пока все участники не договорятся и не станут попадать в один ритм.</p>
26
<p>В каждой популярной среде разработки есть встроенные средства для автоформатирования кода. В таблице приведены горячие клавиши для форматирования открытого файла в популярных IDE.</p>
26
<p>В каждой популярной среде разработки есть встроенные средства для автоформатирования кода. В таблице приведены горячие клавиши для форматирования открытого файла в популярных IDE.</p>
27
JetBrains IntelliJ IDEAEclipse IDEWindows\LinuxCtrl + Alt + LCtrl + Shift + FMacOs⌘ + ⌥ + L⌘ + Shift + F<p><strong>Форматирование пакета или всего проекта в IntelliJ IDEA</strong></p>
27
JetBrains IntelliJ IDEAEclipse IDEWindows\LinuxCtrl + Alt + LCtrl + Shift + FMacOs⌘ + ⌥ + L⌘ + Shift + F<p><strong>Форматирование пакета или всего проекта в IntelliJ IDEA</strong></p>
28
<p>Выберите в дереве проекта нужный пакет и вызовите<em>Reformat</em>, используя горячие клавиши. Как вариант, можно нажать по пакету правой кнопкой мыши и выбрать<em>Reformat Code</em>. Откроется диалоговое окно, в котором, кроме форматирования, будет предложено оптимизировать импорты (удалить лишние и привести в порядок существующие в соответствии с Code Style). Рекомендуется отметить этот пункт и нажать ОК.</p>
28
<p>Выберите в дереве проекта нужный пакет и вызовите<em>Reformat</em>, используя горячие клавиши. Как вариант, можно нажать по пакету правой кнопкой мыши и выбрать<em>Reformat Code</em>. Откроется диалоговое окно, в котором, кроме форматирования, будет предложено оптимизировать импорты (удалить лишние и привести в порядок существующие в соответствии с Code Style). Рекомендуется отметить этот пункт и нажать ОК.</p>
29
<p>Результат выполнения команды автоформатирования:</p>
29
<p>Результат выполнения команды автоформатирования:</p>
30
<p>Соглашения по стилю кода Java различны, а, кроме того, разработчики могут использовать свои модификации. Чтобы у всей команды был один стиль кода, его можно задать в среде разработке.</p>
30
<p>Соглашения по стилю кода Java различны, а, кроме того, разработчики могут использовать свои модификации. Чтобы у всей команды был один стиль кода, его можно задать в среде разработке.</p>
31
<p>Один из популярных наборов правил по оформлению кода для Java написала компания Google. Он называется Google Java Style Guide и <a>доступен на GitHub</a>. Вы можете без труда установить его в любимую IDE, с которой работаете. Для примера рассмотрим, как это сделать в среде разработки JetBrains IntelliJ IDEA:</p>
31
<p>Один из популярных наборов правил по оформлению кода для Java написала компания Google. Он называется Google Java Style Guide и <a>доступен на GitHub</a>. Вы можете без труда установить его в любимую IDE, с которой работаете. Для примера рассмотрим, как это сделать в среде разработки JetBrains IntelliJ IDEA:</p>
32
<ul><li>Скачайте файл<a>intellij-java-google-style.xml</a>c правилами форматирования с GitHub.</li>
32
<ul><li>Скачайте файл<a>intellij-java-google-style.xml</a>c правилами форматирования с GitHub.</li>
33
<li>Откройте IntelliJ IDEA, зайдите в настройки<strong>File → Settings… (Ctrl + Alt + S)</strong>и выберите загрузку файла в пункте Scheme, как на скриншоте:</li>
33
<li>Откройте IntelliJ IDEA, зайдите в настройки<strong>File → Settings… (Ctrl + Alt + S)</strong>и выберите загрузку файла в пункте Scheme, как на скриншоте:</li>
34
</ul><ul><li>В диалоговом меню выберите скачанный файл и в поле<strong>Scheme</strong>выберите<strong>GoogleStyle.</strong>Затем<strong></strong>сохраните изменения, нажав<strong>Apply/OK.</strong></li>
34
</ul><ul><li>В диалоговом меню выберите скачанный файл и в поле<strong>Scheme</strong>выберите<strong>GoogleStyle.</strong>Затем<strong></strong>сохраните изменения, нажав<strong>Apply/OK.</strong></li>
35
</ul><p>Теперь при форматировании будут использоваться правила Java Google Style.</p>
35
</ul><p>Теперь при форматировании будут использоваться правила Java Google Style.</p>
36
<p>Используйте автоформатирование после окончания работы над блоком кода и перед отправкой кода в удалённый репозиторий. Да пребудет ваш код чистым и красивым!</p>
36
<p>Используйте автоформатирование после окончания работы над блоком кода и перед отправкой кода в удалённый репозиторий. Да пребудет ваш код чистым и красивым!</p>
37
<p>Теперь разберём основные правила, которые есть в Code Style, и как их использовать в ваших рабочих проектах.</p>
37
<p>Теперь разберём основные правила, которые есть в Code Style, и как их использовать в ваших рабочих проектах.</p>
38
<p>Классы в java располагаются в отдельных файлах расширения.java, и название файла строго должно соответствовать имени класса, включая регистр.</p>
38
<p>Классы в java располагаются в отдельных файлах расширения.java, и название файла строго должно соответствовать имени класса, включая регистр.</p>
39
<p>❗️<strong>Неправильно:</strong>файл main.java</p>
39
<p>❗️<strong>Неправильно:</strong>файл main.java</p>
40
<p>✅ <strong>Правильно:</strong>файл называется как класс - Main.java</p>
40
<p>✅ <strong>Правильно:</strong>файл называется как класс - Main.java</p>
41
<p>Классы и интерфейсы именуются с большой буквы. Если имя состоит из нескольких слов, то каждое слово также начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>UpperCamelCase</strong>.</p>
41
<p>Классы и интерфейсы именуются с большой буквы. Если имя состоит из нескольких слов, то каждое слово также начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>UpperCamelCase</strong>.</p>
42
<p><strong>❗️ Неправильно:</strong>phoneBook, full_name, main, result-list</p>
42
<p><strong>❗️ Неправильно:</strong>phoneBook, full_name, main, result-list</p>
43
<p><strong>✅ Правильно:</strong>PhoneBook, FullName, Main, ResultList</p>
43
<p><strong>✅ Правильно:</strong>PhoneBook, FullName, Main, ResultList</p>
44
<p>Класс принято называть существительным: Car, Bird, ArrayList, Book. Возможно добавлять уточняющее прилагательное ImmutableList.</p>
44
<p>Класс принято называть существительным: Car, Bird, ArrayList, Book. Возможно добавлять уточняющее прилагательное ImmutableList.</p>
45
<p>Интерфейс, как и класс, может быть существительным: List, Set, Map. А также прилагательным, если указывает на свойство: Readable, Сomparable, Closable.</p>
45
<p>Интерфейс, как и класс, может быть существительным: List, Set, Map. А также прилагательным, если указывает на свойство: Readable, Сomparable, Closable.</p>
46
<p>Отдельно стоить отметить классы тестов, к ним принято добавлять слово Test в окончании: HashTest, HashIntegrationTest</p>
46
<p>Отдельно стоить отметить классы тестов, к ним принято добавлять слово Test в окончании: HashTest, HashIntegrationTest</p>
47
<p>Методы именуются со строчной (маленькой) буквы; если имя состоит из нескольких слов, то каждое последующее слово начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>lowerCamelCase</strong>.</p>
47
<p>Методы именуются со строчной (маленькой) буквы; если имя состоит из нескольких слов, то каждое последующее слово начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>lowerCamelCase</strong>.</p>
48
<p><strong>❗️ Неправильно:</strong>Print(), get-Size(), Main(), is_hidden()</p>
48
<p><strong>❗️ Неправильно:</strong>Print(), get-Size(), Main(), is_hidden()</p>
49
<p><strong>✅ Правильно:</strong>print(), getSize(), main (), isHidden()</p>
49
<p><strong>✅ Правильно:</strong>print(), getSize(), main (), isHidden()</p>
50
<p>Методы - это действия, поэтому их принято называть глаголами: sendMessage (), stop (), parse (), add ()</p>
50
<p>Методы - это действия, поэтому их принято называть глаголами: sendMessage (), stop (), parse (), add ()</p>
51
<p>Отдельно можно отменить геттеры и сеттеры. Название метода геттера формируется из названия переменной и префикса get. Если переменная length, то геттер: getLength (). Если переменная типа boolean и названа isAlive, то геттер будет также называться isAlive (), являясь ответом на вопрос в названии метода.</p>
51
<p>Отдельно можно отменить геттеры и сеттеры. Название метода геттера формируется из названия переменной и префикса get. Если переменная length, то геттер: getLength (). Если переменная типа boolean и названа isAlive, то геттер будет также называться isAlive (), являясь ответом на вопрос в названии метода.</p>
52
<p>Сеттеры формируются по такому же принципу, но с префиксом set. Продолжая примеры выше: для length сеттер будет setLength (). Для переменной типа boolean isAlive, сеттер будет без приставки setAlive ().</p>
52
<p>Сеттеры формируются по такому же принципу, но с префиксом set. Продолжая примеры выше: для length сеттер будет setLength (). Для переменной типа boolean isAlive, сеттер будет без приставки setAlive ().</p>
53
<p>Переменные именуются со строчной (маленькой) буквы; если имя состоит из нескольких слов, то каждое последующее слово начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>lowerCamelCase</strong>.</p>
53
<p>Переменные именуются со строчной (маленькой) буквы; если имя состоит из нескольких слов, то каждое последующее слово начинается с большой буквы. Подчёркивания, тире не используются. Такой стиль нейминга называется<strong>lowerCamelCase</strong>.</p>
54
<p>Имена переменных в общем случае - это существительные либо составные существительные с добавлением прилагательных.</p>
54
<p>Имена переменных в общем случае - это существительные либо составные существительные с добавлением прилагательных.</p>
55
<p><strong>❗️ Неправильно:</strong>PostService, e_mail, post-id, _email</p>
55
<p><strong>❗️ Неправильно:</strong>PostService, e_mail, post-id, _email</p>
56
<p><strong>✅ Правильно:</strong>postService, email, postId, isAlive</p>
56
<p><strong>✅ Правильно:</strong>postService, email, postId, isAlive</p>
57
<p>Данные правила относятся к локальным переменным (внутри методов), параметрам класса, а также к не статическим константам.</p>
57
<p>Данные правила относятся к локальным переменным (внутри методов), параметрам класса, а также к не статическим константам.</p>
58
<p>Константы именуются в стиле<strong>SNAKE_CASE</strong>, то есть слова разделены нижним подчёркиванием и все буквы прописные (большие)</p>
58
<p>Константы именуются в стиле<strong>SNAKE_CASE</strong>, то есть слова разделены нижним подчёркиванием и все буквы прописные (большие)</p>
59
<p>Константами считаются static final поля, но не все. Поле должно быть примитивом, String или иммутабельным классом. То есть параметры класса константы не должны иметь возможности изменяться, а его методы - иметь побочные эффекты, влияющие на другие классы. Элементы Enum тоже являются константами.</p>
59
<p>Константами считаются static final поля, но не все. Поле должно быть примитивом, String или иммутабельным классом. То есть параметры класса константы не должны иметь возможности изменяться, а его методы - иметь побочные эффекты, влияющие на другие классы. Элементы Enum тоже являются константами.</p>
60
<p><strong>✅ Константы:</strong></p>
60
<p><strong>✅ Константы:</strong></p>
61
static final int NUMBER = 5; //примитив enum SomeEnum { ENUM_CONSTANT } // enum static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann"); // неизменяемый список, с неизменяемыми элементами String static final ImmutableMap<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32); // неизменяемый Map, с неизменяемыми элементами String<p><strong>❗️ Не именуются как константы:</strong></p>
61
static final int NUMBER = 5; //примитив enum SomeEnum { ENUM_CONSTANT } // enum static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann"); // неизменяемый список, с неизменяемыми элементами String static final ImmutableMap<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32); // неизменяемый Map, с неизменяемыми элементами String<p><strong>❗️ Не именуются как константы:</strong></p>
62
static String nonFinal = "non-final"; // не final final String nonStatic = "non-static"; // не статична static final Set<String> mutableCollection = new HashSet<String>(); // мы можем изменять содержимое Set static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable); // изменить количество элементов в коллекции нет возможности, но менять состояние самих элементов коллекции есть возможность static final String[] nonEmptyArray = {"these", "can", "change"}; // поменять элементы массива возможно<p>Как и у переменных, названия констант - это существительные либо составные существительные с добавлением прилагательных.</p>
62
static String nonFinal = "non-final"; // не final final String nonStatic = "non-static"; // не статична static final Set<String> mutableCollection = new HashSet<String>(); // мы можем изменять содержимое Set static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable); // изменить количество элементов в коллекции нет возможности, но менять состояние самих элементов коллекции есть возможность static final String[] nonEmptyArray = {"these", "can", "change"}; // поменять элементы массива возможно<p>Как и у переменных, названия констант - это существительные либо составные существительные с добавлением прилагательных.</p>
63
<p>Для наименования методов, переменных, классов используйте только английский язык. Использование английского - это принятый стандарт, чтобы ваш код был всем понятен. Транслит намного хуже читается, а если кто-то не знаком с русским, он и вовсе не поймёт смысл наименования. Если затрудняетесь в выборе названия, воспользуйтесь гугл-переводчиком. Так, кстати, вы пополните свой словарный запас.</p>
63
<p>Для наименования методов, переменных, классов используйте только английский язык. Использование английского - это принятый стандарт, чтобы ваш код был всем понятен. Транслит намного хуже читается, а если кто-то не знаком с русским, он и вовсе не поймёт смысл наименования. Если затрудняетесь в выборе названия, воспользуйтесь гугл-переводчиком. Так, кстати, вы пополните свой словарный запас.</p>
64
<p><strong>❗️ Неправильно:</strong>schet, kolichestvo, soderjitImya, fio</p>
64
<p><strong>❗️ Неправильно:</strong>schet, kolichestvo, soderjitImya, fio</p>
65
<p><strong>✅ Правильно:</strong>account, amount, containsName, fullname</p>
65
<p><strong>✅ Правильно:</strong>account, amount, containsName, fullname</p>
66
<p>Фигурная скобка открывается на той же строке, что и код перед ней.</p>
66
<p>Фигурная скобка открывается на той же строке, что и код перед ней.</p>
67
public static void main(String[] args) { System.out.println("Hello, code style!"); }<p>Тело условного оператора или цикла всегда размещайте в {}, даже если это одна строка. Так можно избежать ошибок, если попробуете добавить вторую строчку, но забудете заключить её в фигурные скобки.</p>
67
public static void main(String[] args) { System.out.println("Hello, code style!"); }<p>Тело условного оператора или цикла всегда размещайте в {}, даже если это одна строка. Так можно избежать ошибок, если попробуете добавить вторую строчку, но забудете заключить её в фигурные скобки.</p>
68
<p><strong>❗️ Неправильно:</strong>schet, kolichestvo, soderjitImya, fio</p>
68
<p><strong>❗️ Неправильно:</strong>schet, kolichestvo, soderjitImya, fio</p>
69
for (int i = 0; i < 10; i++) System.out.println(i);<p><strong>✅ Правильно:</strong>account, amount, containsName, fullname</p>
69
for (int i = 0; i < 10; i++) System.out.println(i);<p><strong>✅ Правильно:</strong>account, amount, containsName, fullname</p>
70
for (int i = 0; i < 10; i++) { System.out.println(i); }<p>Нежелательно при именовании использовать сокращения. Это связано как с пониманием расшифровки, так и с поиском по классам и методам. Коллеги, которые будут читать код, могут не найти их с такими названиями и посчитают, что надо создать заново.</p>
70
for (int i = 0; i < 10; i++) { System.out.println(i); }<p>Нежелательно при именовании использовать сокращения. Это связано как с пониманием расшифровки, так и с поиском по классам и методам. Коллеги, которые будут читать код, могут не найти их с такими названиями и посчитают, что надо создать заново.</p>
71
<p>❗️<strong>Неправильно:</strong>class Btn, int lstId, class CurPage, String lName</p>
71
<p>❗️<strong>Неправильно:</strong>class Btn, int lstId, class CurPage, String lName</p>
72
<p><strong>✅ Правильно:</strong>class Button, int lastId, class CurrentPage, String lastName</p>
72
<p><strong>✅ Правильно:</strong>class Button, int lastId, class CurrentPage, String lastName</p>
73
<p>Аббревиатуры представляйте в виде слов. Это более удобочитаемо, особенно если название состоит из нескольких.</p>
73
<p>Аббревиатуры представляйте в виде слов. Это более удобочитаемо, особенно если название состоит из нескольких.</p>
74
<p><strong>❗️ Неправильно:</strong>class HTMLPage, int userID, class HTTPRequest, String URL, class XML</p>
74
<p><strong>❗️ Неправильно:</strong>class HTMLPage, int userID, class HTTPRequest, String URL, class XML</p>
75
<p><strong>✅ Правильно:</strong>class HtmlPage, int userId, class HttpRequest, String url, class Xml</p>
75
<p><strong>✅ Правильно:</strong>class HtmlPage, int userId, class HttpRequest, String url, class Xml</p>
76
<p>Используйте эти несложные правила и помните: ваш код должны понимать не только вы, но и ваши коллеги. Так им будет значительно легче разобраться в коде и приступить к решению задачи, вместо того чтобы продираться через дебри сложных и непонятных названий методов, классов и переменных.</p>
76
<p>Используйте эти несложные правила и помните: ваш код должны понимать не только вы, но и ваши коллеги. Так им будет значительно легче разобраться в коде и приступить к решению задачи, вместо того чтобы продираться через дебри сложных и непонятных названий методов, классов и переменных.</p>
77
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
77
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>