Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.11.2011, 21:44
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

обработка исклучений
2 варианта:

1-й
function a(node) {
 var t = node.firsChild;
}

2-й
function a(node) {
 if(node) var t = node.firsChild;
 else throw Error('node is undefined');
}


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

Может я чегот не знаю, что должно было меня склонить ко второму варианту? (видел многие используют)
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2011, 21:50
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

В приведенном Вами примере применение эксепшна действительно бессмысленно, но это не означает что они вовсе не нужны.
Ответить с цитированием
  #3 (permalink)  
Старый 12.11.2011, 21:54
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от float
исклучений
ИсклЮчений!
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2011, 21:57
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
но это не означает что они вовсе не нужны.
ну пример просто ради примера.
у меня в коде эксепшены остались только в очень больших функциях. И закоменчены для дебагинга(например если extend переписывает сущ св-во).

вот я у думаю стоит придерживаться какой-то одной линии(писать на все функции), или можно в разброс ка сейчас.

Цитата:
ИсклЮчений!
очепятка
Ответить с цитированием
  #5 (permalink)  
Старый 12.11.2011, 22:00
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от float
очепятка
Поэтому не минус)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #6 (permalink)  
Старый 12.11.2011, 22:03
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Предположим есть функция которая вычисляет цену товара с учетом НДС:
function calcPrice(basePrice) {
    return basePrice * 1.2;
}

Однако даже если предположить что передаваемый в нее параметр basePrice всегда является числом, то есть ситуации когда параметр будет невалиден, например, если цена отрицательная. В таком случае функция отработает нормально, но полученный результат будет некорректен и все последующие операции с этим результатом будут бессмысленны. Таким образом необходимо остановить выполнение скрипта. В этой ситуации можно применить исключение, которое будет уведомлять об ошибке:
function calcPrice(basePrice) {
    if (basePrice < 0) {
        throw 'Price can not be negative.';
    }

    return basePrice * 1.2;
}

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

Последний раз редактировалось DreamTheater, 12.11.2011 в 22:07.
Ответить с цитированием
  #7 (permalink)  
Старый 12.11.2011, 22:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

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

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

function a(node,type) {
   type=type || true;
}
Ответить с цитированием
  #8 (permalink)  
Старый 12.11.2011, 22:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

DreamTheater, теперь понятно о чём вопрос.

Применяем такое только в самых "труднодоступных" местах. Для выявления охайников, которые так умудряются запутать алгоритм движка, что только таким образом остановив выполнеие скрипта/программы можно по стеку ошибки вычислить охайника и привести его алгоритм к путёвому виду.
Ответить с цитированием
  #9 (permalink)  
Старый 12.11.2011, 22:11
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сообщение от ksa Посмотреть сообщение
float, если твой вопрос ограничивается только работой с параметрами функции и некоего общего подхода...
Мы у себя используем следующий вариант.

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

function a(node,type) {
   type=type || true;
}
+1 Если допустимы некие умолчания при некорректных входных данных, то просто исправляем их и скрипт работает дальше, но иногда правильная информация на входе просто must have.
Ответить с цитированием
  #10 (permalink)  
Старый 12.11.2011, 22:14
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Например вот так:
function calcPrice(basePrice) {
    if (typeof(basePrice) !== 'number') {
        throw 'Price must be a number.';
    }

    if (basePrice < 0) {
        basePrice *= -1;
    }

    return basePrice * 1.2;
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка элементов в dijit.Dialog Белый Тигр Dojo toolkit 5 13.10.2011 18:31
jqGrid. локальная обработка данных DarkN jQuery 0 25.01.2011 23:55
обработка click() Nfyaka AJAX и COMET 4 23.12.2010 14:01
Обработка фото сервером. mycoding Оффтопик 0 12.10.2010 22:45
Обработка события focus для input:text Юрий Шу jQuery 8 02.06.2010 15:57