Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Делаете ли вы такие проверки (https://javascript.ru/forum/offtopic/46521-delaete-li-vy-takie-proverki.html)

dmitry111 13.04.2014 17:17

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

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:24

блин, хотел в оффтопике создать :(

Octane 13.04.2014 17:26

нет, как ошибку тогда искать, если все покрыто условиями и ничего не выполнится, алерты чтоли построчно расставлять

devote 13.04.2014 17:39

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

Sweet 13.04.2014 17:42

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

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

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

melky 13.04.2014 18:06

Я делаю проверки на верхнем уровне. На нижнем уровне от ошибок опечаток защищает 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 за любую оплошность - по рукам. Ну хз, кому как удобнее. Легче с исключениями, конечно

monolithed 13.04.2014 19:00

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

nerv_ 13.04.2014 19:12

Цитата:

Сообщение от devote
все зависит от задачи

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

melky, "floor" http://javascript.ru/forum/offtopic/...tml#post306611

Vlasenko Fedor 13.04.2014 23:01

Цитата:

Сообщение от monolithed
Ошибки не нужно прятать, их нужно уметь правильно логгировать и быстро находить.
__________________

try..catch
if (data) не корректная проверка data == 0, data == false, data == 'undefined'

melky 14.04.2014 11:07

Цитата:

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

melky, "floor" http://javascript.ru/forum/offtopic/...tml#post306611

да эт сферический пример в вакууме ради примера, но за ссыль спасибо :)


Часовой пояс GMT +3, время: 12:48.