Skip to content

Commit fcd2575

Browse files
authored
Improved translation (#673)
1 parent b6d0f60 commit fcd2575

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

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

+18-18
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ try {
227227
}
228228
```
229229

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

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

@@ -264,7 +264,7 @@ try {
264264
throw <об’єкт помилки>
265265
```
266266

267-
Рушії дозволяє використовувати будь-які значення як об’єкти помилки. Це може бути навіть примітивне значення, як число чи рядок, але краще використовувати об’єкти, що мають властивості `name` та `message` (для сумісності з вбудованим типом помилок).
267+
Рушій дозволяє використовувати будь-які значення як об’єкти помилки. Це може бути навіть примітивне значення, як число чи рядок, але краще використовувати об’єкти, що мають властивості `name` та `message` (для сумісності з вбудованим типом помилок).
268268

269269
JavaScript має багато вбудованих конструкторів для вбудованих помилок: `Error`, `SyntaxError`, `ReferenceError`, `TypeError` та інші. Також вони можуть бути використаними для створення об’єктів помилок.
270270

@@ -351,7 +351,7 @@ try {
351351
}
352352
```
353353

354-
Звичайно таке можливо! Програмісти теж помиляються. Навіть програми з відкритим кодом, що використовуються десятиріччями можуть раптово виявитися вразливими.
354+
Звичайно таке можливо! Програмісти теж помиляються. Навіть програми з відкритим кодом, що використовуються десятиріччями, можуть раптово виявитися вразливими.
355355

356356
В нашому прикладі `try...catch` використовується для перехоплення помилок, що виникають у разі неповних даних. Але `catch` перехоплює *всі* типи помилок, що виникають в `try`. Тут виникає непередбачувана помилка, але все одно в повідомленні виводиться `"JSON Error"`. Це неправильна поведінка, що ускладнює налагодження.
357357

@@ -374,14 +374,14 @@ try {
374374
*!*
375375
if (err instanceof ReferenceError) {
376376
*/!*
377-
alert('ReferenceError'); // "ReferenceError" помилка доступу до невизначеної змінної
377+
alert('ReferenceError'); // "ReferenceError": помилка доступу до невизначеної змінної
378378
}
379379
}
380380
```
381381

382382
Для визначення класу помилки можливо перевірити властивість `err.name`. Всі вбудовані помилки мають її. Також можна перевірити значення `err.constructor.name`.
383383

384-
В коді нижче, щоб `catch` опрацьовував тільки `SyntaxError` ми "повторно викидаємо" помилки інших типів.
384+
У коді нижче, щоб `catch` опрацьовував тільки `SyntaxError`, ми "повторно викидаємо" помилки інших типів.
385385

386386
```js run
387387
let json = '{ "age": 30 }'; // неповні дані
@@ -412,9 +412,9 @@ try {
412412
}
413413
```
414414

415-
Помилка, що виникає в рядку `(*)`, не проходить перевірку в блоці `catch` й повторно викидається. Виключення, після повторної генерації, може знову бути перехопленим конструкцією `try...catch` (якщо вона існує) або призведе до аварійного припинення роботи скрипту.
415+
Помилка, що виникає в рядку `(*)`, не проходить перевірку в блоці `catch` і повторно викидається. Виключення, після повторної генерації, може знову бути перехопленим конструкцією `try...catch` (якщо вона існує) або призведе до аварійного припинення роботи скрипту.
416416

417-
Така поведінка блоку `catch` дає змогу перехоплювати тільки помилки, для яких передбачено правила обробки та "пропускати" решту типів помилок.
417+
Така поведінка блоку `catch` дає змогу перехоплювати тільки ті помилки, для яких передбачено правила обробки, та "пропускати" решту типів помилок.
418418

419419
Приклад нижче демонструє, як реалізувати перехоплення таких помилок ще одним рівнем `try...catch`:
420420

@@ -493,7 +493,7 @@ try {
493493

494494
Наприклад, ми хочемо виміряти час роботи функції, що рахує числа Фібоначчі. Для цього ми можемо почати вимірювання на початку виконання і закінчити після. А якщо протягом роботи функції виникне помилка? Зокрема, імплементація `fib(n)` нижче генерує виключення, якщо на вхід подано від’ємне або неціле число.
495495

496-
Конструкція `finally` відмінне місце для завершення вимірювання незалежно від результату.
496+
Конструкція `finally` -- відмінне місце для завершення вимірювання незалежно від результату.
497497

498498
Блок `finally` гарантує, що час буде виміряно правильно як в ситуації успішного виконання, так і в разі помилки.
499499

@@ -528,13 +528,13 @@ alert( `виконання тривало ${diff}мс` );
528528

529529
Якщо після запуску коду ввести в число `35` -- скрипт буде виконано без помилок, блок `finally` після блоку `try`. Але якщо ввести `-1` -- одразу буде згенеровано помилку, а виконання код займе `0ms`. Обидва вимірювання будуть проведені правильно.
530530

531-
Інакше кажучи, функція може завершуватися через або `return`, або `throw`, але блок `finally` буде завжди виконано.
531+
Інакше кажучи, функція може завершуватися або через `return`, або через `throw`, але блок `finally` буде завжди виконано.
532532

533533

534534
```smart header="Змінні визначені всередині `try...catch...finally` є локальними"
535535
Зверніть увагу, змінні `result` та `diff`, в коді вище, оголошено "перед" `try...catch`.
536536
537-
Якщо ми оголосимо змінну за допомогою `let` в блоці `try` вона залишиться видимою тільки всередині цього блоку.
537+
Якщо ми оголосимо змінну за допомогою `let` в блоці `try`, вона залишиться видимою тільки всередині цього блоку.
538538
```
539539

540540
````smart header="`finally` та `return`"
@@ -573,24 +573,24 @@ function func() {
573573
try {
574574
// ...
575575
} finally {
576-
// закінчити задачу навіть, якщо все раптово припинило роботу
576+
// закінчити задачу, навіть якщо все раптово припинило роботу
577577
}
578578
}
579579
```
580-
В коді вище помилка виникає всередині `try` та завжди передається вище в стеку викликів через відсутність `catch`, але `finally` виконається до того, як потік виконання вийде з функції.
580+
У коді вище помилка виникає всередині `try` та завжди передається вище в стеку викликів через відсутність `catch`, але `finally` виконається до того, як потік виконання вийде з функції.
581581
````
582582

583583
## Глобальний catch
584584

585585
```warn header="Environment-specific"
586-
Інформація, що наведено в цій секції не є частиною мови JavaScript.
586+
Інформація, що наведена в цій секції, не є частиною мови JavaScript.
587587
```
588588

589589
Припустимо, через помилку програміста виключення трапилося поза блоком `try...catch` і призвело до припинення роботи скрипту.
590590

591591
Як нам вчинити в такому випадку? Ми можемо логувати помилку, виводити повідомлення користувачу (переважно, користувачі не повинні бачити повідомлення про помилки) тощо.
592592

593-
Специфікація не згадує таку можливість, але оточення, зазвичай, надають таку функцію для зручності. Наприклад, Node.js дозволяє викликати [`process.on("uncaughtException")`](https://nodejs.org/api/process.html#process_event_uncaughtexception) для цього. В браузері можна присвоїти функцію спеціальній властивості [window.onerror](mdn:api/GlobalEventHandlers/onerror), що виконається, коли виникне помилка.
593+
Специфікація не згадує про таку можливість, але оточення, зазвичай, надають таку функцію для зручності. Наприклад, Node.js дозволяє викликати [`process.on("uncaughtException")`](https://nodejs.org/api/process.html#process_event_uncaughtexception) для цього. У браузері можна присвоїти функцію спеціальній властивості [window.onerror](mdn:api/GlobalEventHandlers/onerror), що виконається, коли виникне помилка.
594594

595595
Синтаксис:
596596

@@ -607,7 +607,7 @@ window.onerror = function(message, url, line, col, error) {
607607
: URL скрипту, де трапилась помилка.
608608

609609
`line`, `col`
610-
: Номер рядку та колонки, де трапилась помилка.
610+
: Номери рядку та колонки, де трапилась помилка.
611611

612612
`error`
613613
: Об’єкт помилки.
@@ -632,13 +632,13 @@ window.onerror = function(message, url, line, col, error) {
632632

633633
Глобальний обробник `window.onerror` не передбачений для відновлювання роботи скрипту, а тільки відправлення повідомлення про помилку розробникам.
634634

635-
Для логування помилок в таких випадках існують спеціальні вебсервіси: <https://errorception.com> чи <https://www.muscula.com>.
635+
Для логування помилок у таких випадках існують спеціальні вебсервіси: <https://errorception.com> чи <https://www.muscula.com>.
636636

637637
Вони працюють наступним чином:
638638

639639
1. Розробник реєструється в сервісі та отримує JS скрипт (чи URL скрипту), який потрібно додати на сторінку.
640640
2. Цей скрипт встановлює власну функцію в `window.onerror`.
641-
3. Коли трапляється помилка скрипт відправляє мережевий запит до цього сервісу.
641+
3. Коли трапляється помилка, скрипт відправляє мережевий запит до цього сервісу.
642642
4. Розробник може зайти в сервіс та переглядати отримані помилки.
643643

644644
## Підсумки
@@ -672,4 +672,4 @@ try {
672672

673673
*Повторне викидання* -- важливий шаблон в роботі з помилками: переважно блок `catch` знає як обробляти помилки певного типу, тому він повинен знову викидати невідомі типи помилок.
674674

675-
Навіть, якщо ми не використовуємо `try...catch`, більшість середовищ дозволяють встановити "глобальний" обробник помилок. В браузерах це `window.onerror`.
675+
Навіть якщо ми не використовуємо `try...catch`, більшість середовищ дозволяють встановити "глобальний" обробник помилок. В браузерах це `window.onerror`.

0 commit comments

Comments
 (0)