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/10-error-handling/1-try-catch/article.md
+14-9Lines changed: 14 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -51,7 +51,7 @@ try {
51
51
52
52
}
53
53
```
54
-
- Приклад з помилкою:виводить`(1)` та `(3)`:
54
+
- Приклад з помилкою:винятком`(1)` та `(3)`:
55
55
56
56
```js run
57
57
try {
@@ -72,7 +72,7 @@ try {
72
72
```
73
73
74
74
75
-
````warn header="`try...catch` працює тільки з помилками, що виникають під час виконання скрипту"
75
+
````warn header="`try...catch` працює тільки з винятками, що виникають під час виконання скрипту"
76
76
Щоб блок `try...catch` спрацював, код повинен запускатися. Іншими словами, це повинен бути валідний JavaScript код.
77
77
78
78
Це не спрацює, якщо код містить синтаксичні помилки, як-от незакриті фігурні дужки:
@@ -87,12 +87,17 @@ try {
87
87
88
88
JavaScript рушій спочатку прочитує код і тільки потім виконує його. Помилки, що виникають у фазі читання називаються "помилки парсингу", вони не можуть бути обробленими і скрипти припиняють свою роботу. Це виникає через те, що рушій не може зрозуміти код.
89
89
90
-
Тому `try...catch` може тільки обробляти помилки, що виникають у правильному коді. Такі помилки називаються "помилки під час виконання" (runtime errors) або "виключення" (exceptions).
90
+
Тому `try...catch` може тільки обробляти помилки, що виникають у правильному коді. Такі помилки називають "помилками під час виконання" (runtime errors) або "винятками" (exceptions).
91
+
````
92
+
93
+
94
+
````smart header="Нюанс перекладу"
95
+
В українській мові відсутній точний відповідник англійського слова "exception". Слово "виняток" для україномовної людини здається не таким зручним і зрозумілим як слово "помилка". І тим не менш, слово помилка вживають по відношенню до всіх помилок. А для окремого підвиду помилок, конкретно для помилок, що стаються під час виконання коду, іноді використовують слово виняток. Тому коли нижче бачитимете слово "виняток", просто знайте, що мова йде про помилку.
91
96
````
92
97
93
98
94
99
````warn header="`try...catch` працює синхронно"
95
-
Якщо помилка трапляється у "запланованому до виконання" коді, як от в `setTimeout`, тоді `try...catch` не зможе перехопити помилку:
100
+
Якщо виняток трапляється у "запланованому до виконання" коді, як от в `setTimeout`, тоді `try...catch` не зможе перехопити помилку:
96
101
97
102
```js run
98
103
try {
@@ -106,7 +111,7 @@ try {
106
111
107
112
Це відбувається через те, що функція буде виконана пізніше, коли рушій вже вийде з блоку `try...catch`.
108
113
109
-
Щоб перехопити помилку всередині функції запланованої до виконання, `try...catch` повинен бути всередині тієї функції:
114
+
Щоб перехопити виняток всередині функції запланованої до виконання, `try...catch` повинен бути всередині тієї функції:
110
115
```js run
111
116
setTimeout(function() {
112
117
try {
@@ -250,7 +255,7 @@ try {
250
255
}
251
256
```
252
257
253
-
В такому разі `JSON.parse` спрацює нормально і блок `catch` буде проігнорованим. Але з нашої точки зору в нас є помилка- відсутність поля `name`.
258
+
В такому разі `JSON.parse` спрацює без винятків і блок `catch` буде проігнорованим. Але помилка в нас всеодно є- відсутність поля `name`.
254
259
255
260
Для того, щоб уніфікувати обробку помилок, ми скористаємось оператором `throw`.
256
261
@@ -412,7 +417,7 @@ try {
412
417
}
413
418
```
414
419
415
-
Помилка, що виникає в рядку `(*)`, не проходить перевірку в блоці `catch` і повторно викидається. Виключення, після повторної генерації, може знову бути перехопленим конструкцією `try...catch` (якщо вона існує) або призведе до аварійного припинення роботи скрипту.
420
+
Помилка, що виникає в рядку `(*)`, не проходить перевірку в блоці `catch` і повторно викидається. Виняток, після повторної генерації, може знову бути перехопленим конструкцією `try...catch` (якщо вона існує) або призведе до аварійного припинення роботи скрипту.
416
421
417
422
Така поведінка блоку `catch` дає змогу перехоплювати тільки ті помилки, для яких передбачено правила обробки, та "пропускати" решту типів помилок.
418
423
@@ -491,7 +496,7 @@ try {
491
496
492
497
Блок `finally` використовується, якщо ми почали виконувати якусь роботу і хочемо завершити її в будь-якому разі.
493
498
494
-
Наприклад, ми хочемо виміряти час роботи функції, що рахує числа Фібоначчі. Для цього ми можемо почати вимірювання на початку виконання і закінчити після. А якщо протягом роботи функції виникне помилка? Зокрема, імплементація `fib(n)` нижче генерує помилки, якщо на вхід подано від’ємне або неціле число.
499
+
Наприклад, ми хочемо виміряти час роботи функції, що рахує числа Фібоначчі. Для цього ми можемо почати вимірювання на початку виконання і закінчити після. А якщо протягом роботи функції виникне помилка? Зокрема, імплементація `fib(n)` нижче генерує винятки, якщо на вхід подано від’ємне або неціле число.
495
500
496
501
Конструкція `finally` -- відмінне місце для завершення вимірювання незалежно від результату.
497
502
@@ -586,7 +591,7 @@ function func() {
586
591
Інформація, що наведена в цій окремої секції, не є стандартом мови JavaScript.
587
592
```
588
593
589
-
Припустимо, через помилку програміста виключення трапилося поза блоком `try...catch` і призвело до припинення роботи скрипту.
594
+
Припустимо, через помилку програміста виняток трапився поза блоком `try...catch` і призвело до припинення роботи скрипту.
590
595
591
596
Як нам вчинити в такому випадку? Ми можемо логувати помилку, виводити повідомлення користувачу (переважно, користувачі не повинні бачити повідомлення про помилки) тощо.
0 commit comments