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 тип такой, а куча. С прототипами ты можешь поставить точку и глянуть их. А здесь жопа.
доня.
Вот я хочу увидеть что я могу сделать с объектом. И написана куча функций в таком стиле. Что мне делать?
какой-то странный подход обычно когда я пишу код я уже понимаю что я хочу сделать с объектом
Ivan
Maksim
можно поточнее как и куда записывать?
ну это уж тебе решать, в базу, в память, в файл
Андрей
Плюс читаемость такого кода не очень. Да и функции, которые мутируют принимаемые аргументы - это изврат.
Андрей
Методы - да, функции - нет.
доня.
Вот я хочу увидеть что я могу сделать с объектом. И написана куча функций в таком стиле. Что мне делать?
ну потом смотри вот есть допустим несколько типов-коллекций сейчас как - для всех реализован отдельно map, reduce, filter, forEach (хотя на самом деле не совсем все для всех и поэтому всё время надо вспоминать: а есть ли forEach для NodeList, а можно ли filter на HTMLCollection) на самом деле для всей этой функциональности нужен только reduce вот можно было бы реализовать reduce методом, а всё остальное функциями таким образом, в прототипе ты бы увидел, что есть reduce, и сразу бы понял, что через него можно сделать map/filter/take/... и тогда бы уже либо искал готовую функцию (в Ramda или где-то ещё), либо на крайняк свою бы написал и она бы работала с ЛЮБОЙ кастомной коллекцией, имплементящей reduce
доня.
Плюс читаемость такого кода не очень. Да и функции, которые мутируют принимаемые аргументы - это изврат.
ну в большинстве случаев что-то мутировать вообще изврат конечно а читаемость такого кода прекрасная
Андрей
ну в большинстве случаев что-то мутировать вообще изврат конечно а читаемость такого кода прекрасная
Когда у тебя вложенность == 2, то да. А когда 10? В том же лодаше не зря чейны придумали.
доня.
так не надо делать вложенность 10 используй compose или pipe из той же рамды и будет тебе счастье
доня.
Прекрасно. Вопрос в другом) зачем костыли то?)
ну вот и я считаю, что костыли не нужны поэтому методы стараюсь не использовать, и код стараюсь писать без единого this
доня.
потому что проблем оно создаёт больше, чем решает
Андрей
Где есть типажи, интерфейсы не нужны.
Это представление функции как метода в котлине?
доня.
функции-конструкторы + методы только для реализации специфичного для типа поведения + функции для реализации всей generic логики + композиция, каррирование и прочие прелести и всё прекрасно
Андрей
Кстати, в ts они есть?
доня.
не, TS не настолько жирная абстракция над JS, чтоб такие фичи вводить
Андрей
Ну и зря. Тогда бы код был бы читаемым после тебя. И абстракций меньше бы тащить надо было.
доня.
Вот если в Js будет extension методы, то ты сам на них сбежишь.
а чем оно в реализации JS может принципиально отличаться от расширения прототипа?
Sergey
Это представление функции как метода в котлине?
нет Это раст, наделение структуры функциональностью
Андрей
а чем оно в реализации JS может принципиально отличаться от расширения прототипа?
В том, что это другая запись твоей любимой функциональность. И рамбда бы никакая не понадобилась.