Выразительный JavaScript (Хавербеке) - страница 89

пытается передать этому объекту отслеживание стека, на тех платформах, которые это поддерживают, путём создания объекта >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 и пропускает другие исключения. Если вы снова сделаете такую же опечатку, будет корректно выведено сообщение о неопределённой переменной.

Утверждения (Assertions)

Утверждения – инструмент для простой проверки ошибок. Рассмотрим вспомогательную функцию >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. Извлечение последнего элемента пустого массива не имеет смысла, и это явно было бы ошибкой программиста.

Утверждения – способ убедиться в том, что ошибки провоцируют прерывание программы в том месте, где они совершены, а не просто выдают странные величины, которые передаются по системе и вызывают проблемы в каких-то других, не связанных с этим, местах.

Итог

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

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

Выброс исключения приводит к разматыванию стека до тех пор, пока не будет встречен блок