Pull to refresh
100
0

Пользователь

Send message

Ну, всегда были люди которые делали свои сайты и платформы, как-то так и хабр появился в свое время.

Привет, да, это прекрасный способ, который подходит большому количеству программистов.

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

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

Привет всем,

Слайды можно найти здесь: codelab.fun/ast, они интерактивны и все что описано в статье можно покрутить и потрогать :)

В частности из интересного:

  • На этом слайде Можно поупражняться в регулярных выражениях и попробовать найти console.log
  • На этом Решить ту же задачу с помощью babel.
  • Тут можно повводить разный код и посмотреть какие диаграммы АСД сгенерируются.


Есть есть какие-то вопросы, буду рад ответить.
Вопрос из чата:
когда они выпустят спеки по построению ast для их шаблонов

When will the specifications for generating templates via AST's become available?
Вот еще несколько полезных шорткатов.
Когда устанавливаешь много всего позволяет экономить время:
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 например.
Раз уж модифицируете исходный массив, используйте map, это должно решить все непонимания
Можно использовать генераторы из ES6 (есть в Chrome, FF и node.js).

Вот например с использованием co

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);
})()
Вот тут открыть Options, поставить флаг experimental.

Результат смотреть в консоли браузера
К сожалению это Фокс недостаточно умный, как впрочем и node: оба пока не поддерживают let на 100% (https://developer.mozilla.org/en-
US/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla)

В спеке прописано поведение описанное выше, когда let создает замыкание для каждой итерации цикла.

Правильное поведение выдает, например traceur (хоть и по-уродски)

Let достаточно умный:

5. Ecma6
for (let i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(k);
  }, 0);
}
Стоит отметить, что часть описанного выше есть в документации, как верно отметил zalatov_a, недокументированные же функции очень не рекомендуются к использованию авторами jquery, т.к. если их не задокументировали, то скорее всего были причины и авторы jQuery оставляют за собой возможность делать в них изменения без каких-бы то ни было предупржлений и уведомлений, что может подарить вам прекрасные ночи в обнимку с дебаггером.

Поэтому читать про такие фишки — интересно, знать — полезно, использовать — на свой страх и риск.
Прикольно.

Только одно на понимаю: Допустим я использую String.prototype.trim и поддерживаю последний Chrome и IE8.

Autopolyfiller пойдет в репозиторий полифилов и воткнет вот это в мой код:
// String.prototype.trim
String.prototype.trim = function trim() {
	return this.replace(/^\s+|\s+$/g, '');
};


Получается, что даже если я запущу код в хроме, нативная версия будет перезаписана полифилом и не будет использована?

Я понимаю, что это косяк источника полифила, а не Autopolyfiller'a, но может как-то оборачивать полифилы и применять только если нету нативных методов?
Или эта функциональность уже есть?
edit: ответ нв комментарий выше:
Есть же Rhino от Mozilla,
есть ему на смену Nashorn от Oracle, работает в JVM
Ну вот тема крутая, вроде автор действительно шарит, разложено все по полочкам, примеры красивые и интересные, но читать невыносимо скучно, и мне, как неподготовленному читателю, ничего не понятно

1.
Почему первый пример — метапрограммирование? Ведь все функции и опции запрограммированы заранее, что именно меняется в ран тайме?
Становится ли это метапрограммированием от того, что мы вызываем функцию по ключу из хеша? (operations[key](s, conditions[key]);).

Тогда каждый раз когда мы используем конструкцию something[key] это — метапрограммирование?
А если бы мы захардкодили все те же функции в один гигантский switch, то это уже не метапрограммирование?

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

3.
Это метапрограммирование потому что используются регулярные выражения? И значения берутся из хеша? Если второе, то что, вообще любое использование хешей — метапрограммирование?

4.
Тут я вообще ничего не понял, есть какая-то библиотека, у которой есть несколько имплементаций одного интерфейса.
Если в первом кусочке кода еще понятно, причем тут метапрограммирование: методы генерируются на основе конфигурации, то во втором и третьем вообще не понятно, причем тут метапрограммирование.

Диаграммы не помогают: есть три шага, стрелочки идут из коробочки с надписью logic в другую такую же коробочку, как иллюстрация соотносится с примером — для меня загадка.

5.

Dependency injection в angular по ходу метапрограммирование, потому что имена переменных берутся из декларации функции, например:

angular.module('hi', [])
      .value('someVar', 'hello')


inject( function( someVar ){
  console.log(someVar); // 'hello'
}

6.
Или матчеры в chai тоже должны подходить, потому что используют defineProperty.
expect(something).to.be.ok

7.

Плагины в jquery добавляются в runtime, AMD и любая система модулей, любые операции с json, операции с хешами, замыкания, модификация прототипа и свойств объекта — все метапрограммирование?
А что тогда не относится к мета программированию?
Мне только что Stash сказать что появился side-by-side diff, и предложил воспользоваться
Их только позавчера поставили, и они в парках в основном, вот уродская карта из которой ничего не понять, кроме того, что они где-то парках: about.att.com/content/dam/snrdocs/street_charge_map_051814.pdf
Спасибо, отличная идея, было бы круто прикрутить к этому веб-интерфейс.
1
23 ...

Information

Rating
Does not participate
Registered
Activity