Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Пасоны, как правильно парсить параметры? (https://javascript.ru/forum/offtopic/37706-pasony-kak-pravilno-parsit-parametry.html)

megaupload 03.05.2013 12:41

Пасоны, как правильно парсить параметры?
 
Пасоны как правильно и общепринято парсить параметры и как для этого оформляется jsdoc?


у меня логика такая, параметры парсятся слева направо,
первая функция что попадет это геттер, вторая функция что попадет это сеттер, если попадет массив то это массив строк aliases.

При чем ни один параметр не обязателен. Как тут быть?

1) как правильно общепринято парсить параметры?
2) как для этого оформить jsdoc чтобы гугл не ругался

kobezzza 03.05.2013 12:57

А зачем тебе парсить их? пишеш докогенератор? уже есть готовые, например jsdoc3.

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

ЗЫ: к шторму можно подключить Closure Linter для валидации jsdoc в гугловском стиле, может помогать.
ЗЫЗЫ: возможно я не понял твой вопрос :)

megaupload 03.05.2013 14:14

Цитата:

Сообщение от kobezzza
ЗЫЗЫ: возможно я не понял твой вопрос

да нет О_О, наоборот О_О я охренел аж, круто, а можешь написать jsdoc для моего случая?


/**
 * TODO  сделать описание
 *
 * @param {Function|String[]} [getter]
 * @param {Function|String[]} [setter]
 * @param {Function|String[]} [aliases]
 *
 * @constructor
 */
function ProxyCap (getter, setter, aliases) {

	this.getter = null;
	this.setter = null;
	this.aliases = null;

	// парсим параметры
	for (var i = 0; i < arguments.length; i++) {
		var arg = arguments[i];

		if (arg instanceof Function) {
			this[this.getter ? 'setter' : 'getter'] = arg;
		} else if (arg instanceof Array) {
			this.aliases = arg;
		}
	}

}



Цитата:

Сообщение от kobezzza
пишеш докогенератор?

нет, у меня конструктор который имеет динамический интерфейс..

new ProxyCap();
new ProxyCap(function getter(){}, ['aliases']);
new ProxyCap(['aliases'], function getter(){});
new ProxyCap(['aliases'], function getter(){}, function setter(){});
new ProxyCap(function getter(){}, ['aliases'], function setter(){});
new ProxyCap(function getter(){}, function setter(){}, ['aliases']);


все и работает, пнятна)?

это по аналогии с css свойствами где разное количество разных параметров

kobezzza 05.05.2013 09:18

Т.к. JS не имеет нормальных перегрузок, то такие интерфейсы описываются довольно кривовато:

/**
 *
 * @param {...Function|Array.<string>} args - неведомая хрень, которая принимает не ограниченное количество опциональных параметров
 */
function ProxyCap (args) {

megaupload 05.05.2013 10:56

kobezzza,
и гугл это схавает?

kobezzza 05.05.2013 11:11

Цитата:

Сообщение от megaupload (Сообщение 249031)
kobezzza,
и гугл это схавает?

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

megaupload 05.05.2013 11:55

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

kobezzza 05.05.2013 11:57

Цитата:

Сообщение от megaupload (Сообщение 249036)
да мне главное от варнингов избавится если честно. стоп, а если просто доку убрать О_О ну в смысле вторую звездочку вначале и оставить доку только для себя.

То варнингов не будет.

megaupload 05.05.2013 12:43

kobezzza,
а кстати ты юниттестируешь то что гуглом откомпилено? или если он предупреждений не выдает то и тестировать не надо? и как вообще можно протестировать такой код?

kobezzza 05.05.2013 12:57

Цитата:

Сообщение от megaupload (Сообщение 249040)
kobezzza,
а кстати ты юниттестируешь то что гуглом откомпилено? или если он предупреждений не выдает то и тестировать не надо? и как вообще можно протестировать такой код?

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

Для тестов я в основном юзаю qUnit.


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