Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Коды ошибок JS: Обработка ошибок

Подход, при котором мы возвращаем либо false, либо данные, подразумевает, что у нас есть два состояния. Но это не всегда так.

Например, если мы возвращаем ошибку файловой системы, то обычно хотим знать, что за ошибка произошла. Например, в файловых системах в UNIXO количество ошибок превышает 100:

Самостоятельно пытаться догадаться, что произошло, — не лучшая идея. Так мы не сможем далеко продвинуться при работе с программой.

В этом случае появляется вопрос, как действовать — как возвращать результат. Один из самых простых вариантов — это коды возврата.

Коды возврата

Возврат ошибки связан с тем, что мы возвращаем не просто false или undefined. Мы возвращаем некоторое число. Оно говорит о том, какая ошибка произошла. Это работает так:

Мы вызываем команду, например, удаление директории, и получаем результат. Дальше проверяем, является ли результат частью списка ошибок. То есть мы перечисляем возможные варианты.

В итоге мы узнаем, входит ли результат в список ошибок. Если всё хорошо, то мы продолжаем работать и используем тот же результат.

Проблема в том, что результат иногда может совпадать — быть числовым. Тогда нам нужно выбрать лист ошибок, чтобы нормальное значение не попадало в него.

В итоге нам постоянно придется делать такие проверки — проверять большое количество возможных возвратов. Такой процесс нужно упрощать.

Возврат результата в СИ

В Си принят следующий подход возврата результата:

Здесь мы открываем файл на чтение. Дальше идет проверка. Если указатель равен нулю, то после этого пишем, что произошла ошибка. При этом сама ошибка записывается в глобальную переменную, которая называется Erno. И там, например, цифра 2, которая означает, что все плохо.

Здесь мы убеждаемся, что у нас нет адекватного результата. Но по сути идет глобальное изменение среды. А глобальные переменные — это вообще не вариант, особенно в современных языках уже продвинутых.

Возврат результата в Golang

Рассмотрим более продвинутый способ. Этот тот же способ, что и в СИ, но улучшенный. Он называется Golang Style.

Golang — это современный язык, который избавляет только от глобальных переменных.

Смотрим пример:

Мы делаем чтение файла.

В Go возвращается два значения:

  • dat — данные
  • err — ошибка

Ошибка возвращается всегда. А есть там она или нет — нужно проверять.

Дальше мы проверяем, что если ошибка не равна Нилу, то значит ошибки собственно нет и все хорошо. Если равна Нилу, то мы как-то это обрабатываем.

Это фактически такой же подход как в CИ. Только здесь нет глобальной переменной, которая там постоянно меняется. Каждая функция возвращает свой результат выполнения. Так мы двигаемся вниз по вызовам и можем строить программу.

Возврат результата в JavaScript

В JavaScript можно использовать такой же подход. Это рабочая схема, которая основана на Destructuring. У нее есть определенные недостатки, которые мы разберем в следующем уроке.

Этот способ основан на Destructuring.

Рассмотрим пример:

Мы делаем какое-то, например, чтение, после этого слева описываем данные и ошибку. То есть, например, данные приходят в массиве слева, ошибка справа, то есть у нас такой массивчик возвращается. И если ошибка равна 0, то делаем все что хотим, если нет, то обрабатываем ошибку.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»