Javascript.RU

Голосование: Проверяете ли вы все возможные (в том числе нелогичные) действия логики?
Открытый опрос: другие пользователи будут видеть, кто как проголосовал.
Опции опроса
Проверяете ли вы все возможные (в том числе нелогичные) действия логики?

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2014, 17:17
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Делаете ли вы такие проверки
Вот функции:

function x(data) {
  if (data) {
    alert(data.x);
  }
}

function y(data) {
  alert(data.y);
}

// очевидные вызовы
x({x: 'x'});
y({y: 'y'});

// неочевидные
x();  // тут условие
y();  // тут ошибка !


Функции должны вызываться с аргументами, иначе вызов просто теряет смысл.
В первом случае вызов пустой функции не вызовет ошибку, так как есть условие.
Во втором случае будет ошибка.

Делаете ли вы подобные проверки?

Последний раз редактировалось dmitry111, 13.04.2014 в 17:23.
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2014, 17:24
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

блин, хотел в оффтопике создать
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2014, 17:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

нет, как ошибку тогда искать, если все покрыто условиями и ничего не выполнится, алерты чтоли построчно расставлять
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2014, 17:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

если от выполнения функции зависит важный функционал, то проверку можно не делать или хотя бы выводить экскепшн. Если же ее выполнение не играет огромную роль, можно сделать проверку и исключать ошибку. В любом случае все зависит от задачи.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2014, 17:42
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Делаю проверки только там, где это нужно. Например:
function x(data) {
    // data не проверяю, потому что если там не объект, что-то не так
    // поэтому пусть будет ошибка, чтобы об этом стало известно

    if (data.x) // проверяю, потому что поле "x" может быть, а может и не быть при нормальной работе
}

Мне не нравится, например, что jQuery, когда ничего не находит, возвращает пустую коллекцию. Вешаешь событие по какому-нибудь селектору, а потом верстка меняется, по селектору уже ничего не находится, но всё это происходит по-тихому и о баге может быть долго ничего не известно.
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2014, 18:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Я делаю проверки на верхнем уровне. На нижнем уровне от ошибок опечаток защищает JSDOC. На нижнем уровне таких элементарных ошибок, вроде некорректного типа, вообще не должно быть - их надо решать раньше.

;(function (__NAMESPACE__) {

	/**
	*  floor - функция нижнего уровня. используется внутри
	*  @param {number} x
	*/
	function floor (x) {
		return x | 0;
	}

	/**
	* Функция верхнего уровня. Экспортируется\используется извне
	*/
	function format (x) {

		var numeric = isFinite(x) ? x : parseInt(x);

		if (!isFinite(numeric)) {
			throw "x must be numeric"
		}
		
		numeric = floor(numeric)

		// остальная логика. в number_format уже нет проверки аргумента на корректность, как и во floor
		return number_format(numeric);
	}

	// экспорт.
	__NAMESPACE__.format = format;

})(window.APP);


верхние и нижние уровни - это уровни внешний\внутренний, что-то типа того

Сообщение от Sweet
Мне не нравится, например, что jQuery, когда ничего не находит, возвращает пустую коллекцию.
плюсую. это суть JS - стандартная библиотека редко кидает исключения.. легче ведь просто null вернуть и всё в шоколаде В вот в Yii за любую оплошность - по рукам. Ну хз, кому как удобнее. Легче с исключениями, конечно

Последний раз редактировалось melky, 13.04.2014 в 18:11.
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2014, 19:00
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Ошибки не нужно прятать, их нужно уметь правильно логгировать и быстро находить.
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2014, 19:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от devote
все зависит от задачи
аналогично. На подобный вопрос другого ответа просто не может быть.

melky, "floor" Bitwise Operators (примеры)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 13.04.2014 в 19:17.
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2014, 23:01
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от monolithed
Ошибки не нужно прятать, их нужно уметь правильно логгировать и быстро находить.
__________________
try..catch
if (data) не корректная проверка data == 0, data == false, data == 'undefined'
Ответить с цитированием
  #10 (permalink)  
Старый 14.04.2014, 11:07
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от nerv_ Посмотреть сообщение
аналогично. На подобный вопрос другого ответа просто не может быть.

melky, "floor" Bitwise Operators (примеры)
да эт сферический пример в вакууме ради примера, но за ссыль спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена запятой на точки для проверки цифр с дробью Telnet Общие вопросы Javascript 7 22.07.2013 11:33
Нужен скрипт проверки фомы tminov Работа 3 13.02.2013 09:16
Ошибки при проверки функции http://jsfiddle.net/YEXwb/ hrundel Общие вопросы Javascript 4 22.12.2010 18:01
Нужны кавычки, но ' - такие кавычки занимает PHP, " - а такие JavaScript. FirstFrost Общие вопросы Javascript 14 13.07.2010 14:43
Результаты проверки сервером формы ekkl jQuery 3 30.01.2010 14:29