0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Ниже представлена подборка типичных ошибок, которые допускают программисты при именовании переменных и функций в своём коде. Примеры взяты из проектов учеников Хекслета. В качестве языка для демонстрации я использую JavaScript, как наиболее универсальный, но сами примеры никак не связаны с тем, какой язык используется. Эти ошибки встречаются везде в одинаковых пропорциях.</p>
1
<p>Ниже представлена подборка типичных ошибок, которые допускают программисты при именовании переменных и функций в своём коде. Примеры взяты из проектов учеников Хекслета. В качестве языка для демонстрации я использую JavaScript, как наиболее универсальный, но сами примеры никак не связаны с тем, какой язык используется. Эти ошибки встречаются везде в одинаковых пропорциях.</p>
2
<p>Материалы, на которых базируются принципы именования:</p>
2
<p>Материалы, на которых базируются принципы именования:</p>
3
<ul><li><a>Правильное именование переменных</a></li>
3
<ul><li><a>Правильное именование переменных</a></li>
4
<li><a>Ментальное программирование</a></li>
4
<li><a>Ментальное программирование</a></li>
5
<li><a>Ментальное программирование II</a></li>
5
<li><a>Ментальное программирование II</a></li>
6
<li><a>Ментальное программирование III</a></li>
6
<li><a>Ментальное программирование III</a></li>
7
</ul><blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
7
</ul><blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
8
</blockquote><p>Коротко о смыслах.</p>
8
</blockquote><p>Коротко о смыслах.</p>
9
<p>Идеально, если одного имени достаточно для понимания того, что находится внутри переменной или<em>что</em>делает функция, а не<em>как</em>она это делает. Если для понимания нужно изучать код вокруг этого имени, то, скорее всего, имя плохое. Основная мысль: Не заставляйте меня (человека, читающего ваш код) думать!</p>
9
<p>Идеально, если одного имени достаточно для понимания того, что находится внутри переменной или<em>что</em>делает функция, а не<em>как</em>она это делает. Если для понимания нужно изучать код вокруг этого имени, то, скорее всего, имя плохое. Основная мысль: Не заставляйте меня (человека, читающего ваш код) думать!</p>
10
<h3>Файл?</h3>
10
<h3>Файл?</h3>
11
<p>Моё "любимое" имя для переменной -<em>file</em>. Особенно прекрасно, когда не видно момента присваивания - например, при передаче этого "файла" в функцию:</p>
11
<p>Моё "любимое" имя для переменной -<em>file</em>. Особенно прекрасно, когда не видно момента присваивания - например, при передаче этого "файла" в функцию:</p>
12
<p>Что такое файл? Если задать этот вопрос разным людям, то получим разные ответы. Типичный список такой:</p>
12
<p>Что такое файл? Если задать этот вопрос разным людям, то получим разные ответы. Типичный список такой:</p>
13
<ul><li>Содержимое файла</li>
13
<ul><li>Содержимое файла</li>
14
<li>Имя файла</li>
14
<li>Имя файла</li>
15
<li>Путь до файла</li>
15
<li>Путь до файла</li>
16
<li>Файловый дескриптор</li>
16
<li>Файловый дескриптор</li>
17
</ul><p>На практике встречаются все эти варианты. Правда, последний всё же больше относится к языкам типа СИ, где под файлом действительно имеют в виду файловый дескриптор.</p>
17
</ul><p>На практике встречаются все эти варианты. Правда, последний всё же больше относится к языкам типа СИ, где под файлом действительно имеют в виду файловый дескриптор.</p>
18
<p>Имя<em>file</em>- плохое, оно заставляет проводить в голове трансляцию из имени в его реальную суть: "говорим файл, подразумеваем путь" или "говорим файл, подразумеваем содержимое". Правильные имена:<em>filepath</em>,<em>filename</em>,<em>content</em>.</p>
18
<p>Имя<em>file</em>- плохое, оно заставляет проводить в голове трансляцию из имени в его реальную суть: "говорим файл, подразумеваем путь" или "говорим файл, подразумеваем содержимое". Правильные имена:<em>filepath</em>,<em>filename</em>,<em>content</em>.</p>
19
<h3>Венгерская нотация</h3>
19
<h3>Венгерская нотация</h3>
20
<p>Венгерская нотация - соглашение об именовании идентификаторов (переменных и функций), которое сводится к кодированию типов данных прямо в название: например,<em>userArray</em>. Подобное именование - это борьба со следствием, а не устранение причины - плохих имён. Рассмотрим некоторые типичные примеры.</p>
20
<p>Венгерская нотация - соглашение об именовании идентификаторов (переменных и функций), которое сводится к кодированию типов данных прямо в название: например,<em>userArray</em>. Подобное именование - это борьба со следствием, а не устранение причины - плохих имён. Рассмотрим некоторые типичные примеры.</p>
21
<ul><li>Массивы. Если что-то массив, то, значит, у нас есть коллекция каких-то элементов, а у элементов есть имена. Идеальное имя для такого массива - это имя элемента во множественном числе:<em>users</em>,<em>cars</em>,<em>numbers</em>или, на крайний случай,<em>items</em>. Все они явно говорят о том, что мы работаем с коллекцией.</li>
21
<ul><li>Массивы. Если что-то массив, то, значит, у нас есть коллекция каких-то элементов, а у элементов есть имена. Идеальное имя для такого массива - это имя элемента во множественном числе:<em>users</em>,<em>cars</em>,<em>numbers</em>или, на крайний случай,<em>items</em>. Все они явно говорят о том, что мы работаем с коллекцией.</li>
22
<li>Строки. Здесь всё просто: если мы работаем с произвольной строкой, то её можно назвать<em>text</em>или<em>sentence</em>. В более конкретных случаях это может быть<em>char</em>или<em>word</em>.</li>
22
<li>Строки. Здесь всё просто: если мы работаем с произвольной строкой, то её можно назвать<em>text</em>или<em>sentence</em>. В более конкретных случаях это может быть<em>char</em>или<em>word</em>.</li>
23
<li>Числа. Тут ещё проще:<em>number</em>- он и в Африке<em>number</em>. Но, конечно, лучше давать имя, соответствующее предназначению числа: например,<em>denom</em>(делитель).</li>
23
<li>Числа. Тут ещё проще:<em>number</em>- он и в Африке<em>number</em>. Но, конечно, лучше давать имя, соответствующее предназначению числа: например,<em>denom</em>(делитель).</li>
24
</ul><h3>Общие названия</h3>
24
</ul><h3>Общие названия</h3>
25
<p>В проектах часто можно встретить названия в стиле<em>before</em>или<em>after</em>(встречается вариация<em>new</em>и<em>old</em>). Хочется сразу спросить<em>"Что до?"</em>и<em>"Что после?"</em>. Абсолютно непонятно, о чём идёт речь, не зная кода. Конкретно в тех ситуациях, о которых я говорю, имелось ввиду значение до изменений и значение после изменений. Собственно, весь секрет - именовать переменные так, чтобы они отражали эту суть:<em>valueBefore</em>и<em>valueAfter</em>.</p>
25
<p>В проектах часто можно встретить названия в стиле<em>before</em>или<em>after</em>(встречается вариация<em>new</em>и<em>old</em>). Хочется сразу спросить<em>"Что до?"</em>и<em>"Что после?"</em>. Абсолютно непонятно, о чём идёт речь, не зная кода. Конкретно в тех ситуациях, о которых я говорю, имелось ввиду значение до изменений и значение после изменений. Собственно, весь секрет - именовать переменные так, чтобы они отражали эту суть:<em>valueBefore</em>и<em>valueAfter</em>.</p>
26
<p>Такая же история с функциями. Как вы думаете, что происходит в коде ниже?</p>
26
<p>Такая же история с функциями. Как вы думаете, что происходит в коде ниже?</p>
27
<p>Догадаться просто невозможно. И хотя бывают ситуации, где такой код уместен, но их мало. Функция должна говорить о том, что будет результатом её работы, а не о том, что она делает.</p>
27
<p>Догадаться просто невозможно. И хотя бывают ситуации, где такой код уместен, но их мало. Функция должна говорить о том, что будет результатом её работы, а не о том, что она делает.</p>
28
<h3>Функция - существительное</h3>
28
<h3>Функция - существительное</h3>
29
<p>Именование функций существительными - частый антипаттерн даже у опытных разработчиков. Ниже примеры, где слева - то, как пишут, справа - то, как должно быть в соответствии со смыслом:</p>
29
<p>Именование функций существительными - частый антипаттерн даже у опытных разработчиков. Ниже примеры, где слева - то, как пишут, справа - то, как должно быть в соответствии со смыслом:</p>
30
<ul><li>diff(value) => genDiff(value)</li>
30
<ul><li>diff(value) => genDiff(value)</li>
31
<li>parser(data) => parse(data)</li>
31
<li>parser(data) => parse(data)</li>
32
<li>value(user) => getValue(user)</li>
32
<li>value(user) => getValue(user)</li>
33
</ul><p>В программировании используется не такой большой набор слов, которые означают различные действия и используются при этом очень часто. К таким словам относятся модальные глаголы и слова типа<em>render</em>,<em>build</em>,<em>generate</em>,<em>show</em>,<em>enable</em>,<em>set</em>,<em>get</em>,<em>edit</em>и другие.</p>
33
</ul><p>В программировании используется не такой большой набор слов, которые означают различные действия и используются при этом очень часто. К таким словам относятся модальные глаголы и слова типа<em>render</em>,<em>build</em>,<em>generate</em>,<em>show</em>,<em>enable</em>,<em>set</em>,<em>get</em>,<em>edit</em>и другие.</p>
34
<p>Сюда же можно отнести путаницу с порядком слов. Иногда встречаются подобные варианты:<em>diffBuild</em>, но правильно писать наоборот:<em>buildDiff</em>. Сначала "что делаем?" (какое действие), затем "над чем?" (предмет, на который направлено действие).</p>
34
<p>Сюда же можно отнести путаницу с порядком слов. Иногда встречаются подобные варианты:<em>diffBuild</em>, но правильно писать наоборот:<em>buildDiff</em>. Сначала "что делаем?" (какое действие), затем "над чем?" (предмет, на который направлено действие).</p>
35
<h3>Сокращения</h3>
35
<h3>Сокращения</h3>
36
<p>Сокращениями в программировании пользуются часто - это нормально. Слова бывают длинные и неудобные, а некоторые сокращения вообще - почти стандарт. Например, назвать<em>number</em>как<em>num</em>- это вполне типичная история. Но иногда встречаются крайне интересные варианты. Я видел такое:</p>
36
<p>Сокращениями в программировании пользуются часто - это нормально. Слова бывают длинные и неудобные, а некоторые сокращения вообще - почти стандарт. Например, назвать<em>number</em>как<em>num</em>- это вполне типичная история. Но иногда встречаются крайне интересные варианты. Я видел такое:</p>
37
<ul><li><em>empt</em>(сокращение от<em>empty</em>)</li>
37
<ul><li><em>empt</em>(сокращение от<em>empty</em>)</li>
38
<li><em>hid</em>(сокращение от<em>hide</em>)</li>
38
<li><em>hid</em>(сокращение от<em>hide</em>)</li>
39
</ul><p>Такое сокращение не просто не делает лучше - оно делает только хуже, так как полное слово внезапно становится неочевидным, да и прочитать такое имя бывает проблематично. Зачем сокращать на одну букву, мне не понятно, но делать так точно не стоит.</p>
39
</ul><p>Такое сокращение не просто не делает лучше - оно делает только хуже, так как полное слово внезапно становится неочевидным, да и прочитать такое имя бывает проблематично. Зачем сокращать на одну букву, мне не понятно, но делать так точно не стоит.</p>
40
<p>А вот длинные имена обычно оказываются хорошим выбором. Не надо их бояться. Например, в Rails есть функции со следующими названиями:<em>distance_of_time_in_words</em>или<em>option_groups_from_collection_for_select</em>.</p>
40
<p>А вот длинные имена обычно оказываются хорошим выбором. Не надо их бояться. Например, в Rails есть функции со следующими названиями:<em>distance_of_time_in_words</em>или<em>option_groups_from_collection_for_select</em>.</p>
41
<h3>Парные не парные</h3>
41
<h3>Парные не парные</h3>
42
<p>В программировании часто встречаются ситуации, для которых идеально подходят антонимы - слова, имеющие противоположный смысл. Например: начало-конец, новый-старый, до-после. И в таких ситуациях нужно уметь правильно подбирать эти слова. Например, какой антоним к слову<em>begin</em>? Правильный ответ:<em>end</em>, а не<em>finish</em>(антоним для<em>start</em>), как думают многие.</p>
42
<p>В программировании часто встречаются ситуации, для которых идеально подходят антонимы - слова, имеющие противоположный смысл. Например: начало-конец, новый-старый, до-после. И в таких ситуациях нужно уметь правильно подбирать эти слова. Например, какой антоним к слову<em>begin</em>? Правильный ответ:<em>end</em>, а не<em>finish</em>(антоним для<em>start</em>), как думают многие.</p>
43
<p>Я часто наблюдаю ситуацию, когда в коде только одно слово делают правильным, а второе остаётся нейтральным. Типичный пример: у нас есть старое значение и новое значение. Программист создаёт пару<em>value</em>и<em>newValue</em>. Но это неправильно. Проблема в том, что из этой пары не очевидна связь. Более того, нужно ещё умудриться догадаться, что под<em>value</em>подразумевается<em>oldValue</em>. А как мы помним, имя должно сразу говорить о своём смысле без необходимости додумывать.</p>
43
<p>Я часто наблюдаю ситуацию, когда в коде только одно слово делают правильным, а второе остаётся нейтральным. Типичный пример: у нас есть старое значение и новое значение. Программист создаёт пару<em>value</em>и<em>newValue</em>. Но это неправильно. Проблема в том, что из этой пары не очевидна связь. Более того, нужно ещё умудриться догадаться, что под<em>value</em>подразумевается<em>oldValue</em>. А как мы помним, имя должно сразу говорить о своём смысле без необходимости додумывать.</p>
44
<h3>Транслитерация</h3>
44
<h3>Транслитерация</h3>
45
<p>Самый короткий пункт. Имена в стиле<em>chislo</em>или<em>noda</em>говорят о том, что автор этого кода не умеет и не хочет пользоваться переводчиком.</p>
45
<p>Самый короткий пункт. Имена в стиле<em>chislo</em>или<em>noda</em>говорят о том, что автор этого кода не умеет и не хочет пользоваться переводчиком.</p>
46
<p>Расскажите в комментариях о своём опыте. Какие имена переменных вы встречали?</p>
46
<p>Расскажите в комментариях о своём опыте. Какие имена переменных вы встречали?</p>
47
<blockquote><h3>Дополнительные материалы</h3>
47
<blockquote><h3>Дополнительные материалы</h3>
48
<ul><li><a>Именование в программировании</a></li>
48
<ul><li><a>Именование в программировании</a></li>
49
</ul></blockquote>
49
</ul></blockquote>