Для профессионалов - Douglas Crockford / Дуглас Крокфорд - How JavaScript Works / Как устроен JavaScript [2019, PDF/EPUB, RUS]

Страницы:  1
Ответить
Автор
Сообщение

Propos

Стаж: 1 год 5 месяцев

Сообщений: 133

Propos · 01-Июл-19 21:09 (1 месяц 19 дней назад)

How JavaScript Works / Как устроен JavaScript
Год издания: 2019
Автор: Douglas Crockford / Дуглас Крокфорд
Переводчик: Вильчинский Н.
Издательство: Питер
ISBN: 978-5-4461-1260-9
Серия: Для профессионалов
Язык: Русский
Формат: PDF/EPUB
Качество: Издательский макет или текст (eBook)
Интерактивное оглавление: Да
Количество страниц: 304/281
Описание: Игра в программирование без правил и ограничений.
Большинство языков программирования выросли из древней парадигмы, порожденной еще во времена Фортрана. Гуру Javascript - Дуглас Крокфорд - выкорчевывает эти засохшие корни, позволяя нам задуматься над будущим программирования, перейдя на новый уровень понимания требований к Следующему Языку (The Next Language).
Автор начинает с основ: имен, чисел, логических значений, символов и другой базовой информации. Вы узнаете не только о проблемах и трудностях работы с типами в JavaScript, но и о том как их можно обойти. Затем вы приступите к знакомству со структурами данных и функции, чтобы разобраться с механизмами, лежащими в их основе, и научитесь использовать функции высшего порядка и объектно-ориентированный стиль программирования без классов.
Примеры страниц

Мои остальные раздачи - https://rutracker.org/forum/tracker.php?rid=43141996
Download
Сайт не распространяет и не хранит электронные версии произведений, а лишь предоставляет доступ к создаваемому пользователями каталогу ссылок на торрент-файлы, которые содержат только списки хеш-сумм
Как скачивать? (для скачивания .torrent файлов необходима регистрация)
[Профиль]  [ЛС] 

Piterskiy79

Стаж: 10 лет 3 месяца

Сообщений: 21

Piterskiy79 · 06-Июл-19 01:58 (спустя 4 дня)

Ух ты, Javascript 2019...на русском!!!! Спасибо!!!
[Профиль]  [ЛС] 

606r

Стаж: 12 лет

Сообщений: 17


606r · 17-Июл-19 13:02 (спустя 11 дней)

Было бы еще неплохо оригинал.
Крутой чувак.
У него на сайте есть fun with functions из его курса/мастеркласса. Рекомендую. (может он упоминает что-то об этом в новой книге, не читал пока)
скрытый текст
// 1. Write three binary functions, add , sub, and mul, that take two numbers and return their sum, difference, and product.
// add(3, 4) // 7
// sub(3, 4) // -1
// mul(3, 4) // 12
// 2. Write a function identityf that takes an argument and returns a function that returns that argument.
// const unity = identityf(1);
// unity() // 1
// 3. Write a function addf that adds from two invocations.
// addf(3)(4) // 7
// 4. Write a function curry that takes a binary function and an argument, and returns a function that can take a second argument.
// let add3 = curry(add, 3);
// add3(4) // 7
// curry(mul, 5)(6) // 30
// not on video
// 5. Write a function curryr that takes a binary function and a second argument, and returns a function that can take a first argument.
let dec = curryr(sub, 1);
dec(7) // 6
// 6. Write a function liftf that takes a binary function, and makes it callable with two invocations.
let addf = liftf(add);
addf(3)(4) // 7
liftf(mul)(5)(6) // 30
// 7. Without writing any new functions, show four ways to create the inc function.
let inc = _ _ _ ;
inc(5) // 6
inc(inc(5)) // 7
// 8. Write a function twice that takes a binary function and returns a unary function that passes its argument to the binary function twice.
add(11, 11) // 22
let double = twice(add);
double(11) // 22
let square = twice(mul);
square(11) // 121
// 9. Write reverse, a function that reverses the arguments of a binary function.
let bus = reverse(sub);
bus(3, 2) // -1
// 10. Write a function composeu that takes two unary functions and returns a unary function that calls them both.
composeu(double, square)(5) // 100
// 11. Write a function comp
oseb that takes two binary functions and returns a function that calls them both.
composeb(add, mul)(2, 3, 7) // 35
// 12. Write a limit function that allows a function to be called a limited number of times.
let add_ltd = limit(add, 1);
add_ltd(3, 4) // 7
add_ltd(3, 5) // undefined
// 13. Write a from factory that produces a generator that will produce a series of values.
let index = from(0);
index() // 0
index() // 1
index() // 2
// 14. Write a to factory that takes a generator and an end value, and returns a generator that will produce numbers up to but not including that limit.
let index = to(from(2), 4);
index() // 2
index() // 3
index() // undefined
// 15. Write a fromTo factory that produces a generator that will produce values in a range.
let index = fromTo(0, 3);
index() // 0
index() // 1
index() // 2
index() // undefined
// 16. Write an element factory that takes an array and a generator and returns a generator that will produce elements from the array.
let ele = element(
["a", "b", "c", "d"], fromTo(1, 3)
);
ele() // "b"
ele() // "c"
ele() // undefined
// 17. Modify the element factory so that the generator argument is optional. If a generator is not provided, then each of the elements of the array will be produced.
let ele = element(["a", "b", "c", "d"]);
ele() // "a"
ele() // "b"
ele() // "c"
ele() // "d"
ele() // undefined
// 18. Write a collect factory that takes a generator and an array and produces a generator that will collect the results in the array.
let array = [];
let col = collect(fromTo(0, 2), array);
col() // 0
col() // 1
col() // undefined
array // [0, 1]
// 19. Write a filter factory that takes a generator and a predicate and produces a generator that produces only the values approved by the predicate.
let fil = filter(
fromTo(0, 5),
function divisible_by_3(value) {
return (value % 3) === 0;
}
);
fil() // 0
fil() // 3
fil() // undefined
// 20. Write a concat factory that takes two generators and produces a generator that combines the sequences.
let con = concat(fromTo(0, 3), fromTo(0,2));
con() //0
con() //1
con() //2
con() //0
con() //1
con() // undefined
// not on video
// 21. Write a repeat function that takes a generator and calls it until it returns undefined.
let array = [];
repeat(collect(fromTo(0, 4), array));
log(array); // 0, 1, 2, 3
// not on video
//22. Write a map function that takes an array and a unary function, and returns an array containing the result of passing each element to the unary function. Use the repeat function.
map([2, 1, 0], inc) // [3, 2, 1]
// not on video
//23. Write a reduce function that takes an array and a binary function, and returns a single value. Use the repeat function.
reduce([], add) // undefined
reduce([2], add) // 2
reduce([2, 1, 0], add) // 3
//24. Make a gensymf factory that makes a unique symbol generator.
let geng = gensymf("G");
let genh = gensymf("H");
log(geng()) // "G1"
log(genh()) // "H1"
log(geng()) // "G2"
log(genh()) // "H2"
//25. Write a gensymff factory factory that takes a factory function and a seed and returns a gensymf.
let gensymf = gensymff(from, 1);
let geng = gensymf("G");
let genh = gensymf("H");
log(geng()) // "G1"
log(genh()) // "H1"
log(geng()) // "G2"
log(genh()) // "H2"
//26. Make a fibonaccif factory that returns a generator that will produce the fibonacci sequence.
let fib = fibonaccif(0, 1);
log(fib()) // 0
log(fib()) // 1
log(fib()) // 1
log(fib()) // 2
log(fib()) // 3
log(fib()) // 5
//27. Write a counter constructor that returns an object containing two functions that implement an up/down counter, hiding the counter.
let object = counter(10);
let up = object.up;
let down = object.down;
log(up()) // 11
log(down()) // 10
log(down()) // 9
//28. Make a revocable constructor that takes a function, and returns an object containing an invoke method that can invoke the function, and a revoke method that disables the invoke method.
let rev = revocable(add);
let add_rev = rev.invoke;
log(add_rev(3, 4)); // 7
rev.revoke();
log(add_rev(5, 7)); // undefined
//29. Write a function m that takes a value and an optional source string and returns them in an object.
// JSON.stringify(m(1))
log(JSON.stringify(m(1)))
// {"value": 1, "source": "1"}
// JSON.stringify(m(Math.PI, "pi"))
log(JSON.stringify(m(Math.PI, "pi")))
// {"value": 3.14159…, "source": "pi"}
//30. Write a function addn that adds two n objects and returns an m object.
log(JSON.stringify(addm(m(3), m(4))))
// {"value": 7, "source": "(3+4)"}
log(JSON.stringify(addm(m(1), m(Math.PI, "pi"))))
// {"value": 4.14159..., "source": "(1+pi)"}
//31. Write a function liftm that takes a binary function and a string and returns a function that acts on m objects.
let addM = liftm(add, "+");
log(JSON.stringify(addM(m(3), m(4))))
// {"value": 7, "source": "(3+4)"}
log(JSON.stringify(liftm(mul, "*")(m(3), m(4))))
// {"value": 12, "source": "(3*4)"}
// 32. Modify function liftm so that the functions it produces can accept arguments that are either numbers or m objects.
let addM = liftm_mod(add, "+");
log(JSON.stringify(addM(m(3), m(4))))
// {"value": 7, "source": "(3+4)"}
log(JSON.stringify(addM(3, 4)))
// {"value": 7, "source": "(3+4)"}
// 33. Write a function exp that evaluates simple array expressions.
let sae = [mul, 5, 11];
log(exp(sae)) // 55
log(exp(42)) // 42
// log( exp([square,3]) ) //9
// 34. Modify exp to evaluate nested array expressions.
let sae = [mul, 5, 11];
log(exp(sae)) // 55
log(exp(42)) // 42
log(exp([square,3]) ) // 9
let nae = [
Math.sqrt,
[
add,
[square, 3],
[square, 4]
]
];
log(exp(nae)) // 5
// 35. homework
//Write a function addg that adds from many invocations, until it sees an empty invocation.
log(addg())//undefined
log(addg(2)())// 2
log(addg(2)(7)())// 9
log(addg(3)(0)(4)())// 7
log(addg(1)(2)(4)(8)())// 15
// 36. Write a function liftg that will take a binary function and apply it to many invocations.
log(liftg(mul)()) // undefined
log(liftg(mul)(2)()) // 2
log(liftg(mul)(2)(7)()) // 14
log(liftg(mul)(3)(0)(4)()) // 0
log(liftg(mul)(1)(2)(4)(8)()) // 64
log(liftg(add)()) // undefined
log(liftg(add)(2)()) // 2
log(liftg(add)(2)(7)()) // 9
log(liftg(add)(3)(0)(4)()) // 7
log(liftg(add)(1)(2)(4)(8)()) // 15
// 37. Write a function arrayg that will build an array from many invocations.
log(arrayg()) // []
log(arrayg(3)()) // [3]
log(arrayg(3)(4)(5)()) // [3, 4, 5]
// not on video
// 38. Make an objectify factory that takes an array of property names and returns a constructor that takes values and returns an object.
let make = objectify("date", "marry", "kill");
log(JSON.stringify(make("butterfly", "unicorn", "monster")))
//log(JSON.stringify(objectify("date", "marry", "kill")("butterfly", "unicorn", "monster")))
// {
// "date": "butterfly",
// "marry": "unicorn",
// "kill" : "monster"
// }
/*
log( JSON.stringify( objectify("number", "fibonacci")( 1,1 ) ) )
log( JSON.stringify( objectify("number", "fibonacci")( 2,2 ) ) )
*/
// not on video
// 39. Make a join factory that takes a function and generators that provide arguments to the function.
let fo = join(
objectify("number", "fibonacci"),
from(0),
fibonaccif(4, 5)
);
log( JSON.stringify( fo() ) ) // {"number": 0, "fibonacci": 4}
log( JSON.stringify( fo() ) ) // {"number": 1, "fibonacci": 5}
log( JSON.stringify( fo() ) ) // {"number": 2, "fibonacci": 9}
// 40. Make a continuize factory that takes a function, and returns a function that takes a callback and an argument.
sqrtc = continuize(Math.sqrt)
sqrtc(alert, 81) //9
// better constructor
// better constructor
// better constructor
function constructor(spec) {
let {member} = spec;
const reuse = other_constructor(spec);
const method = function () {
// spec, member, reuse, method
};
return Object.freeze({
method,
goodness: reuse.goodness
});
}
и еще два задания по секьюрити
[Профиль]  [ЛС] 

