обработка исклучений
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-м способом мы просто добиваемся того что в консоли показывает ошибку в другой строке. Может я чегот не знаю, что должно было меня склонить ко второму варианту? (видел многие используют) |
В приведенном Вами примере применение эксепшна действительно бессмысленно, но это не означает что они вовсе не нужны.
|
Цитата:
|
Цитата:
у меня в коде эксепшены остались только в очень больших функциях. И закоменчены для дебагинга(например если extend переписывает сущ св-во). вот я у думаю стоит придерживаться какой-то одной линии(писать на все функции), или можно в разброс ка сейчас. Цитата:
|
Цитата:
|
Предположим есть функция которая вычисляет цену товара с учетом НДС:
function calcPrice(basePrice) { return basePrice * 1.2; } Однако даже если предположить что передаваемый в нее параметр basePrice всегда является числом, то есть ситуации когда параметр будет невалиден, например, если цена отрицательная. В таком случае функция отработает нормально, но полученный результат будет некорректен и все последующие операции с этим результатом будут бессмысленны. Таким образом необходимо остановить выполнение скрипта. В этой ситуации можно применить исключение, которое будет уведомлять об ошибке: function calcPrice(basePrice) { if (basePrice < 0) { throw 'Price can not be negative.'; } return basePrice * 1.2; } Теперь при вводе отрицательной цены скрипт остановится и в консоль выведется сообщение об ошибке, в противном случае мы бы получили отрицательный результат (без ошибки) и это привело бы к фейлу всех дальнейших расчетов. Если приложение большое, то поиск места в котором возникает ошибка мог бы занять достаточно значетельное время. |
float, если твой вопрос ограничивается только работой с параметрами функции и некоего общего подхода...
Мы у себя используем следующий вариант. Если параметр ключевой и необходим - пусть таки генерится ошибка исполнения... Т.о. разработчик раньше увидит свои проблемы... Если параметр не особо важен или возможна работа с неким умолчанием - делаем аналог конструкции. Т.о. использование будет более удобным в частом использовании... function a(node,type) { type=type || true; } |
DreamTheater, теперь понятно о чём вопрос.
Применяем такое только в самых "труднодоступных" местах. Для выявления охайников, которые так умудряются запутать алгоритм движка, что только таким образом остановив выполнеие скрипта/программы можно по стеку ошибки вычислить охайника и привести его алгоритм к путёвому виду. :) |
Цитата:
|
Например вот так:
function calcPrice(basePrice) { if (typeof(basePrice) !== 'number') { throw 'Price must be a number.'; } if (basePrice < 0) { basePrice *= -1; } return basePrice * 1.2; } |
Часовой пояс GMT +3, время: 03:40. |