@JSlang

Страница 159 из 2237
Anton
25.08.2016
19:00:21
Оно хочется или оно надо?

abc
25.08.2016
19:05:58
всем привет. подскажите pure js реализацию Password-Based Key Derivation Function (PBKDF) ?

web crypto api все же не на всех браузерах

Владислав
25.08.2016
21:28:00
@iamstarkov https://github.com/5angel/quak/tree/master/src Так лучше?

Google
Vladimir
25.08.2016
21:29:21
> curry(fn, ...rest, ...more) вот это круто

Владислав
25.08.2016
21:31:40
это был сарказм? (:

Дмитрий
25.08.2016
21:32:59
А это компилируется? ?

Vladimir
25.08.2016
21:33:17
Дмитрий
25.08.2016
21:33:18
Ну, в смысле, как это вообще может работать без ошибок))

Alexander
25.08.2016
21:34:35
Ну, в смысле, как это вообще может работать без ошибок))
а в чем проблема? это можно через curry.apply(null, [fn].concat(rest).concat(more)) сэмулировать/транспилировать

Vladimir
25.08.2016
21:35:04
только обычо, curry принимает функцию и возвращает каррированную функцию

Дмитрий
25.08.2016
21:36:34
spread operator же
Это то понятно, но дважды?

Alexander
25.08.2016
21:37:19
Это то понятно, но дважды?
ну, написать функцию с такой сигнатурой не получится

Владислав
25.08.2016
21:37:23
Alexander
25.08.2016
21:37:24
но вызвать можно спокойно

Vladimir
25.08.2016
21:38:39
Это то понятно, но дважды?
тебе же нужно аккумулировать аргументы

Google
Vladimir
25.08.2016
21:38:49
const curry = fn => (...args) => args.length < fn.length ? (...newArgs) => curry(fn)(...args.concat(newArgs)) : fn(...args) // equals const curry = fn => (...args) => args.length < fn.length ? (...newArgs) => curry(fn)(...args, ...newArgs) // cool! : fn(...args)

extend можно переписать на редьюсы

то есть у тебя each c сайд-эффектам

Дмитрий
25.08.2016
21:42:26
Аааа, понял

Владислав
25.08.2016
21:42:41
extend можно переписать на редьюсы
нужен пример, для меня это пока ничего не говорит (ну кроме редьюса в массиве)

Дмитрий
25.08.2016
21:42:46
ну, написать функцию с такой сигнатурой не получится
Ппц, я реально сначала пытался представить, как это можно написать))

А то выходит прямо второй человек после чака норриса, досчитавший до бесконечности дважды))

Alexander
25.08.2016
21:46:29
ну, написать функцию с такой сигнатурой не получится
Вернее, в JS не получится. В языке с типизацией можно.

Vladimir
25.08.2016
21:47:28
Вернее, в JS не получится. В языке с типизацией можно.
типизацию можно форсировать контрактами

Anatoly
25.08.2016
21:47:31
ребята, поделитесь опытом разработки на ext.js
Что именно интересует? Это RIA фреймворк

Vladimir
25.08.2016
21:48:10
нужен пример, для меня это пока ничего не говорит (ну кроме редьюса в массиве)
если брать в расчёты только объекты, то будет примерно так: export const extend = curry(( a, b ) => Object.extend({}, a, b)); export const deepExtend = (...rest) => rest.reduce( (res, obj) => extend(res, obj), {} );

на самом деле даже так export const deepExtend = (...rest) => rest.reduce(extend, {} );

каждый раз когда тебе нужно из коллекции получить одно значение это всегда reduce

Владислав
25.08.2016
21:49:44
Object.extend нет такого метода, а Object.assign нужно полифилить

Vladimir
25.08.2016
21:49:59
без временных вспомогательных переменных

https://github.com/5angel/quak/blob/master/src/utils/common.js#L7

assign, да

Владислав
25.08.2016
21:50:43
как уже сказал, ассигн не тру

Vladimir
25.08.2016
21:51:12
тогда нужен мап агностичный к коллекции

ну да ладно

Google
Vladimir
25.08.2016
21:52:39
просто попробуй тут each поменять на map и for … loop на reduce

