Skip to content

Commit 2a57ea2

Browse files
committed
fixed typos and simplified explanation
**In chapter 01-10-01 try-catch** There were many mistakes. And some of sentences were correct, but they were "unnatural" in Ukrainian and make understanding more difficult.
1 parent a62746d commit 2a57ea2

2 files changed

Lines changed: 28 additions & 28 deletions

File tree

1-js/10-error-handling/1-try-catch/article.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ try {
3434

3535
Подивімося на декілька прикладів.
3636

37-
- Приклад без виключень: виводить `alert` `(1)` та `(2)`:
37+
- Приклад без помилки: виводить `alert` `(1)` та `(2)`:
3838

3939
```js run
4040
try {
@@ -51,15 +51,15 @@ try {
5151

5252
}
5353
```
54-
- Приклад з виключенням: виводить `(1)` та `(3)`:
54+
- Приклад з помилкою: виводить `(1)` та `(3)`:
5555

5656
```js run
5757
try {
5858
5959
alert('Початок блоку try'); // *!*(1) <--*/!*
6060
6161
*!*
62-
lalala; // помилка, змінна не визначена!
62+
lalala; // помилка, variable is not defined!
6363
*/!*
6464
6565
alert('Кінець блоку try (не буде виконано)'); // (2)
@@ -72,8 +72,8 @@ try {
7272
```
7373

7474

75-
````warn header="`try...catch` працює тільки з виключеннями, що виникають в під час роботи скрипту"
76-
Щоб блок `try...catch` спрацював, код повинен запускатися. Іншими словами, це повинен бути валідний JavaScript.
75+
````warn header="`try...catch` працює тільки з помилками, що виникають під час виконання скрипту"
76+
Щоб блок `try...catch` спрацював, код повинен запускатися. Іншими словами, це повинен бути валідний JavaScript код.
7777

7878
Це не спрацює, якщо код містить синтаксичні помилки, як-от незакриті фігурні дужки:
7979

@@ -87,12 +87,12 @@ try {
8787

8888
JavaScript рушій спочатку прочитує код і тільки потім виконує його. Помилки, що виникають у фазі читання називаються "помилки парсингу", вони не можуть бути обробленими і скрипти припиняють свою роботу. Це виникає через те, що рушій не може зрозуміти код.
8989

90-
Тому `try...catch` може тільки обробляти помилки, що виникають у правильному коді. Такі помилки називаються "помилки часу виконання" або "виключення".
90+
Тому `try...catch` може тільки обробляти помилки, що виникають у правильному коді. Такі помилки називаються "помилки під час виконання" (runtime errors) або "виключення" (exceptions).
9191
````
9292

9393

9494
````warn header="`try...catch` працює синхронно"
95-
Якщо виключення трапляється у "запланованому до виконання" коді, як `setTimeout`, тоді `try...catch` не зможе перехопити помилку:
95+
Якщо помилка трапляється у "запланованому до виконання" коді, як от в `setTimeout`, тоді `try...catch` не зможе перехопити помилку:
9696

9797
```js run
9898
try {
@@ -106,7 +106,7 @@ try {
106106

107107
Це відбувається через те, що функція буде виконана пізніше, коли рушій вже вийде з блоку `try...catch`.
108108

109-
Щоб перехопити виключення всередині функції запланованої до виконання, `try...catch` повинен бути всередині цієї функції:
109+
Щоб перехопити помилку всередині функції запланованої до виконання, `try...catch` повинен бути всередині тієї функції:
110110
```js run
111111
setTimeout(function() {
112112
try {
@@ -133,12 +133,12 @@ try {
133133
Для всіх вбудованих помилок об’єкт помилки має дві головні властивості:
134134

135135
`name`
136-
: Назва помилки. Наприклад, для невизначеної змінної назва буде `"ReferenceError"`.
136+
: Назва помилки. До прикладу, для неоголошеної змінної назва буде `"ReferenceError"`.
137137

138138
`message`
139139
: Текстове повідомлення з додатковою інформацією про помилку.
140140

141-
Існують інші властивості, що доступні в більшості оточень. Одна з найуживаніших та часто підтримується:
141+
Існують інші властивості, що доступні в більшості оточень. Одна з найуживаніших та часто підтримуваних:
142142

143143
`stack`
144144
: Поточний стек викликів: рядок з інформацією про послідовність вкладених викликів, що призвели до помилки. Використовується для налагодження.
@@ -155,7 +155,7 @@ try {
155155
alert(err.message); // lalala is not defined
156156
alert(err.stack); // ReferenceError: lalala is not defined at (...call stack)
157157
158-
// Також можливо вивести всю інформацію про помилку
158+
// Також можливо вивести помилку цілком
159159
// Помилку конвертовано в рядок формату "name: message"
160160
alert(err); // ReferenceError: lalala is not defined
161161
}
@@ -192,7 +192,7 @@ let json = '{"name":"Іван", "age": 30}'; // дані з серверу
192192
let user = JSON.parse(json); // трансформуємо текстове значення в JS об’єкт
193193
*/!*
194194
195-
// тепер user це об’єкт, що містить властивості з рядку
195+
// тепер user це об’єкт, що містить властивості з рядка
196196
alert( user.name ); // Іван
197197
alert( user.age ); // 30
198198
```
@@ -227,9 +227,9 @@ try {
227227
}
228228
```
229229

230-
У цьому разі блок `catch` використано тільки для виведення повідомлення про помилку, але може бути використаним іншим чином: відправити новий запит, запропонувати користувачу інші опції, відправити інформацію про помилку для логування та ін. Будь-який спосіб використання краще, ніж раптове припинення роботи.
230+
Тут блок `catch` використали тільки для виведення повідомлення про помилку, але можна було зробити й інші дії: відправити новий запит, запропонувати користувачу інші опції, відправити інформацію про помилку для логування та ін. Будь-який спосіб використання краще, ніж раптове припинення роботи без жодних пояснень.
231231

232-
## Створення та викидання власних типів помилок
232+
## Створення та вкидання наших власних помилок
233233

234234
Уявімо ситуацію, що `json` синтаксично правильний, але не містить необхідного поля `name`.
235235

@@ -250,21 +250,21 @@ try {
250250
}
251251
```
252252

253-
В такому разі `JSON.parse` відпрацює без виключень, але відсутність поля `name` є помилкою з нашої точки зору.
253+
В такому разі `JSON.parse` спрацює нормально і блок `catch` буде проігнорованим. Але з нашої точки зору в нас є помилка - відсутність поля `name`.
254254

255-
Ми будемо використовувати оператор `throw` для об’єднання способів обробки помилок.
255+
Для того, щоб уніфікувати обробку помилок, ми скористаємось оператором `throw`.
256256

257257
### Оператор "throw"
258258

259-
Оператор `throw` використовується для викидання помилки.
259+
Оператор `throw` (з англ. кидати, вкидати) використовується для вкидання помилки.
260260

261261
Оператор має синтаксис:
262262

263263
```js
264264
throw <об’єкт помилки>
265265
```
266266

267-
Рушій дозволяє використовувати будь-які значення як об’єкти помилки. Це може бути навіть примітивне значення, як число чи рядок, але краще використовувати об’єкти, що мають властивості `name` та `message` (для сумісності з вбудованим типом помилок).
267+
Суто технічо рушій JavaScript дозволяє передавати будь-які значення в якості об'єкту помилки. Це може бути навіть примітивне значення, як число чи рядок. Але краще використовувати об’єкти, що мають властивості `name` та `message` (для сумісності з вбудованим типом помилок).
268268
269269
JavaScript має багато вбудованих конструкторів для вбудованих помилок: `Error`, `SyntaxError`, `ReferenceError`, `TypeError` та інші. Також вони можуть бути використаними для створення об’єктів помилок.
270270
@@ -330,7 +330,7 @@ try {
330330
331331
У рядку `(*)` оператор `throw` генерує `SyntaxError` із заданим значенням поля `message`, таким же чином це зробив би JavaScript. Виконання коду в блоці `try` одразу припиняється і контроль передається в `catch`.
332332
333-
Тепер в блоці `catch` обробляються всі види помилок: від `JSON.parse` та інших випадків.
333+
Тепер в блоці `catch` обробляються всі види помилок: як від `JSON.parse`, так і користувацькі.
334334
335335
## Повторне викидання помилок
336336
@@ -355,7 +355,7 @@ try {
355355
356356
В нашому прикладі `try...catch` використовується для перехоплення помилок, що виникають у разі неповних даних. Але `catch` перехоплює *всі* типи помилок, що виникають в `try`. Тут виникає непередбачувана помилка, але все одно в повідомленні виводиться `"JSON Error"`. Це неправильна поведінка, що ускладнює налагодження.
357357
358-
Щоб уникати таких проблем, ми можемо використовувати підхід "повторного викидання помилок". Правило просте:
358+
Щоб уникати таких проблем, ми можемо використовувати підхід "повторного викидання помилок" (від англ. rethrowing). Правило просте:
359359
360360
**Блок `catch` повинен оброблювати тільки відомі помилки та повторно генерувати всі інші типи помилок.**
361361
@@ -491,7 +491,7 @@ try {
491491
492492
Блок `finally` використовується, якщо ми почали виконувати якусь роботу і хочемо завершити її в будь-якому разі.
493493
494-
Наприклад, ми хочемо виміряти час роботи функції, що рахує числа Фібоначчі. Для цього ми можемо почати вимірювання на початку виконання і закінчити після. А якщо протягом роботи функції виникне помилка? Зокрема, імплементація `fib(n)` нижче генерує виключення, якщо на вхід подано від’ємне або неціле число.
494+
Наприклад, ми хочемо виміряти час роботи функції, що рахує числа Фібоначчі. Для цього ми можемо почати вимірювання на початку виконання і закінчити після. А якщо протягом роботи функції виникне помилка? Зокрема, імплементація `fib(n)` нижче генерує помилки, якщо на вхід подано від’ємне або неціле число.
495495
496496
Конструкція `finally` -- відмінне місце для завершення вимірювання незалежно від результату.
497497
@@ -526,19 +526,19 @@ alert(result || "виникла помилка");
526526
alert( `виконання тривало ${diff}мс` );
527527
```
528528
529-
Якщо після запуску коду ввести в число `35` -- скрипт буде виконано без помилок, блок `finally` після блоку `try`. Але якщо ввести `-1` -- одразу буде згенеровано помилку, а виконання код займе `0ms`. Обидва вимірювання будуть проведені правильно.
529+
Ви можете перевірити запустивши код і ввести `35` в `prompt` - спершу буде виконано `try`, і за ним `finally`. І тоді ввести `-1`, і тоді буде негайна помилка і результат дасть `0мс`. Обидвоє вимірювань будуть виконані коректно.
530530
531531
Інакше кажучи, функція може завершуватися або через `return`, або через `throw`, але блок `finally` буде завжди виконано.
532532
533533
534534
```smart header="Змінні визначені всередині `try...catch...finally` є локальними"
535-
Зверніть увагу, змінні `result` та `diff`, в коді вище, оголошено "перед" `try...catch`.
535+
Зверніть увагу, змінні `result` та `diff`, в коді вище, оголошені перед `try...catch`.
536536
537537
Якщо ми оголосимо змінну за допомогою `let` в блоці `try`, вона залишиться видимою тільки всередині цього блоку.
538538
```
539539
540540
````smart header="`finally` та `return`"
541-
Частина `finally` виконається в *будь-якому* разі при виході з `try...catch`. Навіть якщо явно викликати `return`.
541+
Блок `finally` виконається в *будь-якому* разі при виході з `try...catch`. Навіть якщо явно викликати `return`.
542542
543543
У прикладі нижче вихід з блоку `try` відбувається за допомогою `return`. Тоді блок `finally` буде виконано одразу перед поверненням виконання до зовнішнього коду.
544544
@@ -583,7 +583,7 @@ function func() {
583583
## Глобальний catch
584584
585585
```warn header="Environment-specific"
586-
Інформація, що наведена в цій секції, не є частиною мови JavaScript.
586+
Інформація, що наведена в цій окремої секції, не є стандартом мови JavaScript.
587587
```
588588
589589
Припустимо, через помилку програміста виключення трапилося поза блоком `try...catch` і призвело до припинення роботи скрипту.
@@ -666,9 +666,9 @@ try {
666666
- `name` -- рядок з іменем помилки (назва конструктора помилки).
667667
- `stack` (нестандартна, але широко підтримувана) -- стек викликів на момент створення помилки.
668668
669-
Ми можемо пропустити отримання об’єкту помилки, якщо використати `catch {` замість `catch (err) {`.
669+
Ми можемо пропустити отримання об’єкту помилки написавши `catch {` замість `catch (err) {`.
670670
671-
Також ми можемо генерувати власні помилки за допомогою оператору `throw`. Технічно, будь-що можна передати аргументом в `throw`, але, зазвичай, використовується об’єкт, успадкований від вбудованого класу `Error`. Детальніше про розширення помилок в наступному розділі.
671+
Також ми можемо генерувати власні помилки за допомогою оператора `throw`. Технічно, будь-що можна передати аргументом в `throw`, але, зазвичай, використовується об’єкт, успадкований від вбудованого класу `Error`. Детальніше про розширення Error буде в наступному розділі.
672672
673673
*Повторне викидання* -- важливий шаблон в роботі з помилками: переважно блок `catch` знає як обробляти помилки певного типу, тому він повинен знову викидати невідомі типи помилок.
674674

0 commit comments

Comments
 (0)