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

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

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

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

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

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

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

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

Проект

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

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

Нужно обратить внимание на один небольшой нюанс. У каждой функции, которая используется в нашей библиотеке в конце суффикс Sync. Зачем он нужен, что он обозначает?

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

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

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

Преимущества Hexlet

  • Обучение через рефакторинг
  • Разработка через тесты
  • Внимание к дизайну кода
  • Много практики

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


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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

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

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

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

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

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

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

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

Есть вопрос или хотите участвовать в обсуждении?

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

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»