10.1 Блок try...catch
Обробка винятків — важливий аспект програмування, який допомагає покращити стійкість та надійність коду. У JavaScript для обробки винятків використовуються ключові слова try, catch, finally і throw. У лекції ми розглянемо ці ключові слова, їх синтаксис та приклади використання.
1. Блок try...catch
Конструкція try...catch використовується для обробки помилок, які виникають у блоці коду try. Якщо в блоці try виникає помилка, управління передається до блоку catch, де помилка може бути оброблена.
Синтаксис:
try {
// Код, який може викликати виняток
} catch (error) {
// Код для обробки винятку
}
У цьому прикладі, хоча ділення на нуль не викликає помилку в JavaScript, якщо б це була інша помилка (наприклад, доступ до невизначеної змінної), блок catch обробив би її:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('Виникла помилка:', error);
}
10.2 Блок finally
Блок finally використовується для виконання коду, який має бути виконаний незалежно від того, виникла помилка у блоці try чи ні. Блок finally йде після блоку catch.
Синтаксис:
try {
// Код, який може викликати виняток
} catch (error) {
// Код для обробки винятку
} finally {
// Код, який виконається у будь-якому разі
}
У цьому прикладі повідомлення This will always execute. буде виведене незалежно від того, виникла помилка чи ні:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('Виникла помилка:', error);
} finally {
console.log('Це завжди виконається.');
}
10.3 Оператор throw
Оператор throw використовується для явного викидання винятків. З його допомогою можна викидати користувацькі помилки.
Синтаксис:
throw expression;
Де:
expression: будь-яке вираження або об'єкт, який буде викинутий як виняток
Приклад використання
У цьому прикладі викидається помилка, якщо спробувати розділити на нуль, і блок catch обробляє цю помилку:
function divide(a, b) {
if (b === 0) {
throw new Error('Ділення на нуль не дозволено.');
}
return a / b;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error('Виникла помилка:', error.message);
}
10.4 Розширені приклади та використання
Приклад 1: Множинні винятки
Іноді у блоці try можуть виникати різні типи помилок. Ви можете обробляти їх по-різному, використовуючи властивості об'єкта помилки.
У цьому прикладі ми обробляємо синтаксичну помилку JSON окремо від інших можливих помилок:
try {
JSON.parse('{ malformed JSON string }');
} catch (error) {
if (error instanceof SyntaxError) {
console.error('Синтаксична помилка JSON:', error.message);
} else {
console.error('Неочікувана помилка:', error);
}
} finally {
console.log('Спроба парсингу завершена.');
}
Приклад 2: Вкладені блоки try...catch
Можна використовувати вкладені блоки try...catch для більш тонкої обробки помилок.
У цьому прикладі помилка, яка виникає у першому блоці try, обробляється внутрішнім блоком catch, який потім повторно викидає помилку для обробки зовнішнім блоком catch:
try {
try {
let result = divide(10, 0);
console.log(result);
} catch (innerError) {
console.error('Внутрішній catch:', innerError.message);
throw innerError;
}
} catch (outerError) {
console.error('Зовнішній catch:', outerError.message);
} finally {
console.log('Вкладений try...catch завершено.');
}
function divide(a, b) {
if (b === 0) {
throw new Error('Ділення на нуль не дозволено.');
}
return a / b;
}
Приклад 3: Використання finally для звільнення ресурсів
Блок finally корисний для звільнення ресурсів, таких як закриття файлів або завершення мережевих з'єднань.
У цьому прикладі файл завжди буде закритий, незалежно від того, виникла помилка при його читанні чи ні:
function readFile(filePath) {
let file;
try {
file = openFile(filePath); // Функція, яка відкриває файл
// Робота з файлом
} catch (error) {
console.error('Помилка читання файлу:', error.message);
} finally {
if (file) {
closeFile(file); // Функція, яка закриває файл
}
console.log('Обробка файлу завершена.');
}
}
function openFile(path) {
// Логіка відкриття файлу
}
function closeFile(file) {
// Логіка закриття файлу
}
readFile('path/to/file.txt');
Обробка винятків у JavaScript із використанням try, catch, finally і throw дозволяє створювати більш надійні та стійкі додатки. Розуміння та правильне використання цих конструкцій допомагає ефективно управляти помилками, звільняти ресурси та покращувати користувацький досвід.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