You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+16-16Lines changed: 16 additions & 16 deletions
Original file line number
Diff line number
Diff line change
@@ -42,7 +42,7 @@ you shout when reading code](https://www.osnews.com/images/comics/wtfm.jpg)
42
42
43
43
И еще одна вещь: знание этих принципов не делает вас сразу лучшим разработчиком ПО, а их использование в
44
44
течение многих лет не гарантирует, что вы не будете совершать ошибки. Каждый кусок кода начинается как
45
-
черновик, как мокрый кусок глины который только постеменно приобретает свою форму. Не упрекайте себя при
45
+
черновик, как мокрый кусок глины который только постепенно приобретает свою форму. Не упрекайте себя при
46
46
первых набросках кода, которые нуждаются в улучшении. Улучшайте код вместо этого!
47
47
48
48
**[⬆ Вернуться в начало](#содержание)**
@@ -118,8 +118,8 @@ function getUser(): User;
118
118
119
119
### Используйте имена, доступные для поиска
120
120
121
-
Мы читаем больще кода, чем пишем. Это важно чтобы код, который мы пишем, был читаемым и достумным для поиска.
122
-
Не называйте переменные, которые в конечном итое имеют смысл только для наших программ мы вредим нашим читателям.
121
+
Мы читаем больше кода, чем пишем. Это важно чтобы код, который мы пишем, был читаемым и доступным для поиска.
122
+
Не называйте переменные, которые в конечном итоге имеют смысл только для наших программ мы вредим нашим читателям.
123
123
Делайте ваши имена доступными для поиска.
124
124
Такие инструменты, как [TSLint](https://palantir.github.io/tslint/rules/no-magic-numbers/) и [ESLint](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-magic-numbers.md)
125
125
могут помочь идентифицировать не названные константы.
Если имя вашего класса/типа/объекта говорит само за себя, не повторяйте его в вашем именни переменной.
194
+
Если имя вашего класса/типа/объекта говорит само за себя, не повторяйте его в вашем имени переменной.
195
195
196
196
**Плохо:**
197
197
@@ -303,12 +303,12 @@ class Projector {
303
303
304
304
### Аргументы функции (идеально два или меньше)
305
305
306
-
Ограничение колличества парамметров функции невероятно важно, потому что это делает тестирование ваших
306
+
Ограничение количества параметров функции невероятно важно, потому что это делает тестирование ваших
307
307
функций проще. Наличие более 3-х аргументов приводит к комбинаторному взрыву, где вы должны протестировать
308
308
множество вариантов с каждым отдельным аргументом
309
309
310
310
Один или два аргумента это идеальный случай, а три и более следует избегать, если это возможно.
311
-
Большое колличество аргументов лучше объеденять. Обычно если вы используете более двух аргументов, то ваша функция пытается
311
+
Большое количество аргументов лучше объеденять. Обычно если вы используете более двух аргументов, то ваша функция пытается
312
312
делать слишком много. В случаях когда это не так, то лучше использовать объект верхнего уровня.
313
313
314
314
Подумайте о том чтобы использовать объектные литералы, если вам необходимо много аргументов.
@@ -375,7 +375,7 @@ createMenu({
375
375
Это одно из самых важных правил в разработке ПО. Когда функции решают больше одной задачи,
376
376
их труднее объеденять, тестировать. Если вы сможете изолировать функцию так чтобы она выполняла только одну задачу,
377
377
в дальнейшем она может быть легко переработана, а ваш код будет чище. Если вы запомните только это правило из этого
378
-
руководства, то вы уже будете лучще многих разработчиков.
378
+
руководства, то вы уже будете лучше многих разработчиков.
379
379
380
380
**Плохо:**
381
381
@@ -555,7 +555,7 @@ function showManagerList(managers: Manager[]) {
555
555
}
556
556
```
557
557
558
-
**Хорощо:**
558
+
**Хорошо:**
559
559
560
560
```ts
561
561
classDeveloper {
@@ -595,7 +595,7 @@ function showEmployeeList(employee: Developer | Manager) {
595
595
596
596
Вы должны критически относиться к дублированию кода. Иногда существует компромисс между дублированием кода и увеличением
597
597
сложности, вводя новую абстракцию. Когда две реализации из двух разных модулей выглядят одинаково, но существуют в разных
598
-
доменах, дублирование может быть приемлемым и предпочтительным вариантом, нежели объеденений в общий код. Перенос логики
598
+
доменах, дублирование может быть приемлемым и предпочтительным вариантом, нежели объединений в общий код. Перенос логики
599
599
в общий код, вводит косвенную зависимость между двумя модулями.
600
600
601
601
**[⬆ back to top](#содержание)**
@@ -737,16 +737,16 @@ console.log(name);
737
737
738
738
В JavaScript примитивы передаются по значению, а объекты и массивы передаются по ссылке. В случае объектов или массивов,
739
739
если ваша функция вносит изменения в корзину покупок(массив), например при добавлении элемента в массив, то любая другая
740
-
функция использующаяя`корзину` массив будет зависеть от этого добавления. Это может быть как хорошо, так и плохо. Давайте
740
+
функция использующая`корзину` массив будет зависеть от этого добавления. Это может быть как хорошо, так и плохо. Давайте
741
741
представим плохую ситуации:
742
742
743
-
Пользователь нажимает кнопку "Купить" вызывующюю функцию `purchase` которая делает сетевой запрос и отправляет `корзину`
743
+
Пользователь нажимает кнопку "Купить" вызывающую функцию `purchase` которая делает сетевой запрос и отправляет `корзину`
744
744
массив на сервер. Если происходит плохое подключение к сети функция должна отправить повторный запрос. Теперь, если пользователь
745
745
случайно нажимает на кнопку "Добавить в корзину", но пока не хочет покупать товар? Если это произойдет и в этот момент начнется
746
746
запрос на сервер, то функция purchase отправит случайно добавленный элемент, так как он имеет ссылку на корзину покупок,
747
747
котора была изменена функцией `addItemToCart`. Путем добавления нежелательного элемента.
748
748
749
-
Хорошим бы рещением было бы что бы функция `addItemToCart` всегда клонировала бы массив `cart` редактировала его и
749
+
Хорошим бы решением было бы что бы функция `addItemToCart` всегда клонировала бы массив `cart` редактировала его и
750
750
возвращала клон. Это бы гарантировало, что никакие другие функции, использующие ссылку на массив корзины покупок,
751
751
не будут затронуты какими-либо изменениями.
752
752
@@ -928,7 +928,7 @@ if (!isEmailUsed(node)) {
928
928
929
929
Эта задача кажется невозможной. Большинство людей, впервые услышав это, говорят, "как я должен делать что-либо без
930
930
выражения `if`?". Ответ заключается в том, что во многих случаях для достижения тех же целей можно использовать
931
-
полиморфизм. Второй вопро обычно, "хорошо, замечательно, но почему я должен их избегать?" Ответ, предыдущая концепция
931
+
полиморфизм. Второй вопрос обычно, "хорошо, замечательно, но почему я должен их избегать?" Ответ, предыдущая концепция
932
932
чистого кода, которую вы узнали: функция должна выполнять только одну задачу. Когда у вас есть классы и функции,
933
933
содержащие конструкцию `if`, вы говорите своему пользователю, что ваша функция выполняет больше одной задачи.
934
934
Запомните, делать только одну задачу.
@@ -1563,7 +1563,7 @@ class UserNotifier {
1563
1563
1564
1564
### Предпочитайте композицию наследованию
1565
1565
1566
-
Как сказано в [Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) от банды черытех вы должны
1566
+
Как сказано в [Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) от банды четырех вы должны
1567
1567
*Предпочитать композицию наследованию* где можете. Есть много веских причин использовать наследование и много хороших
1568
1568
причин использовать композицию. Суть этого принципа в том, что если ваш ум инстинктивно идет на наследование,
1569
1569
попробуйте подумать, может ли композиция лучше смоделировать вашу проблему. В некоторых случаях может.
@@ -2561,7 +2561,7 @@ try {
2561
2561
2562
2562
Форматирование носит субъективный характер. Как и во многом собранном здесь, в вопросе форматирования нет жестких правил, которым вы обязаны следовать. Главное - *НЕ СПОРИТЬ* по поводу форматирования. Есть множество инструментов для автоматизации этого. Используйте один! Это трата времени и денег когда инженеры спорят о форматировании. Общее правило, которому стоит следовать *соблюдайте правила форматирования принятые в команде*
2563
2563
2564
-
Для TypeScript есть мощный инструмент под названием [TSLint](https://palantir.github.io/tslint/). Это статический анализ инструмент, который может помочь вам значительно улучшить читаемость и поддерживаемость вашего кода. Но лучще используйте [ESLint](https://github.com/typescript-eslint/typescript-eslint), так как TSLint больше не поддерживается.
2564
+
Для TypeScript есть мощный инструмент под названием [TSLint](https://palantir.github.io/tslint/). Это статический анализ инструмент, который может помочь вам значительно улучшить читаемость и поддерживаемость вашего кода. Но лучше используйте [ESLint](https://github.com/typescript-eslint/typescript-eslint), так как TSLint больше не поддерживается.
2565
2565
Есть готовые к использованию конфигурации TSLint и ESLint, на которые вы можете ссылаться в своих проектах:
2566
2566
2567
2567
-[TSLint Config Standard](https://www.npmjs.com/package/tslint-config-standard) - стандартный набор правил
@@ -2845,7 +2845,7 @@ type User = {
2845
2845
2846
2846
### Не заводите журнальных комментариев
2847
2847
2848
-
Не забывайте использовать системы контроля версий! Нет необходимости в мертвом коде, закоментированном коде и особенно в
2848
+
Не забывайте использовать системы контроля версий! Нет необходимости в мертвом коде, закомментированом коде и особенно в
2849
2849
журнальных комментариях. Используйте `gitlog`, чтобы получить историю!
0 commit comments