Ivan
Всего один
Андрей
И что? Человеку надо заблокировать поток. Как ты это сделаешь? async/await нужны как замена промисам. Они ничего нового не вносят.
Ivan
Лолбля
Ivan
Поток заблокировать
Ivan
Рукалицо
Андрей
Понял, человека просто раздражает синтаксис. Да, async/await подойдёт. Он чище выглядит.
Dmitry
https://repl.it/Ja7d/1
Dmitry
вот как сделать так, чтоб тут внешнее значение смысл имело?
Dmitry
да, я хочу сделать блокировку, чтоб получить значение. Переписывать *ВСЁ* только потому что кто-то обновил API и сделал теперь все вызовы, включая получение базовых полей асинхронными - это как-то излишне
Ivan
Не получится
Андрей
AI
Народ, как расшироить Array.prototype чтоб метод не возвращал новое значение, а изменял исходное?
доня.
какой метод?
и да, не надо расширять Array.prototype
доня.
ну а вообще, изменяешь this в методе, в чём проблема?
AI
изменяя this ничего не меняется.
Андрей
Пример брось
AI
Array.prototype.reverse_self = function () {
this.forEach(function(el,i,arr){
var j = arr.length -1 - i;
this[i] = arr[j];
})
};Не работает.
А вот
Array.prototype.reverse_self = function () {
var new_arr = [];
this.forEach(function(el,i,arr){
var j = arr.length -1 - i;
new_arr[i] = arr[j];
})
return new_arr;
};работает
доня.
ну конечно
доня.
у тебя контекст-то меняется
доня.
во вложенной функции
Андрей
Что такое arr?
доня.
делай const self = this вне forEach и меняй self, либо передавай стрелочную функцию в forEach
Андрей
Понял. Почему ты обычный цикл не хочешь сделать?
Андрей
Будет понятнее и чище обычным циклом.
AI
var array = [1,2,3,4,100,1];
array.reverse_self();
доня.
но ещё раз, не надо изменять прототип Array, зачем тебе это?
доня.
почему ты не хочешь как нормальный человек сделать отдельную функцию? методы вообще не нужны (кроме как для имитации ad-hoc полиморфизма), с ними плохо композиция работает из-за всех этих неявных контекстов
Андрей
А нужна ли композиция?
доня.
конечно
AI
Блин, ну для тестового это)
Андрей
Зачем?
доня.
всё это ваше программирование строится на композиции
AI
Спасибо, разобрался
Андрей
доня.
ага, а потом получается как в Go
доня.
где на каждый частный случай с нуля код пишется
доня.
потому что даже дженериков нет
доня.
я думал никто не будет спорить с принципом don't repeat yourself
Андрей
Везде должен быть баланс. А не имутабельность, функциональность во все поля.
доня.
так вот композиция нужна для того чтобы переиспользовать существующий код и строить сложные абстракции из более простых
доня.
доня.
я говорил что-то про иммутабельность сейчас?
Андрей
+ с такими функциями писать код просто невозможно.
доня.
если код императивный и с сайд-эффектами, это ещё не значит что в нём не нужно использовать композицию
доня.
доня.
почему это?
Андрей
Потому что автодополнение по глобальной области работает отвратительно.
доня.
я ожидал любого аргумента, но только не такого бредового
Anonymous
всем привет, вопрос есть такой - в общем есть скрипт js. Он обращается к моему серверу и берет оттуда инфу для того чтобы выполниться. Как я могу сделать так, чтобы при 1ом обращении с нового домена включался таймер для этого домена к примеру на несколько дней, а после того как этот таймер истек - скрипт не выполнялся (выполнялось, к примеру, что-то другое)?
Андрей
Вот я хочу увидеть что я могу сделать с объектом. И написана куча функций в таком стиле. Что мне делать?
Андрей
И не 1 тип такой, а куча. С прототипами ты можешь поставить точку и глянуть их. А здесь жопа.
доня.
Maksim
Anonymous
Ivan
Ivan
Андрей
Плюс читаемость такого кода не очень. Да и функции, которые мутируют принимаемые аргументы - это изврат.
Андрей
Методы - да, функции - нет.
доня.
Вот я хочу увидеть что я могу сделать с объектом. И написана куча функций в таком стиле. Что мне делать?
ну потом смотри
вот есть допустим несколько типов-коллекций
сейчас как - для всех реализован отдельно map, reduce, filter, forEach (хотя на самом деле не совсем все для всех и поэтому всё время надо вспоминать: а есть ли forEach для NodeList, а можно ли filter на HTMLCollection)
на самом деле для всей этой функциональности нужен только reduce
вот можно было бы реализовать reduce методом, а всё остальное функциями
таким образом, в прототипе ты бы увидел, что есть reduce, и сразу бы понял, что через него можно сделать map/filter/take/...
и тогда бы уже либо искал готовую функцию (в Ramda или где-то ещё), либо на крайняк свою бы написал
и она бы работала с ЛЮБОЙ кастомной коллекцией, имплементящей reduce
доня.
Андрей
доня.
так не надо делать вложенность 10
используй compose или pipe из той же рамды и будет тебе счастье
Андрей
ну потом смотри
вот есть допустим несколько типов-коллекций
сейчас как - для всех реализован отдельно map, reduce, filter, forEach (хотя на самом деле не совсем все для всех и поэтому всё время надо вспоминать: а есть ли forEach для NodeList, а можно ли filter на HTMLCollection)
на самом деле для всей этой функциональности нужен только reduce
вот можно было бы реализовать reduce методом, а всё остальное функциями
таким образом, в прототипе ты бы увидел, что есть reduce, и сразу бы понял, что через него можно сделать map/filter/take/...
и тогда бы уже либо искал готовую функцию (в Ramda или где-то ещё), либо на крайняк свою бы написал
и она бы работала с ЛЮБОЙ кастомной коллекцией, имплементящей reduce
Во взрослых языках для этого придумали интерфейсы. И все нормально. Можно делать и так, и так. Но одно читается, а другое нет.
Андрей
Sergey
доня.
потому что проблем оно создаёт больше, чем решает
Андрей
доня.
функции-конструкторы + методы только для реализации специфичного для типа поведения + функции для реализации всей generic логики + композиция, каррирование и прочие прелести
и всё прекрасно
Андрей
Андрей
Кстати, в ts они есть?
доня.
не, TS не настолько жирная абстракция над JS, чтоб такие фичи вводить
Андрей
Ну и зря. Тогда бы код был бы читаемым после тебя. И абстракций меньше бы тащить надо было.
Sergey
Анатолий