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.

megaupload 05.05.2013 13:19

Цитата:

Сообщение от kobezzza
Closure Linter

кстати ты его юзаешь, он ругается на выравнивания разные, как это настраивать и вообще где у него доки? я не смог найти.

Цитата:

Сообщение от kobezzza
Для тестов я в основном юзаю qUnit.

как покрыть откомпилированный код юниттестами? там же именя другие е мае) как МИНИМУМ

kobezzza 05.05.2013 13:28

Цитата:

Сообщение от megaupload (Сообщение 249042)
кстати ты его юзаешь, он ругается на выравнивания разные, как это настраивать и вообще где у него доки? я не смог найти.

Не юзаю, тоже не до конца разобрался с настройками и забил. Настраивается с помощью конфиг файла. Для справки вызови --help в консольке.
А ваще у гугла много мутных велосипедов, и это один из них.

Цитата:

Сообщение от megaupload (Сообщение 249042)
как покрыть откомпилированный код юниттестами? там же именя другие е мае) как МИНИМУМ

Ну всё конечно не покрыть, т.к. что-то инлайнится, что-то удаляется, но если я жму либу, то у мя есть "внешние ручки", которые не меняют названия.

Если проверяю проект, то использую приёмочные и интеграционные тесты.

megaupload 05.05.2013 13:58

Цитата:

Сообщение от kobezzza
Для справки вызови --help в консольке.

как ты понял я это уже сделал и получил "ко ко ко")

Цитата:

Сообщение от kobezzza
"внешние ручки", которые не меняют названия.

ну я думал что суть юнит тестов в том чтобы тестировать каждый класс и каждый метод независимо, ну да ладно.

Цитата:

Сообщение от kobezzza
приёмочные и интеграционные тесты.

штоэта О_О?

kobezzza 05.05.2013 14:10

Цитата:

Сообщение от megaupload (Сообщение 249046)
у я думал что суть юнит тестов в том чтобы тестировать каждый класс и каждый метод независимо, ну да ладно.

Ну остальное тестится в несжатом виде, тут уже ничего не поделаешь.

Цитата:

Сообщение от megaupload (Сообщение 249046)
штоэта О_О?

Мир гораздо разнообразнее и существует over9000 различных видов тестов и отдельные профессии "тестировщик {подставить нужное}".

Интеграционные тесты - это тесты взаимодействия модулей.
Приёмочные тесты - это самые абстрактные тесты, которые проверяют работу проекта в целом: например можно написать тест на Selenium IDE который будет из браузера ходить по сайтеку, что-то делать и т.д. а результат сравниваться вручную или опять таки программно. Тестирование сервиса "вручную" тоже считается приёмочным тестированием.

megaupload 05.05.2013 14:42

kobezzza, я чо то похожее видал у вижуал студии. Там типа тонны разных тулсов для такого, не?

kobezzza 05.05.2013 14:44

Цитата:

Сообщение от megaupload (Сообщение 249052)
kobezzza, я чо то похожее вижал у вижуал студии. Там типа тонны разных тулсов для такого, не?

Не могу знать, я студию так глубоко никада не юзал:)


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