Просмотр полной версии : Проблема с closure-compiler в расширеном режиме
godofjavascript
25.12.2012, 16:45
вломы его качать так что юзаю эту версию http://closure-compiler.appspot.com/home
суть в том что когда я пихаю это в расширенном режиме то он выдает варнинг
Number of warnings: 1
JSC_DETERMINISTIC_TEST: condition always evaluates to false
left : number
right: (Number|null) at line 21 character 8
return (array.length - 1) === iterationIndex;
что мыл функция ifIterationIsLast всегда возвращает false, но это НЕ ТАК.
Гугл совсем поехал в края далекие?
собственно код который я сжимаю
function test(name, value) {
var keys = name.split('.');
keys.forEach(function (key, i) {
//Последняя ли это итерация, последний ли обрабатывается ключ
var iterationIsLast = ifIterationIsLast(keys, i);
});
/**
* Проверить последняя ли это итерация прямого обхода массива
* @param {Array} array массив
* @param {Number} iterationIndex индекс итерации
* @returns {boolean}
*/
function ifIterationIsLast(array, iterationIndex) {
return (array.length - 1) === iterationIndex;
}
}
test('System.ff', 31);
godofjavascript
25.12.2012, 17:13
кажется разобрался number и Number не одно и то же
ожидается обект класса Number а не приметивное значение, а передаем приметивное значение, а приведения типов не делаем.
просто поменял запись в jsdoc с Number на number
/**
* Проверить последняя ли это итерация прямого обхода массива
* @param {Array} array массив
* @param {number} iterationIndex индекс итерации
* @returns {boolean}
*/
dmitry111
26.12.2012, 01:02
Почему появляются варнинги если функция вызывается без аргумента:
Вот пример:
function a (arg) {
if (arg) {
// xxx
} else {
// ууу
}
}
a(xxx);
a();
И чем плох может быть такой код?
godofjavascript
26.12.2012, 01:13
там написано что код не делает ни чего) и это подозрительно, может вы забыли что то? строка 2 символ 0
а вообще если используешь продвинутый режим то пиши jsdoc, он без него не работает
dmitry111
26.12.2012, 01:58
там написано что код не делает ни чего)
ну правильно)) там же в функции ничего и нет) Я просто пример привел
ну вот теперь делает:
function a (arg) {
if (arg) {
alert("Привет " + arg)
} else {
alert("Привет юзер!");
}
}
a("Вася");
a();
в advanced выдаст:
JSC_WRONG_ARGUMENT_COUNT: Function a: called with 0 argument(s). Function requires at least 1 argument(s) and no more than 1 argument(s). at line 9 character 0
a();
^
я просто хотел узнать, может так писать код нельзя? :)
а вообще если используешь продвинутый режим то пиши jsdoc, он без него не работает
почему не работает? Я уже в адванс моде 2 скрипта сжал, вроде работают
godofjavascript
26.12.2012, 06:49
почему не работает?
не работает, а выдает варнинги)
я просто хотел узнать, может так писать код нельзя?
Можно, если объяснить это GCC.
Я же говорю, используй jsdoc
В данном случае просто возьми имя параметра в квадратные скобочки и это будет означать что он не обязательный) @param {string} [arg]
если просто
@param {string} arg
то обязательный
по умолчанию все обязательные
http://code.google.com/p/jsdoc-toolkit/w/list
интересно а шторм всю эту байду понимает?)
завтра потестю
monolithed
26.12.2012, 12:32
Гугл совсем поехал в края далекие?
Ты всегда сперва используешь устройство, а только потом читаешь руководство?
https://developers.google.com/closure/compiler/docs/compilation_levels?hl=ru
https://developers.google.com/closure/compiler/docs/api-tutorial3?hl=ru
https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=en
Особое внимаение обрати на инструкцию @expose, когда-нибудь пригодится.
И вообще, пора уже запомнить, что в расширешенный режим GCC не нужно использовать для отдельных файлов, он предназначен только для работы с проектом
godofjavascript
26.12.2012, 13:11
Ты всегда сперва используешь устройство, а только потом читаешь руководство?
Ну да, читаю только если проблемы возникают, и так и надо делать. Только вот при чем тут руководство? Я забыл что у меня === строгое сравнивание а не обычное == , забыл что Number(11) !== 11
и что number !== Number
К тому же руководство на инглише и провести его нереально, а переводчик переводит криво.
И вообще, пора уже запомнить
С чего ты взял что я этого не знаю и ли не помню? С чего ты ВООБЩЕ взял что КТО-ТО этого не знает или не помнит? Это же очевидно по тому что он имена не сохраняет и урезает лишнее.
к тому же С ЧЕГО ТЫ ВЗЯЛ что он для этого нужен?? Вообще то можно составить "словарь" вещей которые он не будет сокращать и тогда можно грамотно сжимать разные библиотеки и делать експорт. короче я вообще не понял к чему все это умничество.
п.с. годная ссылка https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=en
monolithed
26.12.2012, 16:01
Ну да, читаю только если проблемы возникают, и так и надо делать.
Не всегда
забыл что Number(11) !== 11
Вернет false
А вот это уже нет:
new Number(11) !== 11
С чего ты взял что я этого не знаю и ли не помню?
С того, что под advanced mode GCC, код нужно писать зная все особенности GCC в этом режиме.
godofjavascript
26.12.2012, 16:10
Вернет false
А вот это уже нет:
new Number(11) !== 11
в рот мне ноги... КАК)??
Кстати а у гугля есть CSS сжимальщик?
monolithed
26.12.2012, 19:23
в рот мне ноги... КАК)??
Потому что вызов конструктора без new возвращает примитив, а не объект
просто поменял запись в jsdoc с Number на number
у GCC свой jsdoc, от оригинала есть ещё неск. различий.
интересно а шторм всю эту байду понимает?)
ой нубас ....
да, понимает. единственный редактор\иде на моей памяти, которые понимают jsdoc от GCC, а не оригинальный.
то пиши jsdoc, он без него не работает
брехня какая - он работает и без него ... правда, иногда не может установить связи между объектами, и имена свойств теряются -> код перестает работать
Можно, если объяснить это GCC. :)
The @param Tag (http://code.google.com/p/jsdoc-toolkit/wiki/TagParam)
/**
* @param {string} [arg] this is an optional parameter.
*/
function a (arg) {
if (arg) {
alert("Привет " + arg)
} else {
alert("Привет юзер!");
}
}
a("Вася");
a();
можно было ещё поставить = после типа :
/**
* @param {string=} arg this is an optional parameter.
*/
godofjavascript
26.12.2012, 20:52
Потому что вызов конструктора без new возвращает примитив, а не объект
ого, а зачем так сделали?
ой нубас ....
что прости?
да, понимает. единственный редактор\иде на моей памяти, которые понимают jsdoc от GCC, а не оригинальный.
плагин (название забыл) на эклипс понимает еще.
и ты на вопрос не ответил, шторм понимает ВСЕ теги?
брехня какая - он работает и без него ... правда, иногда не может установить связи между объектами, и имена свойств теряются -> код перестает работать
брехня какая - он работает и без него ...
не может установить связи между объектами, и имена свойств теряются -> код перестает работать
он работает
перестает работать
http://cs411821.userapi.com/v411821055/3912/QE_3KIZGpZY.jpg
гениальный человек, гениальный
и ты на вопрос не ответил, шторм понимает ВСЕ теги?
хз, все ли - я не тестил все.
гениальный человек, гениальный
слово "иногда" почему пропустил?
godofjavascript
26.12.2012, 21:21
хз, все ли - я не тестил все.
оу, ну я всю жизнь писать использовал только 5-6 тегов, интеренсо будет и остальные попробовать.
слово "иногда" почему пропустил?
потому что (иногда не работает === не работает) и именно это я и имел ввиду когда говорил что не работает. И он часто просит уточнения например конструкторам указывать что это конструкторы и.т.п.
ой нубас ....
что прости?
monolithed
26.12.2012, 21:46
ого, а зачем так сделали?
Это вроде логично
у GCC свой jsdoc, от оригинала есть ещё неск. различий.
JSDoc 2 устарел, а JSDoc 3 (https://github.com/jsdoc3/jsdoc), не сильно отличается от предшественника, тем не менее, GCC понимает все инструкции JSDoc (по крайней мере, я не встречал расхождений).
К примеру в JSDoc, @returns, в GCC @return
godofjavascript
26.12.2012, 23:42
Это вроде логично
Вау, круто , расскажи еще что нибудь.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot