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

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

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

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

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

Ошибка

Причины бывают разные: пользователи вводят некорректные данные или два раза быстро кликают по кнопке.

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

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

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

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

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

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

Проект

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

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

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

files = new HexletFs();
files.mkdirpSync('/etc/nginx');
files.mkdirpSync('/etc/init');
files.mkdirpSync('/etc/bashrc');

files.readdirSync('/etc');
// [nginx, init, bashrc]

const body = 'directives';
files.writeFileSync('/etc/nginx/nginx.conf', body);

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

Применение

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

Благодаря тому, что наша библиотека не работает с реальной файловой системой, а хранит все данные в памяти — это дает преимущества:

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

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

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


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

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

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

Об обучении на Хекслете

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

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

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

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

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

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

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

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

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

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

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

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