HTML Diff
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) =&gt; genDiff(value)</li>
30 <ul><li>diff(value) =&gt; genDiff(value)</li>
31 <li>parser(data) =&gt; parse(data)</li>
31 <li>parser(data) =&gt; parse(data)</li>
32 <li>value(user) =&gt; getValue(user)</li>
32 <li>value(user) =&gt; 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>