Ilya
25.08.2016
21:52:47
так, я на время выйду, а то бот шлет сообщения тем, кто сюда пишет

Aleksei
25.08.2016
21:55:39
Object.assign можно заменить на {...a, ...b} по идее

Vladimir
25.08.2016
21:56:23
да

deepExtend = (...args) => args.reduce( (res, val) => isArrayish(args[0]) ? [ ...res, ...val ] : { ...res, ...val } isArrayish(args[0]) ? [] : {} )

но тогда для object spread тоже нужно будет подключать бабель плагин

@kozulya update может возвращать обновлённую модель? чтобы не менять значение модели по рефу?

Vladimir
25.08.2016
22:04:28
так будет проще понять и легче тестить

у parseAttributes один аргумент attributes

пара временных перменных

each который наполняет их

Vladimir
25.08.2016
22:06:56
и после each ты возвращаешь их массивом

тут прямо напрашивается каррированнй мап

const parseAttributes = (attributes = []) => { … each(fn, attributes) return [handlers, bindings] }; // => const parseAttributes = (attributes) => { return map(fn, attributes) }; // => const parseAttributes = (attributes) => map(fn, attributes); // => const parseAttributes = map(fn);

ну да

ты там пушишь в эти временные массивы

Admin
ERROR: S client not available

Vladimir
25.08.2016
22:11:12
это точно мап

Владислав
25.08.2016
22:12:07
ща, я тут экстенд почти сделал

Google
Vladimir
25.08.2016
22:13:04
так как ты наполняешь два разных массива то тут можно разделить их

есть converge

//≅ multiply( add(1, 2), subtract(1, 2) ); R.converge(multiply, [add, subtract])(1, 2); //=> -3

const parseAttributes = converge(concat, [sumHandler, sumBindings])

Владислав
25.08.2016
22:15:01
export function extend(...rest) { return reduce((result, obj) => { each((value, prop) => { result[prop] = value }, obj) return result }, {}, rest) } вот такой extend

Vladimir
25.08.2016
22:17:35
export function extend(...rest) { return reduce((result, obj) => { each((value, prop) => { result[prop] = value }, obj) return result }, {}, rest) } вот такой extend
попробуй написать extend для двух аргументов и выразить через него extend для многих аргументов

const parseAttributes = converge(concat, [sumHandler, sumBindings])
const attr2handler = attr => { // … return handler; } const attr2binding = attr => { // … return binding; } const mapAtts2handlers = map(attr2handler); const mapAtts2bindings = map(attr2binding); const parseAttributes = converge(concat, [mapAtts2handlers, mapAtts2bindings]); // or const parseAttributes = converge(concat, [map(attr2handler), map(attr2binding)]);

parseExpressions по паттерну тоже кажется на мап можно переписать

с walkNodes сложнее

Владислав
25.08.2016
22:29:45
2 аргумента не сильно отличаются от N аргументов

Vladimir
25.08.2016
22:32:15
Больше функций

Несколько маленьких функций лучше одной большой

Их можно потом в новые комбинировать намного проще

с walkNodes сложнее
когда использовал акорн для аккумулирования депсов не смог обойтись без временного массива =( https://github.com/iamstarkov/es-deps-from-string/blob/master/index.js#L17-L25

@kozulya если из resolve вынести сайдэффекты isFunction(fn) && fn(scope)

и объявить хелперы const keys = scope => isObject(scope) ? Object.keys(scope) : []; const args = (scope, ...rest) => keys(scope).concat(res);

то вообще хорошо

Владислав
25.08.2016
22:45:28
сейчас попробую

Google
Vladimir
25.08.2016
22:47:39
const resolve = (expr, fn, ...named) => (scope, ...rest) => new Function( keys(scope).concat(named).join(','), `return ${expr}` ).call(scope, ...args(scope)) export default resolve;

Владислав
25.08.2016
22:53:47
мне немного не нравится тендеция дважды выполнять операцию на одной массиве

резолв же будет постоянно вызываться, еще и на больших объектах, к примеру

Vladimir
25.08.2016
23:28:47
если он будет чистый его можно будет мемоизировать

Страница 159 из 2237