diff --git a/README-RU.md b/README-RU.md new file mode 100644 index 00000000..316cf797 --- /dev/null +++ b/README-RU.md @@ -0,0 +1,377 @@ +

+ + Шпаргалка по именованию + +

+ +[English](./README.md) | Русский + +# Шпаргалка по именованию + +- [Английский язык](#english-language) +- [Соглашение об именовании](#naming-convention) +- [S-I-D](#s-i-d) +- [Избегайте сокращений](#avoid-contractions) +- [Избегайте дублирования контекста](#avoid-context-duplication) +- [Отражайте ожидаемый результат](#reflect-the-expected-result) +- [Именование функций](#naming-functions) + - [A/HC/LC pattern](#ahclc-pattern) + - [Действия](#actions) + - [Контекст](#context) + - [Префиксы](#prefixes) +- [Единственное и множественное число](#singular-and-plurals) + +--- + +Называть вещи по именам очень трудно. Этa шпаргалка пытается сделать это проще. + +Хотя эти предложения можно применить к любому языку программирования, я буду использовать JavaScript, чтобы проиллюстрировать их на практике. + +## Английский язык + +Используйте английский язык, когда именуете ваши переменные и функции. + +```js +/* Плохо */ +const primerNombre = 'Gustavo' +const amigos = ['Kate', 'John'] + +/* Хорошо */ +const firstName = 'Gustavo' +const friends = ['Kate', 'John'] +``` + +> Нравится вам это или нет, но английский является доминирующим языком в программировании: синтаксис почти всех языков программирования написан на английском, а также как бесчисленное число документации и обучающих материалов. Написав свой код на английском языке, вы значительно повысите его связность. + +## Соглашение об именовании + +Выберите **один** способ именования и следуйте ему. Это может быть `camelCase`, `PascalCase`, `snake_case`, или что-нибудь еще, главное, чтобы оно оставалось последовательным. Многие языки программирования имеют свои собственные традиции соглашения имен; ознакомьтесь с документацией для вашего языка или изучите некоторые популярные репозитории на Github! + +```js +/* Плохо */ +const page_count = 5 +const shouldUpdate = true + +/* Хорошо */ +const pageCount = 5 +const shouldUpdate = true + +/* Ещё лучше */ +const page_count = 5 +const should_update = true +``` + +## S-I-D + +Имя должно быть _коротким_ (S, _short_), _интуитивно понятным_ (I, _intuitive_) и _ёмким_ (D, _descriptive_) + +- **Коротким**. Набор имени не должен занимать много времени и, следовательно, запоминаться; +- **Интуитивно понятным**. Имя должно читаться естественно, как можно ближе к обычной речи; +- **Ёмким**. Имя должно отражать то, что оно делает/обладает наиболее эффективным способом. + +```js +/* Плохо */ +const a = 5 // "a" может означать всё что угодно +const isPaginatable = a > 10 // "Paginatable" звучит абсолютно "неестественно" +const shouldPaginatize = a > 10 // Придуманные глаголы - это так весело! + +/* Хорошо */ +const postCount = 5 +const hasPagination = postCount > 10 +const shouldPaginate = postCount > 10 // альтернативно +``` + +## Избегайте сокращений + +**Не** используйте сокращения. Они не приводят ни к чему, кроме снижения удобочитаемости кода. Найти короткое, ёмкое имя может быть тяжело, но сокращение не является оправданием для того, чтобы не делать этого. + +```js +/* Плохо */ +const onItmClk = () => {} + +/* Хорошо */ +const onItemClick = () => {} +``` + +## Избегайте дублирования контекста + +Имя не должно дублировать контекст, в котором оно определено. Всегда удаляйте контекст из имени, если это не ухудшает его удобочитаемость. + +```js +class MenuItem { + /* Имя метода дублирует контекст (здесь он определён как "MenuItem") */ + handleMenuItemClick = (event) => { ... } + + /* Читается лучше `MenuItem.handleClick()` */ + handleClick = (event) => { ... } +} +``` + +## Отражайте ожидаемый результат + +Имя должно отражать ожидаемый результат. + +```jsx +/* Плохо */ +const isEnabled = itemCount > 3 +return