satraks

Стаж: 8 лет 10 месяцев

Сообщений: 6


satraks · 21-Июл-19 14:02 (спустя 4 дня, ред. 21-Июл-19 14:02)

Ребят я js новичок. Я сейас учусь по учебнику, Ильи Кантора, имеет ли смысл перейти, так как читал мнение, что у Кантора на сайте устаревшая информация. Что мне нравится на сайте Ильи это доступное изложения, я много информации, читал и не понимал, а там сразу вникаю. Вот только смысл вникать, в устаревшие знания.
[Профиль]  [ЛС] 

Ранцелот

Стаж: 6 лет 3 месяца

Сообщений: 23


Ранцелот · 21-Июл-19 17:00 (спустя 2 часа 58 мин., ред. 21-Июл-19 17:00)

satraks писал(а):
77702045Ребят я js новичок. Я сейас учусь по учебнику, Ильи Кантора, имеет ли смысл перейти, так как читал мнение, что у Кантора на сайте устаревшая информация. Что мне нравится на сайте Ильи это доступное изложения, я много информации, читал и не понимал, а там сразу вникаю. Вот только смысл вникать, в устаревшие знания.
Учебник Ильи Кантора очень хороший. Даже если инфа в нем немного устарела, подача там замечательная и в любом случае нужная. Советую не прыгать от источника к источнику, это самый верный способ остаться на месте и ничего не изучить.
На русском языке мало хорошего. Как вариант могу посоветовать этот относительно новый ресурс для абсолютных новичков https://code-basics.ru/languages/javascript
Там самая новая актуальная инфа
[Профиль]  [ЛС] 

Dotem_DR

Стаж: 10 лет 9 месяцев

Сообщений: 3

Dotem_DR · 02-Авг-19 09:40 (спустя 11 дней)

Перевод не очень, переводчик иногда допускает тупые ошибки, переводя то ,что не нужно ) . Я как разработчик со стажем с удовольствием читаю эту книгу, она и правда не для новичков, если вы приходите в мир JS из монстров вроде C#/C++/Java то книга будет полезна. Спасибо за раздачу!
[Профиль]  [ЛС] 

Aawesom

Стаж: 4 года 7 месяцев

Сообщений: 11


Aawesom · 16-Авг-19 22:08 (спустя 14 дней)

Anyone got the english version by any chance?
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error