пытается передать этому объекту отслеживание стека, на тех платформах, которые это поддерживают, путём создания объекта
>Error
и использования его стека.
Теперь >promptDirection
может сотворить такую ошибку.
>function promptDirection(question) {
> var result = prompt(question, "");
> if (result.toLowerCase() == "left") return "L";
> if (result.toLowerCase() == "right") return "R";
> throw new InputError("Invalid direction: " + result);
>}
А в цикле её будет ловить сподручнее.
>for (;;) {
> try {
> var dir = promptDirection("Куда?");
> console.log("Ваш выбор", dir);
> break;
> } catch (e) {
> if (e instanceof InputError)
> console.log("Недопустимое направление. Попробуйте ещё раз.");
> else
> throw e;
> }
>}
Код отлавливает только экземпляры >InputError
и пропускает другие исключения. Если вы снова сделаете такую же опечатку, будет корректно выведено сообщение о неопределённой переменной.
Утверждения – инструмент для простой проверки ошибок. Рассмотрим вспомогательную функцию >assert
:
>function AssertionFailed(message) {
> this.message = message;
>}
>AssertionFailed.prototype = Object.create(Error.prototype);
>function assert(test, message) {
> if (!test)
> throw new AssertionFailed(message);
>}
>function lastElement(array) {
> assert(array.length > 0, "пустой массив в lastElement");
> return array[array.length - 1];
>}
Это – компактный способ ужесточения требований к значениям, который выбрасывает исключение в случае, когда заданное условие не выполняется. К примеру, функция >lastElement
, добывающая последний элемент массива, вернула бы >undefined
для пустых массивов, если бы мы не использовали >assertion
. Извлечение последнего элемента пустого массива не имеет смысла, и это явно было бы ошибкой программиста.
Утверждения – способ убедиться в том, что ошибки провоцируют прерывание программы в том месте, где они совершены, а не просто выдают странные величины, которые передаются по системе и вызывают проблемы в каких-то других, не связанных с этим, местах.
Ошибки и недопустимые входные данные случаются в жизни. Ошибки в программах надо искать и исправлять. Их легче найти, используя автоматические системы проверок и добавляя утверждения в ваши программы.
Проблемы, вызванные чем-то, что неподвластно вашей программе, нужно обрабатывать достойно. Иногда, когда проблему можно решить локально, допустимо возвращать специальные значения для отслеживания таких случаев. В других случаях предпочтительно использовать исключения.
Выброс исключения приводит к разматыванию стека до тех пор, пока не будет встречен блок