JavaRush /Курси /Frontend SELF UA /Обробка винятків

Обробка винятків

Frontend SELF UA
Рівень 36 , Лекція 4
Відкрита

10.1 Блок try...catch

Обробка винятків — важливий аспект програмування, який допомагає покращити стійкість та надійність коду. У JavaScript для обробки винятків використовуються ключові слова try, catch, finally і throw. У лекції ми розглянемо ці ключові слова, їх синтаксис та приклади використання.

1. Блок try...catch

Конструкція try...catch використовується для обробки помилок, які виникають у блоці коду try. Якщо в блоці try виникає помилка, управління передається до блоку catch, де помилка може бути оброблена.

Синтаксис:

    
      try {
        // Код, який може викликати виняток
      } catch (error) {
        // Код для обробки винятку
      }
    
  

У цьому прикладі, хоча ділення на нуль не викликає помилку в JavaScript, якщо б це була інша помилка (наприклад, доступ до невизначеної змінної), блок catch обробив би її:

JavaScript
    
      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. буде виведене незалежно від того, виникла помилка чи ні:

JavaScript
    
      try {
        let result = 10 / 0;
        console.log(result);
      } catch (error) {
        console.error('Виникла помилка:', error);
      } finally {
        console.log('Це завжди виконається.');
      }
    
  

10.3 Оператор throw

Оператор throw використовується для явного викидання винятків. З його допомогою можна викидати користувацькі помилки.

Синтаксис:

    
      throw expression;
    
  

Де:

  • expression: будь-яке вираження або об'єкт, який буде викинутий як виняток

Приклад використання

У цьому прикладі викидається помилка, якщо спробувати розділити на нуль, і блок catch обробляє цю помилку:

JavaScript
    
      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 окремо від інших можливих помилок:

JavaScript
    
      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:

JavaScript
    
      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 корисний для звільнення ресурсів, таких як закриття файлів або завершення мережевих з'єднань.

У цьому прикладі файл завжди буде закритий, незалежно від того, виникла помилка при його читанні чи ні:

JavaScript
    
      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 дозволяє створювати більш надійні та стійкі додатки. Розуміння та правильне використання цих конструкцій допомагає ефективно управляти помилками, звільняти ресурси та покращувати користувацький досвід.

1
Опитування
Об'єкти, рівень 36, лекція 4
Недоступний
Об'єкти
Об'єкти
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