Вот еще несколько полезных шорткатов.
Когда устанавливаешь много всего позволяет экономить время:
npm i -g grunt-cli # Вместо npm install -g grunt-cli
npm i grunt-cli -D # Вместо npm install grunt-cli --save-dev
npm i grunt-cli -S # Вместо npm install grunt-cli --save
* Не позволяют использовать элемент больше одного раза на странице
* ID в современных браузерах дают незначительный прирост производительности, которым можно пренебречь
* Усложняют управление специфичностью селекторов
В целом, конечно нету ничего страшного в том, чтобы использовать идентификаторы на обычных страницах, но не в том количестве, в каком предлагает использовать автор поста в компонентах.
> Но именно для форматирование я думаю, что все же нет ничего лучше, чем JSCS.
JSCS не умеет сам форматировать код, только ругается.
Вот есть ESFormatter например.
co(function *(){
var a = yield get('http://google.com');
var b = yield get('http://yahoo.com');
var c = yield get('http://cloudup.com');
console.log(a[0].statusCode);
console.log(b[0].statusCode);
console.log(c[0].statusCode);
})()
К сожалению это Фокс недостаточно умный, как впрочем и node: оба пока не поддерживают let на 100% (https://developer.mozilla.org/en-
US/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla)
В спеке прописано поведение описанное выше, когда let создает замыкание для каждой итерации цикла.
Правильное поведение выдает, например traceur (хоть и по-уродски)
Стоит отметить, что часть описанного выше есть в документации, как верно отметил zalatov_a, недокументированные же функции очень не рекомендуются к использованию авторами jquery, т.к. если их не задокументировали, то скорее всего были причины и авторы jQuery оставляют за собой возможность делать в них изменения без каких-бы то ни было предупржлений и уведомлений, что может подарить вам прекрасные ночи в обнимку с дебаггером.
Поэтому читать про такие фишки — интересно, знать — полезно, использовать — на свой страх и риск.
Получается, что даже если я запущу код в хроме, нативная версия будет перезаписана полифилом и не будет использована?
Я понимаю, что это косяк источника полифила, а не Autopolyfiller'a, но может как-то оборачивать полифилы и применять только если нету нативных методов?
Или эта функциональность уже есть?
Ну вот тема крутая, вроде автор действительно шарит, разложено все по полочкам, примеры красивые и интересные, но читать невыносимо скучно, и мне, как неподготовленному читателю, ничего не понятно
1.
Почему первый пример — метапрограммирование? Ведь все функции и опции запрограммированы заранее, что именно меняется в ран тайме?
Становится ли это метапрограммированием от того, что мы вызываем функцию по ключу из хеша? (operations[key](s, conditions[key]);).
Тогда каждый раз когда мы используем конструкцию something[key] это — метапрограммирование?
А если бы мы захардкодили все те же функции в один гигантский switch, то это уже не метапрограммирование?
2.
Второй пример — понятно вроде, есть и вызов функции по ключу и замыкание. Получается, что любое замыкание — метапрограммирование, потому что персонализирует ф ункцию?
Наверное стоит заметить, что в последней части примера все вынесенные в хеш функции потеряют контекст, что не страшно для данного примера, но может доставить много удовольствия новоиспеченному мета программисту.
3.
Это метапрограммирование потому что используются регулярные выражения? И значения берутся из хеша? Если второе, то что, вообще любое использование хешей — метапрограммирование?
4.
Тут я вообще ничего не понял, есть какая-то библиотека, у которой есть несколько имплементаций одного интерфейса.
Если в первом кусочке кода еще понятно, причем тут метапрограммирование: методы генерируются на основе конфигурации, то во втором и третьем вообще не понятно, причем тут метапрограммирование.
Диаграммы не помогают: есть три шага, стрелочки идут из коробочки с надписью logic в другую такую же коробочку, как иллюстрация соотносится с примером — для меня загадка.
5.
Dependency injection в angular по ходу метапрограммирование, потому что имена переменных берутся из декларации функции, например:
6.
Или матчеры в chai тоже должны подходить, потому что используют defineProperty.
expect(something).to.be.ok
7.
Плагины в jquery добавляются в runtime, AMD и любая система модулей, любые операции с json, операции с хешами, замыкания, модификация прототипа и свойств объекта — все метапрограммирование?
А что тогда не относится к мета программированию?
Если бы мне надо было бы продвигать COLT и можно было бы сделать только 3 вещи, я бы:
1. Сделал мы установку минимально простой и понятной. Должно быть что-то вроде скачал — запустил, выбрал IDE, готово.
2. Записал бы несколько крутых гифок (ведь есть о чем), типа того, что делает Umar Hansa для DevTools, и распостранял бы через социальные сети.
3. Раздал бы лицензии на год каким-нить крутым JS чувакам, которые пишут статью.
Прошу прощения, что захламляю ваш топик своими идеями, просто реально за вас переживаю.
Ну, всегда были люди которые делали свои сайты и платформы, как-то так и хабр появился в свое время.
Привет, да, это прекрасный способ, который подходит большому количеству программистов.
Но вот хотелось бы также перевести что-то в поддержку тех, кому интересно и хочется делиться своими знаниями.
Сделал группу в телеге для тех, кому интересно учиться публично.
Слайды можно найти здесь: codelab.fun/ast, они интерактивны и все что описано в статье можно покрутить и потрогать :)
В частности из интересного:
console.log
babel
.Есть есть какие-то вопросы, буду рад ответить.
когда они выпустят спеки по построению ast для их шаблонов
When will the specifications for generating templates via AST's become available?
Когда устанавливаешь много всего позволяет экономить время:
* Не позволяют использовать элемент больше одного раза на странице
* ID в современных браузерах дают незначительный прирост производительности, которым можно пренебречь
* Усложняют управление специфичностью селекторов
В целом, конечно нету ничего страшного в том, чтобы использовать идентификаторы на обычных страницах, но не в том количестве, в каком предлагает использовать автор поста в компонентах.
JSCS не умеет сам форматировать код, только ругается.
Вот есть ESFormatter например.
Вот например с использованием co
Options
, поставить флагexperimental
.Результат смотреть в консоли браузера
US/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla)
В спеке прописано поведение описанное выше, когда let создает замыкание для каждой итерации цикла.
Правильное поведение выдает, например traceur (хоть и по-уродски)
5. Ecma6
Поэтому читать про такие фишки — интересно, знать — полезно, использовать — на свой страх и риск.
Только одно на понимаю: Допустим я использую
String.prototype.trim
и поддерживаю последний Chrome и IE8.Autopolyfiller пойдет в репозиторий полифилов и воткнет вот это в мой код:
Получается, что даже если я запущу код в хроме, нативная версия будет перезаписана полифилом и не будет использована?
Я понимаю, что это косяк источника полифила, а не Autopolyfiller'a, но может как-то оборачивать полифилы и применять только если нету нативных методов?
Или эта функциональность уже есть?
Есть же Rhino от Mozilla,
есть ему на смену Nashorn от Oracle, работает в JVM
1.
Почему первый пример — метапрограммирование? Ведь все функции и опции запрограммированы заранее, что именно меняется в ран тайме?
Становится ли это метапрограммированием от того, что мы вызываем функцию по ключу из хеша? (
operations[key](s, conditions[key]);
).Тогда каждый раз когда мы используем конструкцию something[key] это — метапрограммирование?
А если бы мы захардкодили все те же функции в один гигантский switch, то это уже не метапрограммирование?
2.
Второй пример — понятно вроде, есть и вызов функции по ключу и замыкание. Получается, что любое замыкание — метапрограммирование, потому что персонализирует ф ункцию?
Наверное стоит заметить, что в последней части примера все вынесенные в хеш функции потеряют контекст, что не страшно для данного примера, но может доставить много удовольствия новоиспеченному мета программисту.
3.
Это метапрограммирование потому что используются регулярные выражения? И значения берутся из хеша? Если второе, то что, вообще любое использование хешей — метапрограммирование?
4.
Тут я вообще ничего не понял, есть какая-то библиотека, у которой есть несколько имплементаций одного интерфейса.
Если в первом кусочке кода еще понятно, причем тут метапрограммирование: методы генерируются на основе конфигурации, то во втором и третьем вообще не понятно, причем тут метапрограммирование.
Диаграммы не помогают: есть три шага, стрелочки идут из коробочки с надписью logic в другую такую же коробочку, как иллюстрация соотносится с примером — для меня загадка.
5.
Dependency injection в angular по ходу метапрограммирование, потому что имена переменных берутся из декларации функции, например:
6.
Или матчеры в chai тоже должны подходить, потому что используют defineProperty.
7.
Плагины в jquery добавляются в runtime, AMD и любая система модулей, любые операции с json, операции с хешами, замыкания, модификация прототипа и свойств объекта — все метапрограммирование?
А что тогда не относится к мета программированию?
1. Сделал мы установку минимально простой и понятной. Должно быть что-то вроде скачал — запустил, выбрал IDE, готово.
2. Записал бы несколько крутых гифок (ведь есть о чем), типа того, что делает Umar Hansa для DevTools, и распостранял бы через социальные сети.
3. Раздал бы лицензии на год каким-нить крутым JS чувакам, которые пишут статью.
Прошу прощения, что захламляю ваш топик своими идеями, просто реально за вас переживаю.