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

Введение JS: Обработка ошибок

Качество программ, которые мы создаем, зависят от многих факторов. В продакшн-среде не существует программ, которые не содержали бы ошибок. Они являются неотъемлемой частью жизненного цикла программного обеспечения, и нужно уметь с ними правильно работать.

Важную роль здесь играют автоматические и ручные тесты, которые пишут и выполняют обычные тестировщики. При этом автоматические тесты не избавляют программу от ошибок.

Представим, что программист делает небольшой прототип, который работает в основном рабочем флоу и отдает его реальным пользователям. После этого начинается шквал обращений в службу поддержки или к самому программисту. Оказывается, программа чаще не работает, чем работает. Причины бывают разные: пользователи вводят некорректные данные или два раза быстро кликают по кнопке.

Проблема в том, что программа не была на это рассчитана. Чтобы исправить ситуацию, нужно тестировать ее на корнер-кейсы и испытывать в разных условиях: на разном железе, ОС и браузерах.

Когда ошибки исправляются, программа «обрастает» большим количеством специальных конструкций и дополнительным кодом, который обрабатывает эти ошибки. Это может привести к тому, что кода для обработки ошибок становится больше, чем кода для выполнения задачи.

В этом случае у многих пропадает эйфория от процесса программирования. Одно дело – за два дня создать рабочую программу для экспериментов. Другое дело – создать программу, которая способна работать в реальной среде с большим количеством пользователей. Это сложная задача, которая включает в себя много рутины и искусство работы и обработки ошибок. Это мы и будем изучать в данном курсе.

Основные темы курса – это ошибки и их разновидности, а еще способы работы с этими ошибками:

  • Коды возврата
  • Исключения

На практике используются оба способа. Исключения не заменяют коды возврата и наоборот. Это не единственные способы, но они являются наиболее распространенными в мейнстримовых языках. Поэтому мы и будем работать с ними.

Проект

Также в этом курсе мы будем делать проект. Он включает в себя большое количество ситуаций, в которых возможны ошибки — это работа с файловой системой. Когда мы создаем, удаляем и копируем файлы, мы можем натыкаться на проблемы. Например, не существует директории или файла, файл закрыт для записи, не хватает прав на его модификацию.

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

Еще работа с файловой системой – это неотъемлемая часть любого бэкэндового языка. Даже если вы пишете на JavaScript во фронтенде, все равно нужно понимать эти вещи. Поэтому на курсе мы изучим, как работать с файловой системой, и как она устроена внутри. В итоге мы создадим свою файловую систему.

Сразу обратим внимание, что у каждой функции, которая используется в нашей библиотеке, в конце суффикс Sync. Дело в том, что нода — не единственный рантайм для JavaScript, но самый используемый. Это event loop — менеджер асинхронного режима, с помощью которого мы никогда не блокируемся. При этом API ноды позволяет работать в обычном режиме, как работают и другие языки, в которых всё синхронно.

По этим причинам мы будем использовать только то подмножество файловой системы, которое похоже на нодовское API, но только с суффиксами Sync. То есть мы будем вести всё последовательно. С тем, как работает система в асинхронном режиме, мы познакомимся в следующем курсе.

Применение

Изученное на этом курсе, не будет являться исключительно библиотекой для обучения. Такие библиотеки используются в реальности, и они нужны в некоторых ситуациях. Например:

  • Ускорение работы
  • Устранение нежелательных побочных эффектов

Бывают ситуации, когда при разработке можно не создавать файлы, а хранить их в памяти. Это позволяет работать быстро и устранять нежелательные побочные эффекты.

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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