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: 1-js/03-code-quality/04-ninja-code/article.md
+27-27Lines changed: 27 additions & 27 deletions
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
4
4
```quote author="Конфуцій (Бесіди і судження)"
5
-
Навчання без міркування — даремне, міркування без навчання — небезпечне.
5
+
Навчання без міркування -- даремне, міркування без навчання -- небезпечне.
6
6
```
7
7
8
8
Ніндзя-програмісти минулого використовували ці хитрощі, щоб загострити розум тих, хто буде підтримувати їхній код.
@@ -11,19 +11,19 @@
11
11
12
12
Початківці часом використовують їх навіть краще за ніндзя-програмістів.
13
13
14
-
Уважно перечитайте ці хитрощі й вирішіть, хто ви є — ніндзя, початківець, чи може ґуру перевірки коду?
14
+
Уважно перечитайте ці хитрощі й вирішіть, хто ви є -- ніндзя, початківець, чи може ґуру перевірки коду?
15
15
16
16
17
17
```warn header="Обережно, іронія!"
18
18
Багато тих, хто намагався піти шляхом ніндзя. Мало тих, кому це вдалося.
19
19
```
20
20
21
21
22
-
## Стислість — сестра таланту
22
+
## Стислість -- сестра таланту
23
23
24
24
Пишіть якомога коротший код. Покажіть, наскільки ви розумні.
25
25
26
-
Нехай неочевидні мовні нюанси керують вами.
26
+
Нехай неочевидні особливості мови направляють вас.
27
27
28
28
Наприклад, розглянемо застосування тернарного оператора `'?'`:
29
29
@@ -34,7 +34,7 @@ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
34
34
35
35
Круто, справді? Якщо ви напишете щось подібне, то програміст, який натрапить на цей рядок і намагатиметься зрозуміти, яке ж значення має `i`, пізнає неабиякий дзен. І, врешті-решт, прийде до вас за просвітленням.
36
36
37
-
Скажіть йому, що коротше — це завжди краще. Допоможіть йому стати на шлях ніндзя.
37
+
Скажіть йому, що коротше -- це завжди краще. Допоможіть йому стати на шлях ніндзя.
38
38
39
39
## Однолітерні змінні
40
40
@@ -43,11 +43,11 @@ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
43
43
Ім’я, яке можна назвати, не є постійним ім’ям.
44
44
```
45
45
46
-
Ще один спосіб писати стислий код — використовувати однолітерні змінні. Наприклад: `a`, `b` або `c`.
46
+
Ще один спосіб писати стислий код -- використовувати однолітерні змінні. Наприклад: `a`, `b` або `c`.
47
47
48
-
Коротка змінна зникає в коді, наче ніндзя в лісі. Ніхто не зможе знайти її навіть через "пошук" редактора. І бодай її знайдуть, вони не зможуть "розшифрувати" за що саме відповідають змінні `a` чи `b`.
48
+
Коротка змінна зникає в коді, наче ніндзя в лісі. Ніхто не зможе знайти її навіть через "пошук" в редакторі. І бодай її знайдуть, вони не зможуть "розшифрувати" за що саме відповідають змінні `a` чи `b`.
49
49
50
-
Але є один виняток із правил. Справжній ніндзя ніколи не використовуватиме `i` як лічильник в циклі `"for"`. Де завгодно, тільки не тут! Озирніться — є багато інших екзотичних літер. Наприклад, `x` або `y`.
50
+
Але є один виняток із правил. Справжній ніндзя ніколи не використовуватиме `i` як лічильник в циклі `"for"`. Де завгодно, тільки не тут! Озирніться -- є багато інших екзотичних літер. Наприклад, `x` або `y`.
51
51
52
52
Екзотична змінна в ролі лічильника особливо доречна, коли тіло циклу займає одну-дві сторінки (чим більше, то краще). У такому випадку ті, хто зануриться глибоко в код циклу, не зможуть швидко здогадатись, що змінна `x` насправді є лічильником.
53
53
@@ -67,35 +67,35 @@ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
67
67
## Будьте абстрактними
68
68
69
69
```quote author="Лао-цзи (Дао де цзін)"
70
-
Великий квадрат не має кутів,
71
-
Великий глек довго ліпиться,
72
-
Великий звук не можна почути,
70
+
Великий квадрат не має кутів,<br>
71
+
Великий глек довго ліпиться,<br>
72
+
Великий звук не можна почути,<br>
73
73
Великий образ неозорий.
74
74
```
75
75
76
76
Обираючи ім’я, намагайтесь використовувати найбільш абстрактне слово. Прикладом може бути `obj`, `data`, `value`, `item`, `elem` тощо.
77
77
78
78
-**`data` є ідеальним варіантом для імені змінної.** Використовуйте його всюди, де можете. І справді, кожна змінна має *дані*, вірно?
79
79
80
-
А що робити, якщо ім’я `data` вже зайняте? Спробуйте `value`— воно також універсальне. Врешті-решт, кожна змінна набуває якесь *значення*.
80
+
А що робити, якщо ім’я `data` вже зайняте? Спробуйте `value`-- воно також універсальне. Врешті-решт, кожна змінна набуває якесь *значення*.
81
81
82
82
-**Добирайте ім’я змінним згідно з їхнім типом: `str`, `num`...**
83
83
84
84
Спробуйте. Той, що щойно став на шлях ніндзя, може засумніватися чи дійсно такі імена корисні. Авжеж!
85
85
86
86
Так, ім’я змінної дещо означає. Це допомагає зрозуміти, що ми використовуємо: рядок, число, чи щось ще. Проте коли сторонні люди намагатимуться зрозуміти код, вони будуть здивовані, що інформація про те, що саме містить змінна, відсутня. У результаті вони не зможуть змінити ваш добре обміркований код.
87
87
88
-
Тип змінної досить легко знайти під час налаштування. Але що означає її ім’я? Яку саме строку/число вона зберігає?
88
+
Тип змінної досить легко знайти під час налаштування. Але що означає її ім’я? Який саме рядок/число вона зберігає?
89
89
90
90
Жодного шансу дізнатися про це без тривалої медитації!
91
91
92
-
-**Але що робити, коли й такі імена скінчились?** Просто додайте число: `data1`, `item2`, `elem5`...
92
+
-**Але що робити, коли й такі імена скінчились?** Просто додайте число: `data1, item2, elem5`...
93
93
94
94
## Перевірка уваги
95
95
96
96
Тільки дуже уважний програміст повинен мати шанс зрозуміти ваш код. Проте як це перевірити?
97
97
98
-
**Один зі способів — використання схожих імен змінних, наприклад `date` і `data`.**
98
+
**Один зі способів -- використання схожих імен змінних, наприклад `date` і `data`.**
99
99
100
100
Змішуйте їх всюди, де це можливо.
101
101
@@ -110,11 +110,11 @@ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
110
110
111
111
Використання *схожих* імен для *однакових* речей зробить життя цікавішим і продемонструє рівень вашої креативності.
112
112
113
-
Наприклад, розглянемо префікси функцій. Якщо функція виводить повідомлення на екран — почніть ім’я з `display…`, як то `displayMessage`. А для іншої функції, що показуватиме на екрані ще щось (скажімо, ім’я користувача), оберіть ім’я з `show…` (наприклад, `showName`).
113
+
Наприклад, розглянемо префікси функцій. Якщо функція виводить повідомлення на екран -- почніть її ім’я з `display…`, як то `displayMessage`. А для іншої функції, що показуватиме на екрані ще щось (скажімо, ім’я користувача), почніть ім’я з `show…` (наприклад, `showName`).
114
114
115
115
Натякніть, що є деяка тонка відмінність між цими функціями, хоча насправді її немає.
116
116
117
-
Домовтесь зі своїми ніндзя-колегами, що якщо Іван починає називати функції, що показують щось, використовуючи `display...`, тоді Петро може використовувати `render..`, а Ганна —`paint...`. Зауважте, наскільки цікавим та різноманітним став код.
117
+
Домовтесь зі своїми ніндзя-колегами, що якщо Микола починає називати функції, що показують щось, використовуючи `display...`, тоді Петро може використовувати `render..`, а Ганна --`paint...`. Зауважте, наскільки цікавим та різноманітним став код.
118
118
119
119
А тепер коронний прийом!
120
120
@@ -125,9 +125,9 @@ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
125
125
## Використовуйте імена повторно
126
126
127
127
```quote author="Лао-цзи (Дао де цзін)"
128
-
При встановленні порядку
129
-
з’явилися імена.
130
-
Оскільки виникли імена,
128
+
При встановленні порядку<br>
129
+
з’явилися імена.<br>
130
+
Оскільки виникли імена,<br>
131
131
потрібно знати межу їх використання.
132
132
```
133
133
@@ -157,7 +157,7 @@ function ninjaFunction(elem) {
157
157
158
158
Таке трапляється доволі часто. Вбивчий прийом, навіть проти досвідчених ніндзь.
159
159
160
-
## Підкреслення — це весело
160
+
## Підкреслення -- це весело
161
161
162
162
Ставте підкреслення `_` та `__` перед іменами змінних. Наприклад, `_name` або `__value`. Краще буде, якщо тільки ви будете розуміти їхнє значення. А ще краще, щоб ніякого значення не було зовсім, додавайте їх задля розваги. Або використовуйте різні значення в різних місцях.
163
163
@@ -169,7 +169,7 @@ function ninjaFunction(elem) {
169
169
170
170
Нехай усі бачать, наскільки величні ваші сутності! Читач обов’язково зрадіє таким іменам, як `superElement`, `megaFrame` та `niceItem`.
171
171
172
-
Справді, з одного боку, дещо все ж таки написано: `super..`, `mega..`, `nice..`. Але, з іншого боку — це не пояснює нічого. Той, хто читатиме ваш код, витратить не одну годину свого оплаченого робочого часу на медитацію і пошуки прихованого значення цих слів.
172
+
Справді, з одного боку, дещо все ж таки написано: `super..`, `mega..`, `nice..`. Але, з іншого боку -- це не пояснює нічого. Той, хто читатиме ваш код, витратить не одну годину свого оплаченого робочого часу на медитацію і пошуки прихованого значення цих слів.
173
173
174
174
175
175
## Перекриття зовнішніх змінних
@@ -217,15 +217,15 @@ function render() {
217
217
## Могутні функції!
218
218
219
219
```quote author="Лао-цзи (Дао де цзін)"
220
-
Вічне Дао пронизує Собою все.
220
+
Вічне Дао пронизує Собою все.<br>
221
221
Воно є і праворуч, і ліворуч.
222
222
```
223
223
224
224
Не треба обмежувати алгоритм функції лише тим, що пов’язано з її ім’ям. Мисліть ширше.
225
225
226
226
Наприклад, функція `validateEmail(email)` може (окрім перевірки адреси електронної пошти на відповідність правилам) показувати повідомлення про помилку та пропонувати ввести нову адресу.
227
227
228
-
Додаткові дії не мусять бути зрозумілими з імені функції. Справжній ніндзя-програміст зробить їх також неочевидними й в самому коді.
228
+
Додаткові дії не мусять бути зрозумілими з ім'я функції. Справжній ніндзя-програміст зробить їх також неочевидними й в самому коді.
229
229
230
230
**Поєднання декількох дій в одну захищає ваш код від повторного використання.**
231
231
@@ -235,6 +235,6 @@ function render() {
235
235
236
236
Всі "поради", зазначені вище, здобуті з реального коду... Іноді написаного доволі досвідченими програмістами. Можливо, навіть досвідченішими за вас ;)
237
237
238
-
- Дотримуйтесь деяких з цих порад — і у вашому коді буде повно несподіванок.
239
-
- Дотримуйтесь більшості з цих порад — і ваш код буде дійсно вашим; ніхто не захоче його читати, тим паче — змінювати.
240
-
- Дотримуйтесь усіх порад — і ваш код стане неоціненним уроком для молодих програмістів, які шукають просвітлення.
238
+
- Дотримуйтесь деяких з цих порад -- і у вашому коді буде повно несподіванок.
239
+
- Дотримуйтесь більшості з цих порад -- і ваш код буде дійсно вашим; ніхто не захоче його читати, тим паче -- змінювати.
240
+
- Дотримуйтесь усіх порад -- і ваш код стане безцінним уроком для молодих програмістів, які шукають просвітлення.
0 commit comments