Двач.hk не отвечает.
Вы видите копию треда, сохраненную 27 апреля 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
16069129603330.png56 Кб, 1050x1050
JSThread #191 /js/ 1897984 В конец треда | Веб
Предыдущий тред: >>1892152 (OP)

Больше пары строк кода в посте или на скриншоте ведут в ад.

Для программирования на HTML https://jsfiddle.net
Для Node.js с консолькой https://repl.it/languages/nodejs

Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.

Руководство для вката: https://developer.mozilla.org
2 1897986
>>897984 (OP)
Легитимный тред
3 1897994
>>1897921 →
что за глупый вопрос
то что во первых меньше запросов надо, а во вторых ты замучаешься определять когда надо делать запросы потому что корзина поменялась где-то в другой части приложения
4 1898005
>>1897956 →
Это жаваскрипт.
Жаваскрипт это имплементация экмаскрипт. А экмаскрипт - это встраиваемый язык без средств ввода вывода. На голом ес ты даже console.log не напишешь. Все, что ты делаешь на жс - это то, что предоставляет ранйтайм куда он встреон. И рантайм везде разный - нода, браузер, ардуино, фотошоп, автокад, что угодно еще. Даже nginx.
5 1898024
>>897994

>то что во первых меньше запросов надо


Или писать эндпоинты нормально, а не высирать весь список джейсоном на каждый пук.

>а во вторых ты замучаешься определять когда надо делать запросы потому что корзина поменялась где-то в другой части приложения


Можно подумать со стором ты не заебёшься определять состояние корзины, когда сайт на двух страницах открыт. А если ещё и воркеров сверху насыпать, то там вообще анал карнавал начинается.
6 1898035
Почему жс тред находится в pr?
7 1898049
>>898035
Сам кто по масти?
8 1898082
>>898049
Петух
9 1898087
Стоит вкатываться в докер?
10 1898093
11 1898108
>>898082
Ну так питон тоже игрушечный язык.
12 1898114
>>898108
Питон изначально делался для школьников, даже не студентов как паскаль, а жс изначально язык для работающих вебмакак. Айк вообще хотел чтобы жс был разновидностью лиспа, но начальство не разрешило. Но это вы и без меня знаете...
13 1898126
>>898114
Питон изначально делался для УЧЁНЫХ, но не инженеров-программистов. Вот для тех, кому язык нужен в научной работе, и у кого культура соответствующая. Это чувствуется. В этом его уникальность, кстати.

Потом уже на питон начали навешивать инженерные фишки, чтобы дружить его с прикладным программированием.
14 1898129
>>898126
А точнее, история языков:
Питон делался для учёных не программистов.
JS делался для того, чтобы добавить динамики в простенькие веб странички.
PHP делался для того, чтобы добавить чуть динамики в сгенерированные сервером странички.

Это такое родовое происхождение языков. Все три серьёзно выстрелили, и их уже стали конвертировать в серьёзные индустриальные инженерные языки для профессиональных разработчиков. Но во всех их "родовые травмы" проявляются.
16070878473590.jpg18 Кб, 640x640
15 1898139
А в чем проблема всем экспертам с вышкой CS собраться вместе и запилить, учитывая набитые за годы шишки, лучшие языки для фронта и бэка, и фреймворки под них? Коммерчески не выгодно? Так полно идейных задротов.
16 1898148
>>898139
Ну пили язык для фронта. А потом убеди произвоителей браузеров, что его все должны внедрить, в полном соответствии со стандартами.

С другими языками проблема в том, что они сначала выросли, потому что были в нужной нише, а потом стали думать, что не очень удачные. А при этом уже накоплена огромная кодовая база.

А переделывать сложно, вон как больно питон с v2 на v3 перекатывался, при том что изменения были умеренные.
17 1898151
>>898139
Вон гугел дарт тебе запилил. Пользуйся.
18 1898180
>>898151
Дарт кст для бэка тоже же можно юзать, допустим под кафку либа есть даже уже, синтаксис адекватный, реально, в чем проблема юзать
19 1898186
>>898180
А зачем? Чтобы в вендорлок по уши залезть?
20 1898190
>>898186
А какой там вендорлок-то? Да, он от гугла, но го же спокойно все используют
21 1898196
>>898190

>го же спокойно все используют


Пока гром не грянет...
4b5b332d2a7fe020144560250999b97f.jpg85 Кб, 750x1334
22 1898363
Здравствуй, дорогой двач, в интернетах наткнулся на программирование скриптов в фотошопе, а происходит это все под джава скриптом. И хотелось бы узнать что нужно читать для того, чтобы хоть что-то накодить в фш. Хочу найти какую-то книгу для этого, чтобы ещё написана была хорошо, примерно как Герберт Шильдт "руководство пользователя Java". Книги из нафаня трндов не чекал, тут в шапке все про фронт энд, а может я в очи долблюсь и не могу найти гайд
23 1898365
>>898363
https://www.smashingmagazine.com/2013/07/introduction-to-photoshop-scripting/

А вообще - набираешь в гугле photoshop javascript, и охуеваешь от открывшихся перспектив.
IMG-20201211-WA0006.jpg92 Кб, 900x1600
24 1898370
>>898365
Не совсем то, что я ищу. Мне нужно что-то, типо, тех документации js с пояснениями операторов и всего такого.
25 1898381
>>898370
Быстрофикс. По ссылке нашёл гайд от adobe по методам включенным в фш, но так и не нашёл ничего про оператов в js.
26 1898402
>>898381
https://www.w3schools.com/js/default.asp
И операторы, и хуяторы, и всё остальное.
27 1898412
>>898402
w3cschools самый конченный ресурс порицаемый всем сообществлм.

Ты нахуя его притащил долюоеб?
28 1898413
>>898114
Айк хотел разновидность смоллтолка. Недаано же он все пояснил в твиттере буквально месяц назад.
29 1898436
>>898087
чуть-чуть
30 1898501
Двач, помоги. Пытаюсь задеплоить страницу на github pages но получаю просто пустую страницу, хотя иконка сайта почему-то загружается. Раньше получалось фиксить путем убирания слешей в путях, типа "/static/js/bsdasd.chunk" на "static/js...", но теперь это не помогает.
Что я пробовал: разворачивать сайт через npm run deploy, указывал там в package.json все что нужно, делал по этому туториалу https://create-react-app.dev/docs/deployment/#github-pages-https-pagesgithubcom и всё равно получаю хуй с маслом. Так же пробовал делать как в этом видосе: https://www.youtube.com/watch?v=ctLFWAanxcI&list=LL&index=1 и тоже не помогло. У кого-нибудь может было?
31 1898508
>>898501
Ты ссылку на проект приложить забыл
32 1898513
>>898412
Сообществом долбаебов?
33 1898516
>>898370
Слушай, вот в шапке всего 3 ссылки. Как у тебя получилось не найти среди них ссылку на MDN?
34 1898606
>>898412
никто и не говорит платить за их серты. как справочник они нормас
35 1898612
>>898508
Всё, пофиксил. Но теперь медиазапрос слетает... Блять, сука, реакт действитетльно уебище блять. Пока билдил на лохохосте - всё работало, и мобильная раскладка и десктопная. Теперь опять сидеть разбираться ЧТО ПОЛШЛО НЕ ТАК
36 1898621
>>898612
В штаны тебе Реакт не срет случайно?
37 1898623
>>898621
Пошел нахуй олень ёбаный)))))))))
38 1898630
>>898612
Причём здесь реакт? Если ты запросы на сторонние ресурсы делаешь, то один хуй прокси-сервер надо ставить, так как браузер будет их блочить. Одной статикой не отделаешься, даже на SPA.
39 1898638
>>898126

>Питон изначально делался для УЧЁНЫХ


Накуя ученым Питон, когда есть Fortran, Algol, Matlab, Haskell ?
40 1898643
>>898638
Чученые тоже любят сидеть в носу ковыряться, а не изучать хаскели.
image.png39 Кб, 930x600
41 1898650
>>898606

>как справочник они нормас


Серьезно?
Ну объясни мне смысл этого code example. ЧТо конкретно он тут демонстрирует.
42 1898666
>>898650
Перепутали person.id с person[id]
43 1898671
>>898638
Haskell не создан для практических задач, он чисто академический язык для ковыряния теорий и развития компьютер саенс
44 1898676
>>898650
Ну это не для тупых просто, экзампл поясняет что такое символ и как его использовать, но ты ведь читать не умеешь и тебе непонятно, значит ресурс виноват.
45 1898693
>>898671
Интересно как ты представляешь развитие любой науки, если не через решение практических задач?
46 1898718
Аноны, а есть какой-то устоявшийся способ отображать разноцветные иконки в реакт нейтиве (в частности, внутри кнопок)? Неужели надо png в <Image /> грузить?
изображение.png11 Кб, 1400x310
47 1898729
>>898516
Мой браузер говорит что руководству пизда
48 1898730
>>898718
font awesome или любой другой иконочный шрифт. Так как это шрифт(то есть просто текст), то цвет иконок ты можешь менять просто через css color: blue, как менял бы цвет у текста.
49 1898731
>>898730
А свои svg иконки как-то можно использовать?
50 1898733
>>898729
Господе, ну какой русик? Ладно, иди на https://learn.javascript.ru тогда.
51 1898734
>>898731
Когда я занимался RN, с SVG там были большие проблемы. Мы в итоге просто грузили кучу разноцветных иконок.
52 1898758
Аноны, подскажите как можно решить вопрос с урлами в express в шаблонизаторе pug? Я не хочу хардкорно привязывать ссылки к навигационным ссылкам. Есть ли норм способ получить ссылки из вызывающей middleware?
15908241197990.jpg270 Кб, 2000x2000
53 1898809
>>898733
Немного полистал - годно
54 1898820
>>898758
Что за вопрос-то хоть?
изображение.png3 Кб, 465x137
55 1898822
Аноны, что это за хуйня? Что делает этот >>> оператор?

Встретил эту поебень в этом коде

let array = []
for (let i = sortItmAll.length >>> 0; i--;){
array = sortItmAll
}

Непонятно как работает, но работает.
Могли бы пояснить для тупых за код?

Что значит эта хуйня?
"Присваивание с беззнаковым сдвигом вправо"

Какие нахуй биты, вы чо угараете?! Вы чо угараете, какие биты??
"The unsigned right shift operator (>>>) (zero-fill right shift) shifts the first operand the specified number of bits to the right. Excess bits shifted off to the right are discarded. Zero bits are shifted in from the left. The sign bit becomes 0, so the result is always non-negative. Unlike the other bitwise operators, zero-fill right shift returns an unsigned 32-bit integer."
56 1898831
>>898822
Это типо как шаги что ли?
58 1898840
>>898822

>Какие нахуй биты, вы чо угараете?! Вы чо угараете, какие биты??


2021 год
@
Типичный кодерок на JS
59 1898850
>>898840
Учитывая, что высокоуровневые языки программирования как раз и были созданы, потому что с битами и байтами вручную дрочиться - это больно, неэффективно и не нужно в 99% случаев, то ничего необычного, что пишущий на таком языке программист не знаком с битовым представлением, если перед этим отдельно его не выдрочил по какой-то причине. Твой высокомерный пук неуместен.
60 1898867
>>898850
Не дрочиться постоянно с битами и байтами != Не разбираться в азах информатики
61 1898871
>>898650
Пиздец, ты даже не осилил понять что там написано.
Воистину - умный любит учиться, а дурак - учить.
62 1898872
>>898758
Так первый как раз не хардкод. А то, что ты хочешь получить, называется абсолютизация ссылок, и нет способа как-то сделать, чтобы написал и работало.
Самый простой способ - написать вспомогательную функцию, склеивающую `Request.protocol` и `Request.hostname`, которая идёт аргументом `base` к конструктору `new URL()`, а результат этого конструктора вставляется в `href`. Жирный недостаток - ссылка будет меняться в зависимости от адреса запроса. На запрос c http будут ставится http ссылки, а на https - https, что для поискового робота будет считаться как две разные ссылки и соответственно дупликацией контента. Для решения этой проблемы нужно настраивать редиректы, но там тоже не без подводных камней. По сути хуже относительных ссылок, так как не решает проблемы и требует смены архитектуры.
Другой способ - склеивать базовую ссылку через переменные среды, а функцию, создающую финальную ссылку, запихать в `app.locals`, что сделает её доступной во всех шаблонах. Недостаток конечно же в харкоде и при смене хоста нужно не забыть подправлять конфиги ручками. А уж со всякими проксями вообще анал-карнавал начинается.
В общем ставь относительные ссылки и не выёбывайся. Если вдруг кабанчик наймёт сеошника, который скажет тебе абсолютизировать/канонизировать ссылки, тогда и будешь костылить решение.
63 1898882
>>898867
Ты все еще не назвал причину, по которой человеку, программирующему на любом высокоуровневом языке, нужно в своей ежедневной практике знать, что такое биты и как их можно сдвигать. Если идти по бессмысленным эмоциональным кукарекам "ита же азы как их не знать", то и тебя можно отправить учиться паять процессоры и переизобретать ассемблер, потому что это еще больше "азы".
64 1898907
>>898882
Причина простая - программирование это сложная инженерная дисциплина требующая высокой квалификации для решения постоянно возникающих нетривиальных задач по обработке информации. На рынке, конечно, до сих пор есть место для макак-формошлепов, но эта ниша, во-первых, занята индусами работающими за плошку риса, а во-вторых, понемногу закрывается разными генераторами этих самых форм

> паять процессоры и переизобретать ассемблер


Может быть процессор я не спаяю и ассемблер не переизобрету, но в том как устроены процессоры с ассемблерами я например разбираюсь
65 1898910
>>898882
Чувачок, у тебя аргументация на уровне детского сада.

Если ты не понимаешь, что такое байт, сдвиг, побитовые операции - ты не программист.
Это как не знать, что Земля круглая, примерно.
Но, можешь утешаться тем, что таких псевдо-программистов довольно дохуя в мире.
66 1898934
>>898907

>Причина простая - программирование это сложная инженерная дисциплина требующая высокой квалификации для решения постоянно возникающих нетривиальных задач по обработке информации.


Что же тогда в НИИ крестовики за МРОТ работают?

>но эта ниша, во-первых, занята индусами работающими за плошку риса, а во-вторых, понемногу закрывается разными генераторами этих самых форм


Ох уж эти фантазии разработчика заднего конца. Скорее бэкэнд заменят конструкторами, в котором только разбирающиеся пердолики останутся, а всяких перекладывателей джейсонов отправят на мороз.

>Может быть процессор я не спаяю и ассемблер не переизобрету, но в том как устроены процессоры с ассемблерами я например разбираюсь


Что нихуя тебе не поможет при спаивании процессора и написания ассемблера.
67 1898938
>>898907
Все еще не назвал причину и область применения такого знания в ежедневной работе программиста высокоуровневого языка.

>Может быть процессор я не спаяю и ассемблер не переизобрету


Как же так? Ведь

>программирование это сложная инженерная дисциплина требующая высокой квалификации для решения постоянно возникающих нетривиальных задач по обработке информации.


а ты даже процессор спаять и запрограммировать не можешь, если вдруг придется решить "постоянно возникающую нетривиальную задачу" по пайке и программированию процессора, формошлеп.
>>898910

>Если ты не понимаешь, что такое байт, сдвиг, побитовые операции - ты не программист.


Это потому что ты так сказал? Ну я тогда сказал, что если процессоры не умеешь паять, то ты не программист, парируй, непрограммист.
68 1898944
>>898850
Каким образом уровень языка программированирования освобождает от обязанности знать азы? Ну напиши мне хекс-редактор без знания двоичной арифметики. Или это слишком низкоуровневая задача по-твоему?
69 1898957
>>898944

>обязанности знать азы


О такой обязанности лично Алан Тьюринг в программистской библии написал или откуда ты ее взял?

>Ну напиши мне хекс-редактор без знания двоичной арифметики


Ну спаяй мне процессор без навыков пайки.
изображение.png1,1 Мб, 1024x819
70 1898961
>>898836
Пендоский не уважаю, но со временем пойму, благодарен.

>>898934
>>898907
Приятно, что начал срач.

>Не дрочиться постоянно с битами и байтами != Не разбираться в азах информатики



На уроках информатике мы играли в ксс, извини.
А на практике не приходилось сталкиваться с битами. До недавних пор.

>понемногу закрывается разными генераторами этих самых форм



Что за генераторы? Моя мама была не права, когда отдавала меня учиться на вебдев к хауди-хо? Генераторы, Анон, что они значат?

>>898944

>Каким образом уровень языка программированирования >освобождает от обязанности знать азы? Ну напиши мне хекс-


>редактор без знания двоичной арифметики. Или это слишком >низкоуровневая задача по-твоему?



Вообще не интересует хекс-хуекс. Чисто для себя на жиесе кодю. Вот заканчиваю туду, что-то вроде проект-менеджера.
Ты бы видел мой php. Моя база данных - сохранение html в файл.

Мимо тот Анон, который не знает про сдвиг битов.
71 1898962
>>898822

>let array = []


>for (let i = sortItmAll.length >>> 0; i--;){


>array = sortItmAll


>}


Что блядь?
изображение.png15 Кб, 403x357
72 1898967
>>898962
// Sort Priority
function PrioritetSorter(){
let sortBlock = document.querySelector('.content')
let sortItmAll = document.querySelectorAll('.prioritet')

// convert nodelist to array
let array = []
for (let i = sortItmAll.length >>> 0; i--;){
array = sortItmAll
}

// perform sort
array.sort(function(a, b) {
return Number(a.innerHTML) - Number(b.innerHTML)
});

// join the array back into HTML
let output = ""
for (let i = 0; i < array.length; i++) {
output += array.closest('.content_itm').outerHTML
}

// inner text in
sortBlock.innerHTML = output
ReloadAll()
}
//

Спиздил где-то сортировку. Работает, но не понимал ">>> ".
изображение.png15 Кб, 403x357
72 1898967
>>898962
// Sort Priority
function PrioritetSorter(){
let sortBlock = document.querySelector('.content')
let sortItmAll = document.querySelectorAll('.prioritet')

// convert nodelist to array
let array = []
for (let i = sortItmAll.length >>> 0; i--;){
array = sortItmAll
}

// perform sort
array.sort(function(a, b) {
return Number(a.innerHTML) - Number(b.innerHTML)
});

// join the array back into HTML
let output = ""
for (let i = 0; i < array.length; i++) {
output += array.closest('.content_itm').outerHTML
}

// inner text in
sortBlock.innerHTML = output
ReloadAll()
}
//

Спиздил где-то сортировку. Работает, но не понимал ">>> ".
73 1898975
>>898938
Процессоры паяют электронщики, а не программисты.
Я, кстати, умею. И неоднократно это делал.
И в JS умею лучше тебя.
Парируй теперь.
74 1898983
>>898957

>откуда ты ее взял?


Из базового курса информатики, мань.
75 1898984
>>898967

>convert nodelist to array


А можно ещё более неочевидный способ?
76 1898986
>>898975

>Процессоры паяют электронщики, а не программисты.


Ну а с байтами тогда дрочатся байтоебы, а не программисты.

>И в JS умею лучше тебя.


Опустим твои выдумки и вернемся к вопросу - почему "настоящий" программист должен знать побитовые операции, но внезапно не должен уметь паять процессоры? Ответ будет сегодня или опять продолжишь вилять жопой?
77 1898991
>>898983

>Из базового курса информатики


Из какого? Почему именно из этого? Если кто-то программирует, но слыхом не слышал о твоей библейском курсе информатики с десятью заповедями, то он не настоящий программист? Почему?
78 1898992
>>898967
Документацию к какому-нибудь жквери читаешь что ли? Конвертировать коллекцию в массив, а потом в строку - то ещё извращение. Ещё и вставлять через innerHTML заместо фрагмента.
image.png341 Кб, 620x462
79 1898995
>>897984 (OP)
Добрый вечер о великие фронтендеры всея двача. Обращается к вам подданый низкоуровневый грязный и немытый разработчик бэкенд серверный гречневый. Прошу о фронтендеры, дайте совет заблудшему грязному негодяю.

Короче в чем суть. Сейчас пилю пет проект ну ок не совсем пет, но будет опенсорсным, суть в том, что один из главных интерфейсов - это веб морда. Соответственно разделен он на обособленное API, которое можно будет дергать по http, апи хранит в себе основной функционал и в таком роде. Так вот, в чем вопрос - как лучше организовать SPA фронтенд? Писать буду самостоятельно, что там у вас сейчас актуально для этой темы, возможно будет обособленный бэкенд на ноде (т.к. основное апи пишется на низкоуровневом языке, если есть возможность - не тащить туда бизнес процессы типа регистраций и в таком роде), но пока все в процессе планирования. Если тут есть не только вкатуны в жс, но и состоявшиеся фронтенд боги, вертящие фреймворками и технологиями как хотят - буду рад советам.

Пока думаю просто взять vue с нодой/питоном и не париться особо, слать все запросы через бэк самого фронта, а апи так и останется внутренним изолированным сервисом с кор логикой.
80 1899001
>>898991
Потому же, поему не каждый фотографирующий фотограф, пишущий -писатель, а готовящий - повар. Ты настолько долбоеб с идиотскими аналогиями, что тратить на тебя свое время жалко. так что иди нахуй.
81 1899006
>>897984 (OP)
IndexedDB на практике как часто юзается? Или это антипаттерн?
82 1899007
>>898938
Область применения битовых операций в JS - реализация битовых карт, например, или функций хэширования. Может лично тебе никогда не понадобится, но если вдруг понадобятся - ты вместо хорошего решения насеришь костыльный говнокод
83 1899010
>>898995

>фронтенд vue


Бери nuxt

>бекенд api nodejs


бери nestjs
84 1899011
>>899010
Долбаеб таблетки не принял?
85 1899012
>>899010

> nuxt


Кстати у нас он был на прошлом месте работы у фронтендеров. Постоянно слышал как у них жопа горела, когда пытались авторизацию реализовать. Я не заебусь его изучать, он кажется очень комплексным, а переквалифицироваться в фронтендера не хочется.

> nestjs


Пиздец у вас фреймворков, аж в глазах рябит
86 1899013
>>899010
Хуй сосешь? Пидарас?
87 1899014
>>899012
nestjs альтернатив нет, если ты настоящий бекендер
gazeta-zabawny-kawa-guru-zbiory-obrazówcsp0794616.jpg31 Кб, 398x470
88 1899017
>>898995

>как лучше организовать SPA фронтенд


Делай сервис чтобы дергать API, опиши модели данных с помощью классов, организуй хранилище этих данных, потом отрисовывай реактивно на страничку. Не забуть взять какой-нибудь роутер и запилить наиболее часто используемые виджеты в виде компонент

мимо гуру фронт-енда
89 1899018
>>899014

>пук-среньк


жс-блядь что-то про "настоящего бекендера" высрала? Чудно, однако
изображение.png87 Кб, 225x225
90 1899019
>>898992
Документация для быдла ебаного!

А если серьезно, то просто появлялась идея и гуглил ее. Именно эту сортировку вроде с стаковерфлоу украл.

Знаю, что лютый говнокод, но он работает!
91 1899020
>>899001

>Потому же, поему не каждый фотографирующий фотограф


Потому же - почему? Опять причину забыл назвать.

>Ты настолько долбоеб с идиотскими аналогиями


Аналогий я не использовал, программирование процессоров - это не аналогия, это абсолютно такие же программистские "азы", как и дрочево битов, просто более "азовое", и почему-то такие "азы" у тебя вызывают дискомфорт.

И ответ на самом деле прост, ты путаешь историю программирования с профессией программирования. Тот исторический факт, что диды без байтоебства не смогли бы изобрести высокоуровневые языки программирования, никаким образом не накладывает обязанность байтоебствовать на современного профессионального программиста. Если хочешь аналогию, то это то же самое, что говорить "ты не настоящий повар, потому что не можешь дичь освежевать, а только с готовыми кусками мяса работаешь".
>>899007

>Может лично тебе никогда не понадобится, но если вдруг понадобятся


А если тебе вдруг понадобится запрограммировать процессор? Или написать нейросеть? Или принтер починить? Или в жопу поебаться с тимлидом? Вдруг понадобится, а ты не умеешь и обосрешься? Срочно беги изучать.
92 1899021
>>899017

>модели данных с помощью классо


Игорь, ты? Узнал тебя по твоим шизоидным высерам
93 1899022
>>899018
Я не школоло чтобы быть язык нейм программистом, маня. У вопрошающего была реч о ноде, как прокладке между внутренними сервисами и фронтом.
94 1899023
>>899022
речь
95 1899025
>>899022
А мой хуй - прокладка между твоей матерью и мной
96 1899028
>>899020

>биты это история программирования



Я тебя услышал. Рюкзак собирай.
sage 97 1899030
>>899022

>Я не школоло


Ты просто уебан
image.png341 Кб, 620x462
98 1899032
>>899017

> опиши модели данных с помощью классов, организуй хранилище этих данных, потом отрисовывай реактивно на страничку


На чем это будет проще сделать, чтобы не требовалось 2 года опыта во фронтенде, но при этом и не сделать лютое говнище неподдерживаемое? У меня опыт во фронте - это Vuejs с реактом на уровне написания компонентов в не SPA, я боюсь, что погрязну во всем этом на месяцы, а желательно побыстрее закончить. Но в любом случае фронт будет отдельно, вероятно без ноды не обойтись, ибо апи будет через гейтвей с потенциалом скейлинга в ширь.

Нукст хорошей идеей будет? Вроде все в одной коробке с сервером и фронтом, если не ошибаюсь? По сути на фронте будут личные кабинеты с регистрацией возможно нахуй, просто oauth запилю и бд юзеров по факту.
99 1899034
Какие же вы лего воспламеняемые зумеры. Батя керосином бухал вместо водки?
100 1899035
>>899020
Ты походу обосрешься сразу как только потребуется написать рекурсивную функцию, а первый встретившийся оператор битового сдвига в коде будет причиной срыва сроков проекта
101 1899038
>>899028

>обосрался в дискуссии, поэтому выдумаю за оппонента фразу, которой он не говорил


Понятно.
>>899035
Ты походу обосрешься сразу как только потребуется запрограммировать микроконтроллер, а первый встретившийся тимлид-гей будет причиной срыва сроков проекта
102 1899039
>>899032
Что-то никаких проблем с нукстом не испытывал, авторизацию обычную сессиями запилил. Правда это не на работе. На работе всякое spa говно на вуе и реакте
1TYHUmI3Yxxrgway1icpbJQ.png22 Кб, 456x502
103 1899040
>>899032
Vue+Vuex+ES7

>Нукст хорошей идеей будет?


Если SSR нужен, то бери, если не нужен - забей
104 1899041
>>899038

>как только потребуется запрограммировать микроконтроллер, а первый встретившийся тимлид-гей


Неа, у меня в позции написано что я фронт-енд. Алсо я официально на удаленке, так что никаких сексов в жеппы, извени
105 1899043
>>899040

> Vue+Vuex+ES7


А бэк? На чистой ноде? Вроде нукст как раз хорош тем, что все вместе, или я ошибаюсь?
106 1899044
>>899041
На заборе тоже много чего написано, а тимлид может и к тебе домой заехать.
107 1899046
>>899040
SSR не нужен если это проект для внутреннего использования компанией заказчиком. Там похуй на юзверей конечно, никуда они не уйдут. Если это saas то нужен
image.png341 Кб, 620x462
108 1899047
>>899030
>>899038
>>899035
>>899041
Какая-то у вас тут нездоровая атмосфера, в наших бэкенд тредах поспокойнее
109 1899048
>>899043
nestjs бери даже если тупаскрипт не будешь использовать. У других фреймворков на ноде просто нет архитектуры
image.png341 Кб, 620x462
110 1899051
>>899048
>>899040
>>899043
Блин, наверн лучше на питоне с фласком бэк подниму, иначе ебнусь все это изучать. Видимо вуй возьму. Если еще у кого есть предложения - с радостью выслушаю
111 1899052
>>899043

> На чистой ноде?


Экспресс ежжи

>>899046
SSR для поисковиков обычно надо, потому что SPA они плохо индексируют. Ну и потом уже оптимизация скорости загрузки для юзеров
112 1899053
>>899051
Это правильно. Нода только mvp годится

тот же анон с nestjs
113 1899059
>>899047
Это я начал, извини.
114 1899060
>>899006
Какой антипаттерн? Он позволяет хранить большие файлы на клиенте, для этого и используй. Обыкновенный стор он не заменит, так как поддержка варьируется между браузерами, но как дополнительная фича, позволяющая снизить нагрузку на сервер - вполне подойдёт.
115 1899083
>>899032
Хуюкст сервер на заменит, один хуй тебе придётся отдельный апи сервер пилить, так как встроеные псевдосерверные нукстовские заморочки костыльны и плохо задокументированы.
116 1899096
>>899060

>хранить большие файлы на клиенте


НА
ХУ
Я
117 1899097
>>898986
Ебанько, а алгоритмы настоящий программист знать должен?
А зачем? Если все нужные алгоритмы уже реализованы в библиотеках?
Ты дегенерат, ты это понимаешь?
118 1899099
>>899096
Чтобы засрать клиент еще больше, ведь куча говна от всякого говна типа progressive web apps
119 1899100
>>899099

> ведь куча говна от всякого типа progressive web apps не достаточно


фикс*
120 1899105
>>899097
Мысль написать забыл.
121 1899106
>>899020
Ты демагог, дегенерат и пидорас.

Ты понимаешь, что ты смешон?
Ты не в состоянии осилить детскую хуйню (а биты-байты-сдвиги-ксоры - это именно что детская хуйня), но, что-то кукарекаешь о профессионализме.
Ты 100% и на жс программируешь как говно.
122 1899107
>>899105
Вот тебе мысль: >>899106
123 1899108
>>899106
Да ну, анон. Жир уже стекает с монитора, оставь ты его в покое, видишь же, что не выкупает
124 1899109
>>899106
Это не мысль, это тебе от чего-то стало неприятно и ты сорвался на эмоции. Когда успокоишься - попробуй выразить, что там у тебя в голове дырявой.
125 1899112
>>897984 (OP)
>>1888626 (OP)
Сап, двач.
1. Хочу сделать такой же красивый gui, как пикрелейтед1. В окошке несколько прямоугольников c надписями(до 10^6), между некоторыми рёбра-курвы. Разумеется далеко не все прямоугольники надо рендерить одновременно, нужна навигация в таком окне + изменение масштаба - удалить, приблизить, чтобы не слишком эти самые прямоугольники руинило.
2. Хочу сделать такой же красивый gui, как пикрелейтед2

Есть ли на javascript что нибудь подходящее для такой задачи?
126 1899115
>>899109
Выразил тебе за щеку, глотай.
127 1899118
У меня питон 21 см, стоит ли мне вкатываться в жс или остаться с Python?
128 1899121
>>899096
Если не заметил, то через тырнет уже давно не только текстовые файлы передают. А васяну клипцо на мобилке нужно здесь и сейчас.
129 1899125
>>899112
Да - html + css
image7 Кб, 422x246
130 1899126
Зачем в JSON значения ключа заключают в кавычки? Чтобы имя ключа могло быть вообще любым unicode символом? Но это кажется не очень эффективным для быстрого парсинга, да и вроде все равно никто не пользуется ничем, кроме латиницы для названий ключей.
131 1899129
>>899112
Первое на Canvas/WebGL лучше (конкретно окно с нодами, остальное DOM). На последнем можно вытянуть где-то 100к спрайтов в 60 фпс, если попотеть. Я бы руками писал, но если СЛОЖНА, то начни с Pixi.

Второе изи делается на DOM и вообще с JS никак не связано.
132 1899131
>>899126
Потому что по спеке валидно только так.
133 1899132
>>899112
Казалось бы, причём здесь жаваскрипт? Есть Canvas2D/3D и WebGL, но весь гуй на нём заебёшься рисовать. А для второго наворачивай электрон, но там надо будет и HTML/CSS для гуя дёргать.
134 1899133
>>899131
так я и спрашиваю зачем сделали так, а не иначе
135 1899134
>>899126
Потому что объекты - ассоциативные массивы. Не поверишь, но ключи ЖС объекта - тоже строки.
136 1899136
>>899112
возьми любую gui либу (SDL2, GTK..) и пропусти через emscripten
137 1899139
>>899134
Так я и говорю, что поиск по ключам в ассоциативном массиве, где символы не весь юникод, а только латиница, был бы быстрее
138 1899140
>>899133
Пробелы, слышал про них?

JSON = JavaScript Object Notation.
Предлагаешь запретить использовать строки с пробелами в качестве ключей объектов?
139 1899141
>>899139
А если тольк цифры - то ещё быстрее.
140 1899144
>>899140
читай внимательнее, что я написал, а не срач разводи
>>899141
безусловно, но именованые ключи эффективнее для цели назначения формата
141 1899148
>>899144
Ты написал хуйню, если коротко.

Ты предлагаешь запретить строки с пробелами в качестве ключей объектов?
Или брать всё до двоеточия?
Тогда запретить двоеточия?
Или смотреть - есть кавычки или нет, и, если нет, то брать слово целиком?
Так не делают форматы, чувак.

Более того, с чего ты взял, что в этой теме кого-то интересует быстродействие любой ценой? Кто тебе это сказал?

Преждевременные (микро) оптимизации - маркер ньюфага.
142 1899154
>>899148
нормально общаться учись, а не как агрошкольник

ввести один спецсимвол разделения ключа и значения(сейчас это двоеточие), если нужно в имя вдруг его засовывать, то как и сейчас механизм через слеш, само имя просто не весь юникод, а ограниченный набор аски (например, нечно похожее в виде ограничения есть на формат 3d моделей gltf и как раз таки для упрощения и ускорения, потому что реально никто почти не использует весь юникод для ключей, а парсинг замедляет)
143 1899160
>>899154
Ты поучи ещё меня хорошим манерам, щенок ёбаный, лол.

По самой постановке твоего вопроса уже всё понятно.
И ты упорно не читаешь ответы.
Тебе, блядь, сказали - это формат для представления JS _объектов_.
Понимаешь?

Ещё раз - ты хочешь ввести ограничения на то, какого рода строки могут быть ключами _объектов_ в JS?
Ты долбоёб?
Про биты выше не ты писал, что они не нужны?

Если тебя не устраивает скорость обработки JSON - используй свой фомат. Так раньше делали сплошь и рядом. И сейчас делают, но, реже, т.к. на быстродействие стало похуй - оно априори достаточное.
144 1899162
>>899126

>Но это кажется не очень эффективным для быстрого парсинга


Собственно почему? Ключи парсятся ровно тем же кодом что и строковые значения, значит больше шансов этому коду попасть в кэш
145 1899166
>>899154

>формат 3d моделей gltf


Охуеть пример. Ты в курсе, что джейсоны используют для передачи произвольных данных, а не для пробрасывания ноликов и единиц в графическом движке? Распарси-ка таблицу с твоей охуенной идеей, погромист наверно должен сам придумывать названия всех ключей, даже если таблицу в первый раз в жизни видит.
Если у тебя от джейсона бомбит, то с XML наверно вообще сердце остановится от оптимизаторства.
146 1899173
>>899126
Если тебе прям так дохуя надо скорость сериализации/десериализации или более компактное представление, то есть специализированные форматы типа BSON или MessagePack. JSON - это простота и универсальность в первую очередь. Очень важные штуки на самом деле
147 1899191
>>899121

> не только текстовые файлы передают


Нахуя БД на уровне клиента, ты мне скажи? Нахуя?
148 1899194
>>899126
У жсона относительно большая спецификация с чётко прописанными штуками типа обязательных двойных ковычек в ключах и обязательного отсутствия трейлинг запятой, например
Макакить любую хуйню в фигурные скобки тебе даёт рассчитанный на макак рантайм
Перформанс-ориентированные парсинг либы не сожрут и одинарные ковычки
149 1899196
>>898693
Ты конечно охуеешь мой юный друг, но реальный мир использует от силы 0.1% от того что было придумано в теоретической математике. Типа суперзадач - реального применения нет, но идея интересная (в парте 6 жожо есть стенд который уменьшает тех кто бежит до владельца в 2 раза - это и есть суперзадач). Так и идёт развитие - однажды ктото думает как бы реализовать ту или иную хуйню и внезапно находит что решение уже давно было придумано в теоретических сферах наук, но никогда не было реализовано. Хаскелл это просто для теоретического дроча, почитай что сами авторы языка о нем говорят.
150 1899199
>>899191
Чтобы не загружать клипцо лишний раз.
151 1899205
>>899199
БД то нахуя? Ты хоть в курсе как данные хранятся?
152 1899213
>>899196
Математика - это не наука, а дедукция из аксиом.
153 1899219
>>899196

>реальный мир использует от силы 0.1% от того что было придумано в теоретической математике


Вывод: математика - говно без задач
154 1899231
>>899205

>Ты хоть в курсе как данные хранятся?


А ты в курсе? Или увидел DB в названии и сразу пошли въетнамские флэшбеки от SQL-запросов?
155 1899268
Как использовать await на верхнем уровне? Постоянно хуячить анонимные async-функции?
156 1899270
>>899213
А аксиомы откуда берутся, клоун?
157 1899273
>>899219
Не, вывод должен быть: задачи - говно. Но ты ещё маленький чтобы понять суетность мира, и почему некоторые вещи делаются по фану. Ирвинг Финкель всю молодость потратил на расшифровку правил для королевской игры Ур. Практической пользы от этого мало в итоге. Ему просто доставило это делать.
158 1899277
>>899273

>Ирвинг Финкель всю молодость потратил на расшифровку правил для королевской игры Ур. Практической пользы от этого мало в итоге


Не, знание истории намного более практично чем кажется. Другое дело, что практичность часто совсем не понятна обычному мимокрокодилу, лишенному знания контекста
159 1899285
>>899268
Просто оборачиваешь весь скоуп в асинхронное мгновенно вызываемое функциональное выражение и не паришься.
А по-хорошему, если ты делаешь какой-то ассинхронный запрос, то ожидаешь ответа или его отсутствия, то есть в любом случае нужно возвращать какие-то данные и обрабатывать ошибки. А такие простыни пихать мгновенным вызовом - не уважать себя и других людей, читающих твой код.
160 1899287
>>899270
При чем тут "откуда берутся аксиомы"? Речь о том, что любая наука прежде всего индуктивна и дедукцию использует только в очень редких случаях. В математике же индукции нет от слова совсем, она на 100% состоит из чистой дедукции.
161 1899288
>>899285

>в асинхронное мгновенно вызываемое функциональное выражение и не паришься


Это и есть async-анонимная функция блин

async () =>
{
await execMyShittyFunc();
} ();
162 1899293
>>899288
Вот её и вызываешь в начале файла, а внутрь пихаешь всё содержимое. Здоровый человек это назвал бы модулём, но мы же всё-таки курильщики.
163 1899295
>>899268
>>899288

>Постоянно хуячить анонимные async-функции?


Можешь хуячить не-анонимные:

main()

async function main () {
// тырыпыры
}
164 1899297
>>899288
Блять, разве есть что-то пизже чем ES6-нотация для функций, а? Сука, у меня аж хуй встает когда вижу такое
165 1899302
>>899297
Конечно есть. Классы, например
15547844435090.gif425 Кб, 300x300
166 1899324
Посоны, кто-нибудь игры делал на js? Успешно? Хочу сделать простенькую аркадку. Хер знает с чего начать.
167 1899335
>>899324
На MDN есть раздел, посвящённый игроёбству на жс, вот с него и начни.
168 1899350
>>899324
я делал
мини игру для промо страницы
успешно лол, несколько тысяч человек сыграло
169 1899388
Почему монго не может в нормальную загрузку картинок? Сука на ютубе одни дегенераты которые дрочат на свой multer, только у однго нашел FileBase64, нахуй форсить непаботающее говнище?
170 1899409
>>899388
Gridfs, дилетантишка.
171 1899418
>>899409
Нахуя??
172 1899419
Огласите топ ui либ на 2021
173 1899446
>>899388

>Почему монго не может


Потому что это монго(ненужный кал).
174 1899480
>>899388
Казалось бы, причём здесь монга?
анон 175 1899557
https://jsfiddle.net/2gbd5upa/

Объясните, почему при передаче одной и той же функции в разные переменные, при вызове через эти переменные, они ведут себя как две разные, но идентичные функции? Насколько я успел понять, функция это объект где-то в памяти, и тут оба counter должны ссылаться на него, но выходит не так.
176 1899559
>>899557
Вызов func() создает новый объект со своим контекстом. Для того чтобы работало так как ты себе это представлял нужно написать:
let counter1 = func();
let counter2 = counter1;

Тогда эти переменные действительно будут ссылаться на один объект.
177 1899580
Хочу напилить чат типа дискорда че заюзать?
178 1899589
>>899580
node.js + react/angular/vue/svelte выбирай что больше нравится
179 1899591
>>899589
А еще?
180 1899592
>>899388
Но ты же картинки будешь хранить, в чем-то типа Amazon S3, а в базе только стрингу с адрес на сдн с которого картинка раздается
181 1899593
>>899591
А что еще? Что тебя конкретно интересует?
анон 182 1899595
Аноны, привет. Я начинающий в изучении джаваскрипта и в программирования в целом. Такой к вам вопрос, что по вашему мнению самой сложное в js?
183 1899599
>>899592
А почему сразу нельзя в одной базе держать?
184 1899611
>>899599
А сервить ты их потом как будешь? Со своего сервера? Это ж ебануться какая нагрузка + сдн у того же амазона будет располагаться по ближе к юзеру
185 1899613
Если сервис для раши, то тогда конечно лучше облако яндекса, чем амазона
186 1899618
>>899611
А есть бесплатные?
187 1899648
>>899592
По-хорошему ещё бы надо и всякие мета-данные сохранять, чтобы их сразу кормить в шаблон.
>>899599
Ты в курсе, что у базы данных и файл-серверов взаимоисключающие требования к работе? ДБ нужно как можно более эффективно шуршать по произвольным данным, а файл-серверу нужно как можно быстрее отправлять огромные массивы.
188 1899664
Нахера ваш axios неужели обычного фетча не хватает ?
189 1899669
>>899664
В фетче нужно пердолить свою реализацию прогресса загрузки, плюс аксиос на старых эксплорерах работает.
190 1899690
>>899664
Для браузера фетч в сто раз лучше, проще и прямолинейнее в использовании, аксиос - это нагромождение лютой хуйни, 99% из которой мало того, что не нужно и может быть заменено одной функцией(интерсепторы, две трети опций в конфиге и т.д), так еще и сделано через жопу.
>>899669

>В фетче нужно пердолить свою реализацию прогресса загрузки


Во-первых, в фетче это сделать невозможно в принципе.
Во-вторых, в аксиосе тебе тоже нужно ее "пердолить" до хоть сколько-то удобоваримого состояния, потому что это по сути просто API XMLHttpRequest и если уж ты его готов пердолить, то сделать отдельную обертку на редкую загрузку, реально требующую прогресс бара, будет не сильно сложнее.
В-третьих это хуйня на переферии, никто не выбирает http-клиент по "а можно ли там прогресс аплоада получить".

>аксиос на старых эксплорерах работает.


Фетч с полифилом тоже работает.
191 1899692
>>899690

Нинужно. Твердо и чётко.
192 1899770
>>897984 (OP)
откуда учить теорию js?
193 1899777
>>899770
Нахуя теория без практики? Учишь вертску js сам прдтянется
UVlkAXl.png178 Кб, 463x492
194 1899785
>>899777
н-ну ладно..
195 1899790
>>899785
Аниме, ты не пищи, а слушай анона.
196 1899943
>>899790
>>899777
Какой годный туториал почитать по html\css, прежде чем верстать
197 1899951
Хули ему уже не нравится?
198 1899995
>>899951
Так у тебя `name` в глобал скоупе.
Если не хочешь, чтобы тайпскрипт матерился, оборачивай свои простые скрипты в мгновенно вызываемое функциональное выражение.
199 1900001
>>899995
Ебать спасибо нахуй, вкатился в js.
200 1900002
>>900001
Хотя оно работает, а значит мне похуй.
201 1900012
>>900002
Это тебя просто Кантор говно заставляет писать, я НИГДЕ не видел использование промпта за пределами его справочника.
Вкатывайся лучше с гайда в MDN, там хоть по HTML/CSS сперва пробегают, так как их нужно знать для манипуляций с DOM'ом в жс.
А этот пример сразу хёвым практикам учит: использование prompt/alert, неявный возврат значений.
202 1900018
>>899995

>мгновенно вызываемое


Бля, immediately - это не "мгновенно", а "немедленно", "сразу же".
Разницу понимаешь?
Мгновенно - это про быстро/медленно.
Немедленно - это про сейчас/потом.
203 1900019
>>897984 (OP)
JS - лучший фронтенд язык?
204 1900023
>>900019
А какие ты ещё знаешь?
205 1900024
>>900023
Кложур, дарт.
206 1900025
>>900024
Ну, из этих - JS вне конкуренции, лол.

Правильный ответ - TS
207 1900026
>>900025

>сравнивать жопаскрипт с божественной кложей


>называть отдельным языком жалкую попытку обмазать жопаскрипт еще большим говном(типами) и закрыть незакрываемые дырки


Держи в курсе.
208 1900027
>>900025
Кто такой TS?
мгновенный.png3 Кб, 597x76
209 1900028
>>900018
Ты свой пилпуль оставь для своих дружков-пердоликов.
210 1900029
>>900027
Транссексуал
211 1900030
>>900029
А зачем он?...
212 1900037
>>900030
Чтобы трансипилировать код.
213 1900039
>>900037
Ты реально очень крутой!
214 1900049
>>900028
Не умничай, клоун.
То, что ты не особенно талантлив по части языков, это было сразу понятно.
И никакие говнокартинки этого факта не изменят.

Зайди в гугл транслейт, и посмотри, как immediate переводится на русский.
Google Переводчик.png15 Кб, 642x376
215 1900052
>>900049

>Не умничай, клоун.


Охуенные истории от косноязычного дебиловатого педанта, пытающегося приебаться к семантике и жиденько обсирающегося в этом.

>То, что ты не особенно талантлив по части языков, это было сразу понятно.


>Зайди в гугл транслейт, и посмотри, как immediate переводится на русский.


Бля, гугл транслейт оказывается истина в последней инстанции по русскому языку! Это ты благодаря ему свой аргумент высрал?
Вот тебе определение "мгновенного" на твоём любимом и уважаемом гугл транслейте. Неудивительно, что русские доки такое говно - их переводят, советуясь гугл транслейтом, а не русским языком. Небось и ноду узлом называешь?

>И никакие говнокартинки этого факта не изменят.


Ну да, русский викисловарь это какая-то говнокартинка, то ли дело швитой гугл, который машинное обучение пользует для переводов (а значит никогда не сможет в синтетические языки).
216 1900058
Как проще всего в юзерскрипте узнать текущие открытые вкладки одного сайта (скрипт запущен на каждой)? Что-то вроде chrome.tabs, но не в расширении.
217 1900060
>>900052
Пошёл на хуй, дурак.
218 1900061
>>900058
Никак
219 1900085
>>900026
Как разруливается ситуация если скажем у нас проект на кложе, но надо заюзать какую-то либу которая на жс?
220 1900094
>>899951
что это за кошмарная лайт тема, которая не меняет сайдбар
221 1900096
>>900061
Я уже двумя с половиной способами это сделал. Просто спрашиваю, может кто знает самый просто и быстрый вариант, который я проглядел.
222 1900099
>>900096

>Я уже двумя с половиной способами это сделал.



Так рассказывай.
223 1900113
>>900085
Ну, не думаю, что будет больше проблем, чем с кложурой на jvm и java либами - там всё делается просто как два пальца обоссать.

>>900026
Где тред по твоей божественной кложе, сынок?
Почему там пусто?
224 1900130
>>900113

>Ну, не думаю


То есть никак?
225 1900139
>>900130
Не осилил дочитать предложение до конца?
Наоборот - всё будет OK.
Если уж на джаве с этим всё нормально, то на жс - тем более.
227 1900161
>>899595

>Consuming JavaScript Code


А можно без потребительства?
XT.mp4159 Кб, mp4,
640x360, 0:01
228 1900163
229 1900185
Все больше работая в ФП стиле и изучая ФП в целом наконец-то выхожу на уровень, когда не понимаешь как вообще люди пишут на ООП и главное зачем.

Вдвойне приятно, что JS если откинуть ненужные this'ы вполне себе полноценный ФП язык (конечно, имею ввиду Тайпскрипт больше, писать без типов в 2020 даже иронично не смешно уже), уже успешно применяю некоторые практики на работе, в том числе пишу point free c помощью ramda в редьюсерах редакса кстати вголос проигрываю с местных обсуждений редакса и вьюкса, вы совсем долбоебы что ли не понимаете зачем нужен этот паттерн, зачем разделять экшны и редьюсеры и "добавлять код в 3 файла" чтобы сделать правку, если для вас это бойлерплейт и ваш проект просто фетчит списки с сервера, то земля вам пузом, редакс вообще не про это ало.

Советовался с сеньоромправда мое повышение на сеньора тоже не загорами, в этом году планируется весной/тимлидом/лучшим другом по совместительству, сказал что рамду одобряет, только конечно же большинство разрабов неосилит, поэтому нужно будет оставлять комменты, иметь типы @types/ramda напрягает немного, к сожалению в ТС нельзя выразить по-нормальному каррирование и некоторые функции по типу compose и обучать местных мидлов.

Кстати, работаю не с DOM, а canvas и в редьюсерах у нас таки довольно сложные вычисления, рамда идеально зашла, как и ФП подход в целом.

Подводные камни от знающих?
sage 230 1900189
>>900185
Ты ж почти сеньор какие нахуй советы?
231 1900191
>>900185

>редьюсерах у нас таки довольно сложные вычисления,


Земля тебе пухом долбаебина
232 1900194
>>900185
Просветлившийся функциональщик на месте, я спокоен. Таблетки принять не забывай.
233 1900196
>>900185
О ты то наверное и пояснишь за редакс. Смотри есть файл сервиса фетчаший запросы на сервак, запускаю его в экшн креаторе, диспатчу результат в стор, сам ЭК юзаю уже в компоненте, это норм практика? Долбени с ютуба за кой то хуй фетчат запросы прям из юзэфекта, это норм?
234 1900197
>>900185

>Подводные камни от знающих?



Ты через месяц хуй прочтёшь, что ты там написал.
А так - всё нормально, продолжай.
235 1900203
Jwt актуально юзать?
carbon.png55 Кб, 1244x520
236 1900207
>>900196
Да, так и задумано. Норм делать все что касается экшна в экшн криейторе, в том числе запросы на сервер, для этого thunk-actions и были придуманы, чтобы было удобно задиспатчить экшн, а внутри него произвести какой-то сайд эффект и задиспатчить в зависимости от результата. Пикрелейтед пример абстрактный.

Из юзефекта не норм, а полный пиздец, одна из причин почему современный реакт код скатывается в стену нечитаемого микса сайдэффектов, хуков, вычислений и JSX'а.

>>900197
>>900191
>>900194
Ну что вы как шизики, нормально же общались.

>>900189

>Ты ж почти сеньор какие нахуй советы?


И что если сеньор, я ж не один на проекте и не тимлид. Я спокойно мог бы и сам принять решение, но есть коллеги.
x86-assembly-c-language-java-haskell-categorical-virtual-ma[...].png124 Кб, 500x917
237 1900209
>>900197
Касательно этого как раз наоборот, мутабельную лапшу разгребать одно дело спустя года, а чистенький ФП, где каждая функция делает что-то одно и написан как просто преобразования данных, другое дело.
238 1900210
>>900209
*код написан как
239 1900218
>>900207
это пиздец какой-то а не удобочитаемый код
240 1900220
>>900185
что за хуйню ты несёшь
писать надо чтобы работало а не чтобы письку дрочить
241 1900222
>>900220
Он не читал Дейкстру.
Который говорил, что профессионал никогда не будет писать clever код, потому, что он не может себе этого позволить, будучи профессионалом.

А потом на хедхантере можно увидеть экзотические вакансии, типа энтерпрайзного проекта на JRuby - очень clever, и совершенно non-maintenable. Потому, что просветлённый съебался, а для всех остальных - это бредятина и тёмный лес.
242 1900224
>>900222
Сейчас бы думать о долбаебах
243 1900236
>>900222
Валидный аргумент, ну тут собственно и дело в том, что правильный ФП код легко поддерживать. Но как легко говнокодит просветленный, так легко говнокодят и ООП-макаки с их "архитектурами" и "паттернами", которые проще потом просто нахуй переписать, чем рефакторить или поддерживать.

>>900220
Если ты пишешь код, который идет в прод и про него забывают потом - да, так можно. Я работаю на проекте где поддерживаемость и читаемость кода в приоритете, т.к. долгосрочный продукт/фреймворк. Поэтому ФП идеально ложится в картину.

А то что макаки не способны писать ни хороший ООП, ни хороший ФП, это их проблемы и проблемы тех кто их нанимают.
244 1900261
>>900185

>Подводные камни от знающих?


Если коротко, то дикий оверхед по ресурсам на поддержание иммутабельности. Особенно если ты там каждый фрейм что-то пересчитываешь на своем канвасе. Почитай вот, например:
https://tonsky.livejournal.com/322036.html
https://tonsky.livejournal.com/322450.html

бывший дрочер на рамду
245 1900262
>>900236

> говнокодит просветленный


В том-то и дело, что речь не про говнокод, а совсем наоборот - слишком заумный (clever) код. Который пишут исключительно ради cleverness и чесания чсв, вот как >>900185 излагает, примерно.

И который, кроме просветлённого, никому не понятен. И самому просветлённому он, спустя время, будет непонятен точно так же. Только он, при желании, ещё сможет размотать клубок, а остальные - нет.

И ФП для написания такого кода - очень благодатная среда.
И лиспы ещё.
Ну, и руби, разумеется, если кто-то ещё помнит, что такое руби.
246 1900263
>>900261
Кстати, да, про ресурсы-то я и забыл.
ЖС - не кложура, никаких оптимизаций иммутабельных структур тут нету.
Capture1.PNG122 Кб, 223x227
247 1900309
>>900261
О, наконец-то адекватный ответ. Про оверхед я, конечно же в курсе, мы не вызываем трансдьюсеры на каждый тик канваса. Тонкие места написаны как можно более лоу-лвльно. Ну и мы не обрабатываем тысячи элементов нигде, поэтому все довольно шустро работает.

>бывший дрочер на рамду


Мне кажется пути обратно быть не может.
248 1900312
>>900262

>Ну, и руби, разумеется, если кто-то ещё помнит, что такое руби.


Веришь-нет, мой первый язык программирования был Руби и именно в нем я полюбил выразительность и чистоту кода, поэтому ФП естественное развитие событий.

И это нормально, рубисты рубистов поймут, как и ФП-господы ФП-господ. Никто же не лезет с ФП в Джаву пока что.
249 1900316
>>900185

>JS


>ФП



Очередной дегенерат написал [1,2,3,4].map(e => e * 2) и думает, что теперь познал ФП. Сочувствую.
250 1900320
>>900209
Никто не мешает тебе придерживаться ООП и делать всё иммутабельным.
251 1900335
>>900309

>Мне кажется пути обратно быть не может.


Может. И рамда, и отсутствие мутаций даже там где это не нужно и «мы вообще не пишем циклы» это самолюбование все. Как просветлишься, так попустит.
252 1900338
>>900316
Ты хотел сказать map(double)?

Понимаю что таких большинство, но я немножко дальше пошел в pointfree код, каррирование и представление программы как композиции функций.
253 1900344
>>900320
Зачем делать все иммутабельным, если можно просто писать код, который не мутирует данные. Вы что. Тут все долбоебы конченные?
254 1900346
>>900335
Ну не надо бросаться с одной крайности в другую, мне кажется ФП как минимум учит писать более организованный и безошибочный ООП код в том числе. Для среднего джсера главный урок который надо вынести это контролируемые сайд эффекты, а не то что нельзя использовать циклы и хуярить новые обьекты и массивы направо и налево.
255 1900348
>>900312
Хаскель то пиздец как выразительный. А Сoq вообще пушка, чего на нем не пишешь кстати?
256 1900352
>>900348
А он и есть выразительный, те же list comprehensions в одной строчке сколько всего делают. Выразительный не значит легкочитаемый для залетного формошлепа.

В случае с JS просто надо уметь соблюдать баланс между декларативностью и "заумностью" кода.
image.png8 Кб, 1135x60
257 1900361
>>900352

>Выразительный не значит легкочитаемый


Обожаю мань, выдумывающих собственные определения и толкования слов.
258 1900362
>>900346
Ну да, наверно. Но мне кажется, что простой принцип «не мутировать аргументы» хорошо лечит львиную долю таких проблем.
259 1900375
Функциональщик на месте? Распиши роадмап по ФП
fpinjava.png27 Кб, 360x451
260 1900378
>>900312
Не то, что верю, я это знаю.
Ибо запах этого говна хуй отмоешь, и хуй парфюмерией забьёшь, лол. Как в том анекдоте.

Вообще, это известный факт, что рубибляди, как крысы с корабля, набежали в node и в js вообще, когда руби хайп закончился.

>выразительность и чистоту кода


Это вам так кажется, что оно чисто и выразительно.
Однако, на этот счёт есть и другие мнения.
Особенно, насчёт "чистоты".

>Никто же не лезет с ФП в Джаву


Пикрелейтед.
Эту книжку я купил 4 года назад.

Пойми, никто не говорит, что ФП - это плохо.
Наоборот, это хорошо, и изучение ФП делает тебя гораздо более лучшим программистом.
Но, в продакшн-коде на мейнстримных языках это надо использовать строго по месту, дозированно и с умом. А не просто потому, что тебе сегодня так нравится. Через полгода твои предпочтения изменятся, а кода, не читаемого без стакана, в прод ты уже нахуярил.
261 1900380
>>900344

>Зачем делать все иммутабельным, если можно просто делать всё иммутабельным



Таблетки выпил?
monads-5-638.jpg41 Кб, 638x479
262 1900382
>>900361
Легко читаются, если ты знаешь что абстракции обозначают.

pipe(
map(ages)
filter(eligibleToVote)
either(wasBornInCountry, wasNaturalized),
reduce(averageAgeReducer)
)(citizens)

Выразительно и легко читается? Да. Понятен ли полностью этот код, если программист не знает что такое map, filter, reduce и pipe и как работают функции в целом? Нет. По мне так даже не зная что функции делают, все равно очевидно по именам. Код читается как английский текст.

Изучив основы ФП выразительный код становится и легкочитаемым, потому что весь ФП основываеся на базовых функциях и абстракциях, котоыре ты соединяешь как тебе угодно для обработки данных.

В ООП безусловно тоже можно добиться похожего, если писать идеальный SOLID код и пользоваться паттернами. Только на практике мы видем километровые методы и лапшу из переменных, объектов, циклов, if else и т.д.
263 1900385
>>900382
Дебил, то что ты написал делается также и в ООП коде. У тебя просто определения ООП и ФП уровня "ну ООП это там где объекты, а ФП это там где функции...". В этом и прелесть ООП - ты можешь объединять его с конструкциями, которые похожи на конструкции из ФП и получать идеальное сочетание. В то время как языки из ФП навязывают тебе городить лапшу лишь бы не оборачивать всё в объекты.
264 1900387
>>900382
Это же самое пишется за 1 (один) цикл, выполняется быстрее, не дает вообще никакого оверхеда по памяти и удобнее типизируется.

Алсо, ты сначала делаешь map(ages), а потом из возраста каким-то образом вычисляешь either(wasBornInCountry, wasNaturalized).
265 1900388
>>900382
Обожаю такие объяснения, как на пике.
Хуита ни о чём.
И сразу понятно, что объясняющий - самовлюблённый пидар, а не профессионал.

>если ты знаешь что абстракции обозначают


Чувак, твой пример - это не фп, а детский сад.
Это просто value oriented programming и конвейер.
А критикуют в данной дискуссии совсем другие вещи.
266 1900389
>>900380
Серьезно не понимаешь разницы между "делать иммутабельным" и "не мутировать"?
267 1900394
>>900388

>value oriented programming


Подавился.
Ты чего, они такого не слышали никогда.
268 1900395
>>900378

>Вообще, это известный факт, что рубибляди, как крысы с корабля, набежали в node и в js вообще, когда руби хайп закончился.


Жиза, но я все еще считаю Руби лучшим языком для бекенда для стартапов. Рельсы слишком хороши и приятны, чтобы от них отказываться, и я полностью солидарен с DDD в плане что современные SPA и упор на клиентскую сторону это шиза.

>изучение ФП делает тебя гораздо более лучшим программистом


>Но, в продакшн-коде на мейнстримных языках это надо использовать строго по месту, дозированно и с умом. А не просто потому, что тебе сегодня так нравится. Через полгода твои предпочтения изменятся, а кода, не читаемого без стакана, в прод ты уже нахуярил.


Я абсолютно согласен с этим. Я и говорю, не стоит бросаться в крайности. Я замечаю за собой, что погружаюсь в просветление лол, но я так же не забываю, например, что мы работает с канвасом и что производительность > красивых композиций функций в тонких местах. И что другие программисты вынуждены будут 50 грамм наливать пытаясь прочитать мои элегантные пайпы в редьюсерах редакса.

>>900385
>>900387
Блять, вы шизики? Я просто пример привел рандомный.

>Это же самое пишется за 1 (один) цикл, выполняется быстрее, не дает вообще никакого оверхеда по памяти и удобнее типизируется.


И превращается в большой метод, который изменяет переменные и вместо того чтобы декларативно увидеть и понять код, я вынужден тратить полчаса чтобы разобраться что ты там натипизировал и нациклил. Знаю я эти циклы, дяди, не первый год работаю.

Возможно когда-нибудь я попаду в какой-нибудь ФП проект где нихуя не понятно, но пока что основы ФП выглядят намного приятнее чем обычный подход и УЖЕ улучшают кодовую базу на работе, мне этого более чем достаточно пока что.

>В этом и прелесть ООП - ты можешь объединять его с конструкциями, которые похожи на конструкции из ФП и получать идеальное сочетание.


Какой толк из этого сочетания, если ты все еще используешь обьекты, this'ы, инстансы и остальной мусор, который плодит ошибки? ФП языки именно поэтому и обязывают "городить лапшу", чтобы получить строгий инпут - аутпут.

>>900388

>Чувак, твой пример - это не фп, а детский сад.


Так я сам только начал изучать месяц назад. Я тебе что, монады на монаде должен показать сейчас? Я сам хоть и понимаю, что они выразительные, не пойму сейчас такой код.
А эти "примитивные" вещи УЖЕ КАК МИНИМУМ делают дефолтную лапшу на JS намного приятнее и поддерживаемей.
268 1900395
>>900378

>Вообще, это известный факт, что рубибляди, как крысы с корабля, набежали в node и в js вообще, когда руби хайп закончился.


Жиза, но я все еще считаю Руби лучшим языком для бекенда для стартапов. Рельсы слишком хороши и приятны, чтобы от них отказываться, и я полностью солидарен с DDD в плане что современные SPA и упор на клиентскую сторону это шиза.

>изучение ФП делает тебя гораздо более лучшим программистом


>Но, в продакшн-коде на мейнстримных языках это надо использовать строго по месту, дозированно и с умом. А не просто потому, что тебе сегодня так нравится. Через полгода твои предпочтения изменятся, а кода, не читаемого без стакана, в прод ты уже нахуярил.


Я абсолютно согласен с этим. Я и говорю, не стоит бросаться в крайности. Я замечаю за собой, что погружаюсь в просветление лол, но я так же не забываю, например, что мы работает с канвасом и что производительность > красивых композиций функций в тонких местах. И что другие программисты вынуждены будут 50 грамм наливать пытаясь прочитать мои элегантные пайпы в редьюсерах редакса.

>>900385
>>900387
Блять, вы шизики? Я просто пример привел рандомный.

>Это же самое пишется за 1 (один) цикл, выполняется быстрее, не дает вообще никакого оверхеда по памяти и удобнее типизируется.


И превращается в большой метод, который изменяет переменные и вместо того чтобы декларативно увидеть и понять код, я вынужден тратить полчаса чтобы разобраться что ты там натипизировал и нациклил. Знаю я эти циклы, дяди, не первый год работаю.

Возможно когда-нибудь я попаду в какой-нибудь ФП проект где нихуя не понятно, но пока что основы ФП выглядят намного приятнее чем обычный подход и УЖЕ улучшают кодовую базу на работе, мне этого более чем достаточно пока что.

>В этом и прелесть ООП - ты можешь объединять его с конструкциями, которые похожи на конструкции из ФП и получать идеальное сочетание.


Какой толк из этого сочетания, если ты все еще используешь обьекты, this'ы, инстансы и остальной мусор, который плодит ошибки? ФП языки именно поэтому и обязывают "городить лапшу", чтобы получить строгий инпут - аутпут.

>>900388

>Чувак, твой пример - это не фп, а детский сад.


Так я сам только начал изучать месяц назад. Я тебе что, монады на монаде должен показать сейчас? Я сам хоть и понимаю, что они выразительные, не пойму сейчас такой код.
А эти "примитивные" вещи УЖЕ КАК МИНИМУМ делают дефолтную лапшу на JS намного приятнее и поддерживаемей.
269 1900417
>>900395

>современные SPA и упор на клиентскую сторону это шиза


Да, говно.
Но, это не идеология, а способ увеличить throughput серверов для задач, ориентированных на широкие массы быдла - сотни тысяч и миллионы. Сервер выплюнул и забыл, а вся хуйня происходит на клиенте, где даже на сраной мобиле по цене доширака, уже 6-ти ядерный камень.

>Я тебе что, монады на монаде должен показать сейчас?


Монада - очень простой и полезный паттерн.
Если приглядеться - они повсюду. И ты их наверняка используешь.
Если есть проблемы с пониманием - посмотри вот это:
https://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

>"примитивные" вещи


Я не имел в виду, что это плохо, примитивно или дёшево.
Наоборот - именно такие вещи (простые и понятные) и есть рациональное использование ФП в реальном промышленном коде.
270 1900445
>>900417

>Если приглядеться - они повсюду. И ты их наверняка используешь.


>Если есть проблемы с пониманием - посмотри вот это:


Спасибо. Не то что бы есть проблемы с пониманием, просто был сосредоточен на более базовых вещах и практиковался + на работе пробую использовать где уместно. Теперь когда я легко читаю, пишу и понимаю partial applied функции (мне самое сложное было начать легко воспринимать это на лету) и осилил functional light JS книжку которая кстати мастхев как по мне любому JS разработчику, т.к. опять же она не просто показывает основы ФП, она в целом учит писать более качественный код и очень прагматична, буду переходить к более сложным концепциям.

Я как раз эту статью читал уже давненько, теперь интересней будет почитать с большим опытом.

>Наоборот - именно такие вещи (простые и понятные) и есть рациональное использование ФП в реальном промышленном коде.


А я о чем. Когда-нибудь я надеюсь я стану ФП-гуру чисто для себя, но я прекрасно понимаю что это далеко не серебрянная пуля в практическом применении. И я прекрасно понимаю почему большинство саркастически говорят о просветлении и почему многие плюются от ФП.
271 1900450
>>900395

>И превращается в большой метод, который изменяет переменные и вместо того чтобы декларативно увидеть и понять код, я вынужден тратить полчаса чтобы разобраться что ты там натипизировал и нациклил. Знаю я эти циклы, дяди, не первый год работаю.



let averageAge = 0;

citizens.forEach(citizen => {
if (eligibleToVote(citizen) && (wasBornInCountry(citizen) || wasNaturalized(citizen))
averageAge += citizen.age / citizens.length;
})

Ух ебать огромный сложный код, пиздос какие страншные мутации, меньше чем за полчаса точно не разобраться. Надо рамду тянуть, иначе никак!
272 1900452
>>900445

>functional light JS


Посмотри книгу JavaScript Allonge.
Это очень годная книга по ФП на ЖС.

Она есть в двух версиях - для ES5 и ES6.
Для ES6 - бесплатная:
(там надо поставить цену 0)
https://leanpub.com/javascriptallongesix
273 1900461
>>900450
И нахуя тебе здесь forEach, если достаточно for..of, мань?
274 1900463
>>900450

>let


дальше можно не читать

мимо FP-боярин
275 1900466
>>900450
У тебя уже как минимум 1 левая переменная, пиздецкое условие в if и оверхед вычисления age. Есть ли выигрыш здесь от ФП? Практически нет. Но когда реальный код сложнее раза в два хотя бы и подобного кода 30 файлов с "классами" и "методами", которые делают this.averageAge и подобное, тогда дело и выходит из под контроля. К тому же, это ты написал так этот код. А другой разработчик напишет через for ... of, а третий вообще eligibleToVote напишет как citizen.age >= 18. И когда вот подобных различий становится десятки, а кода на тысячи строк, тогда наступает и пиздец.
276 1900472
>>900466

>А другой разработчик напишет через for ... of, а третий вообще eligibleToVote напишет как citizen.age >= 18


И что будет? Ты перестанешь понимать, что делает код или сломается мозг от перегрузки? Шизоиднее претензии не придумаешь.
277 1900478
>>900472
Да, сломается от перегрузки. Мне нужно для каждого подобного случая смотреть что где меняется, потому что БАЗОВЫЕ абстракции каждый раз заново пишутся императивно. Опять же, если у тебя 3 функции подобных, вообще похуй как ты их напишешь. Но проблемы неизбежно возникают в средне-больших проектах при подобном подходе. И если тебе ни разу не приходилось разгребать подобные &&, || и let iWillBeMutated10times = 0, то могу лишь порадоваться за тебя.
278 1900479
>>900452
Спасибо, попробую навернуть Хотя с первого взгляда будет повторение уже того что знаю, но написано солидно вроде
279 1900481
>>900478
Что ты несешь, шизоид? Какие блять базовые абстракции? Ты не знаешь, как работает for of, но при этом знаешь, как работает forEach, а другой разработчик наоборот?
280 1900487
>>900461
У for...of так себе перформанс во всех браузерах кроме Хрома. Но я согласен, что он идиоматичнее.

>>900466

>1 левая переменная


Нет таких

>пиздецкое условие в if


Чего? По-твоему два фильтра по всему массиву с использованием левых либ, а не встроенного в JS синтаксиса это лучше что ли?

>оверхед вычисления age


От деления-то? Интересно посмотреть на содержание твоего reduce без оверхеда.

>А другой разработчик напишет через for ... of, а третий вообще eligibleToVote напишет как citizen.age >= 18. И когда вот подобных различий становится десятки, а кода на тысячи строк, тогда наступает и пиздец.


Охуеть аргумент. А на ФП только один способом написать можно по-твоему? Я тебе ровно то же самое и про твой код сказать могу — вот будут у вас сложные ветки из десятков функций в пайпе и тогда-то пиздец и наступит бу-бу-бу. Алсо, у вас там код-ревью не изобрели еще?
281 1900489
>>900478

> разгребать подобные &&, ||


Чот орнул.
282 1900517
>>900478
А с чего ты вообще взял, что код с map, filter, reduce - это декларативный код?
С каккх пор действия это декларативность?

Чтобы он у тебя был декларативным писать надо mapped, filtered, reduced
283 1900524
>>900517
Декларативность не от названия исходит, а от того как ты действие выполняешь. for циклом ты указываешь пошагово как нужно выполнить цикл, написав map ты указываешь (декларируешь) что ты получаешь.
284 1900527
>>900524
Это твои выдумки и переворачивание терминов.
Когда ты пишешь map(age) ты говоришь отразить каждый элемент коллекции во что-то.
Ровно так же, как когда ты пишешь for..of ты говришь что сделать с каждым элементом коллекции.

Противопоставляя декларативность императивности все нормальные люди говорят об описании либо готового результата (что-то вот что-то отражено), либо об описании процесса (что-то во что-то отразить).
285 1900528
>>900524
Каким образом map достанет твою мамку из борделя декларативно? Придется так же писать алгоритм оплаты сутенерам. Посещения комнаты с кроватью. Ты не ебнулся случаем?
286 1900537
>>900524

>or циклом ты указываешь пошагово


А ты ты не пошагово указываешь?
pipe(
map(ages)
filter(eligibleToVote)
either(wasBornInCountry, wasNaturalized),
reduce(averageAgeReducer)
)(citizens)

>map ты указываешь (декларируешь) что ты получаешь


Нет, ты не описал, что ты получаешь. Ты описал, что сделать.
287 1900562
>>900527

>отразить


Отобразить же, лол.
От слова "образ".
288 1900576
>>900537
Нет, он прав.
Императив - описание того, как получить результат.
Декларатив - описание того, что нужно получить.
Реализация же ("как") упрятана в стандартные библиотечные функции.

Но, важнее другое.
В ФП-подходе идёт трансформация _значений_. А в императивном - последовательность _команд_. Ты не можешь прервать последовательность команд и потом продолжить её в другом месте.
Но, можешь в любом месте разорвать цепочку ФП-преобразований, и продолжить потом, в другом месте, просто взяв промежуточное значение и передав его куда-то.
289 1900577
>>900537
>>900528
>>900527
Вы только посмотрите на этих мамкиных специалистов по декларативности, советую быстро звонить в международный консорциум по функциональщине, ведь мы только что доказали что map(fn) это не декларативный код.

>>900537
В pipe ты не указываешь что делать, а декларируешь чем это является. Буквально говоришь, что cредний возраст это композиция из отфильтрованных родившися в стране, которым разрешено голосовать и у которых возраст достаточный.

В императивном коде же, ты описываешь КАК ты проходишься по циклу, ПРИСВАЕВАЕШЬ счетчик i, СУММИРУЕШЬ в переменную averageAge и так дальше.

В декларативном коде детали реализации скрыты за абстракцией, в императивном нет.

Банальный пример:

// Императивно проходимся в цикле и пушим в массив
const ages = [];
for (let i = 0; i < citizens.length; i += 1) {
ages.push(citizens.age);
}

// Декларативно заявляем что возраста это мап свойства 'age' граждан
const ages = map(prop('age'));
const citizensAges = ages(citizens);
290 1900581
>>900576
Именно так!

>Реализация же ("как") упрятана в стандартные библиотечные функции.


И самое главное, эта реализация каждой функции отточена и работает предсказуемо.
Когда я вижу map(prop('age') я знаю что я получу в итоге.
Когда я вижу for... я вынужден лезть во внутрь, потому что каждый разработчик засунет внутрь абсолютно что угодно. Пуш в массивы, присваивания в переменные, возможный выход из цикла и т.д.
291 1900582
>>900576

>Ты не можешь прервать последовательность команд и потом продолжить её в другом месте.


yield
292 1900584
>>900576
Добавлю:
Например, попробуй рассмотреть асинхронные операции - колбек (императив) vs промис (фп, монада).
Ты можешь делать с промисом всё то, что ты можешь делать, например, со строкой или числом. Например, подвергнуть его цепочке преобразований. Но, ты не можешь так же поступать в коде, сделанном на колбеках.
293 1900586
>>900582
За yield стоит хуева туча магии.
Это очень сильно другое.
294 1900592
>>900577
SELECT AVG(age) FROM citizens
295 1900593
>>900577
let citizensAges = []
for(let {age} of citizens) citizensAges.push(age)

>>900581

>Когда я вижу map(prop('age') я знаю что я получу в итоге.


Фантазер.
296 1900597
>>900586
Что другое? ты написал, что я не могу в императивном коде преврать выполнение и продолжить его в другом месте, взяв промежутное знаенчие.

Могу.
анон 297 1900601
Какая средня зп у фронтенд миддла в Москве?
298 1900605
>>897984 (OP)
для ДОМа это использовать -> jsdom?
299 1900610
>>900601
Зачаем фронтенд мидлу Москва если дядя Боб платит больше?
300 1900611
>>900601
50-60к
301 1900613
>>900605
Если для дома - это пет проект называется.
302 1900617
>>900450
Поправил тебя

const isVoter = (citizen) =>
__eligibleToVote(citizen) &&
__(wasBornInCountry(citizen) || wasNaturalized(citizen));

const voters = citizens.filter(isVoter);

const votersAgeSum = voters.reduce(
__(averageAge, voter) => averageAge + voter.age,
__0
);

const arerageVoterAge = votersAgeSum / citizens.length;
303 1900619
>>900611
Это для фулстак с пхп, т. е для тех кто не занет ни фронта ни бека нормально. Чисто фронты больше получают.
304 1900624
>>900601
~150к

А вообще нашел где спросить, иди на hh и смотри вакансии
305 1900625
>>900489

>Чот орнул.


Это ты тут орнул, а в проекте, когда голова забита решением текущей задачи, а не разгадкой старого кода, можешь соснуть. А если не ты, то колега
Вот мое, если что >>900617
306 1900627

>Когда я вижу map(prop('age') я знаю что я получу в итоге.


unknown[]?
307 1900628
>>900597
Для этого тебе придётся написать дополнительный код, сохранить кучу вещей куда-то, и т.п. Это будет уже _другой_ код. Причём - каждый раз разный, в зависимости от. В value oriented - всё и так уже значения, никакого дополнительного состояния нет - всё в аргументах функций. Просто подключаешь-отключаешь-переключаешь.

Вообще, вместо того, чтобы лезть в залупу и выставлять себя дураком, лучше попробуй понять, о чём идёт речь. Это, естественно, потребует времени и усилий. Но, старание будет вознаграждено, будь уверен.
308 1900629
>>900625
Я понимаю, что && и || это очень сложные операторы, но как-то справляюсь пока.
309 1900630
>>900605
как в нем двигаться по дереву, методы не гуглятся нихуя
310 1900631
>>900617
Добавил в мой код лишних переменных, лишних проходов по массиву, немного оверхеда по памяти и ошибку в вычислении среднего? Ну спасибо, конечно.
311 1900632
>>900617

>__


Вообще, это всё и без рамды можно сделать.
И даже лучше без неё, если только не для побаловаться.
312 1900633
>>900610
Да с товарищем в спор вступили на эту тему.

>>900611
Лол, в Барнауле столько или даже больше будут платить.

>>900624
Мне кажется, на хх не пишут реальные цифры.
313 1900635
>>900630

>как в нем двигаться по дереву


Ногами дерево покрепче обхватывай.
И руками.
Подтягиваешься на руках, ногами перебираешь, так и лезешь.
314 1900636
>>900629

>пока


до встречи скорой
315 1900637
>>900631

>лишних переменных


не поместится на тетрадком листочке и препод наругает?

>лишних проходов по массиву


уже сделал бенчмарк чтоб замерить разницу условия и .length VS моего фильтра?

>ошибку в вычислении среднего


чё?)

>>900632
засмеялся. Это longdash, новая ФП либа
1599077170819.jpg1,3 Мб, 1254x1771
316 1900638
>>900635
дай ссылочку на список методов плз))querySelector нихуя не работает)
317 1900639
>>900637

> longdash


А, то-то я думаю, что оно всё как-то странно выглядит.
Но, я не спец по рамде, так что, подумал, что и хуй с ним, что непонятно.
318 1900640
>>900593

>let citizensAges = []


>for(let {age} of citizens) citizensAges.push(age)


И? Типичная императивная шляпа с обьявлением 2х переменных и мутацией массива. И это лишь примитивный пример. Суть не в количестве строчек кода, а в том как ты выражаешь код.

>>900617
Вот это уже намного лучше. Не 100% ФП, но по крайней мере код читаемый.

>>900631

>Добавил в мой код лишних переменных, лишних проходов по массиву, немного оверхеда по памяти


Экономия на спичках и наносекундах. Читаемость кода и легкость правки в 10 раз важнее.

> и ошибку в вычислении среднего?


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

>>900627
Функцию, которая "ждет" массив из объектов со свойством age.

const ages = map(prop('age')); // objects => map(prop('age'), objects)

const citizens = [
{ name: "Victor", age: 21 },
{ name: "Daniel", age: 33 },
{ name: "Ellie", age: 19 }
];

ages(citizens); // [21, 33, 19]
318 1900640
>>900593

>let citizensAges = []


>for(let {age} of citizens) citizensAges.push(age)


И? Типичная императивная шляпа с обьявлением 2х переменных и мутацией массива. И это лишь примитивный пример. Суть не в количестве строчек кода, а в том как ты выражаешь код.

>>900617
Вот это уже намного лучше. Не 100% ФП, но по крайней мере код читаемый.

>>900631

>Добавил в мой код лишних переменных, лишних проходов по массиву, немного оверхеда по памяти


Экономия на спичках и наносекундах. Читаемость кода и легкость правки в 10 раз важнее.

> и ошибку в вычислении среднего?


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

>>900627
Функцию, которая "ждет" массив из объектов со свойством age.

const ages = map(prop('age')); // objects => map(prop('age'), objects)

const citizens = [
{ name: "Victor", age: 21 },
{ name: "Daniel", age: 33 },
{ name: "Ellie", age: 19 }
];

ages(citizens); // [21, 33, 19]
319 1900642
>>900638
Каких методов? Что ты делать хочешь?
querySelector != "двигаться по дереву"
И почему не работает?
320 1900643
>>900640

>Не 100% ФП


я считаю, что 100% фп то перебор, как и рамда. Functional light js читал, если что
321 1900647
>>900642
у меня есть jsdom я хочу его парсить

const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
console.log(dom.window.document.querySelectorAll('p'))

>NodeList {}

322 1900648
>>900643
Та я сыглы, дело вкуса, зависит от проекта и разрабов. Но то как ты написал это УЖЕ на 3 головы выше лапши которую я частенько вижу и это даже не обязательно должно рассматриваться как ФП, это просто написание более чистого и читаемого кода. Как я и говорил, я бы советовал всем JS разрабам почитать functional light JS.
323 1900654
>>900576

>Ты не можешь прервать последовательность команд и потом продолжить её в другом месте.


В обычном цикле вполне можно контроллировать течение цикла, в отличие от всяких методов массивов, где приходится костылить километровый колбэк для какого-нибудь `forEach()`, если количество элементов в массиве меняется во время исполнения.
>>900581

>И самое главное, эта реализация каждой функции отточена и работает предсказуемо.


Пока ты только в примерах хэлловорлды приводишь, ФП быстро скатывается в неперевариваемую кашу, особенно когда мамкин ФПшник пихает анонимки заместо колбэка. Там так же будешь смотреть, не хуйнул ли Вася сайдэффект и откуда вообще переменные берёт, только это дело будет скрыто в простыне редюсера, у которого километровый колбэк идёт перед аккумулятором.
>>900628

>Для этого тебе придётся написать дополнительный код, сохранить кучу вещей куда-то, и т.п.


Ну а в ФП коде конечно же вообще ничего не нужно писать и всё само сохраняется.
324 1900655
>>900637
>>900640
Пиздец, вы не видите ошибку даже когда я на нее явно указал? А где же прозрачность и читаемость фунционального стиля? Там идет деление на число всех граждан, а должно быть только на голосующих.

Алсо, это код (в отличие от моего, опять же) крашнется при передаче пустого массива из-за деления на ноль.
325 1900657
326 1900662
>>900640

>Функцию, которая "ждет" массив из объектов со свойством age.


Кажется, ты не уловил сарказма
327 1900663
>>900655

>А где же прозрачность и читаемость фунционального стиля?


на месте

>Там идет деление на число всех граждан, а должно быть только на голосующих


опечатался офк. Ты тоже скобку пропустил
>>900655

>Алсо, это код (в отличие от моего, опять же) крашнется при передаче пустого массива из-за деления на ноль.


+|| 0
328 1900666
>>900655

>Алсо, это код (в отличие от моего, опять же) крашнется при передаче пустого массива из-за деления на ноль.


Монады вошли в чат.
329 1900668
>>900654

>Ну а в ФП коде конечно же вообще ничего не нужно писать и всё само сохраняется.



Ты даже не пытаешься понять, о чём тебе говорят.
В теме не ориентируешься совершенно.
Но, пишешь простыни поучающим тоном, и рассказываешь, как оно на самом деле.
Даннинг-Крюгер в чистом виде.

>>900647
А, извини, я не понял, что речь именно про JSDOM.
Не знаю, не работал с ним.
Погуглил - да, там какая-то залупа с querySelector, углубляться не стал.
330 1900699
>>900647
console.log(dom.window.document.querySelectorAll("p").length);
Нод лист не пустой, он тебе просто результат в консоль не покажет, добавь ещё один p и логни длину
1606667142270.jpg82 Кб, 1280x720
331 1900729
>>900668
с каким домом работал?
какой editor с автокомплитом используешь? (sublime text с плагином не очень, vs code лагает)
посоветуй годный гайд
332 1900730
MutationObserver в ванильном жс это то на чем основана либа rxjs?
333 1900745
>>900730
Нет, либа rxjs основана на паттерне Observer
334 1900750
>>900668
как заставить console.log(node) всё его содержимое в красивом формате html?
335 1900752
>>900729
С браузерным.

>editor с автокомплитом


IDEA
WebStorm по-вашему

>посоветуй годный гайд


Гайд по чему именно?
336 1900770
>>900730

>это то на чем основана либа rxjs


>BLACK LIVES MATTER

337 1900778
>>900770
А под кроватью ты уже сегодня проверял? А то вдруг и там негры с СЖВ спрятались.
image.png125 Кб, 1140x751
338 1900783
339 1900786
>>900783
А из под кровати-то где скрин? Сколько негров уже поймал сегодня?
340 1900788
>>900750
Никак.

Кстати, речь про браузер или опять про jsdom?
И какова вообще конечная цель?
341 1900790
>>900786
Ты там метнись в спальню. Там наверняка твою мамашу жарит нигер Ашот из команды rxjs.
342 1900791
>>900730

>MutationObserver в ванильном жс


Чего блять
343 1900792
>>900783

>incognito

344 1900794
345 1900825
>>900752
Б-браузерным, а что за библиотека?
Гайд по jquery и puppeteer
346 1900827
>>900788

>Никак


пидора ответ
347 1900849
Правда ли, что присваивать что-то именам параметров ф-ции - плохой паттерн?
Например, так:
function( x, y ) {
x = 4
...
}
По-моему, этот "плохой паттерн" высосан из пальца.
А если бы я сделал деструктуризацию с переименованием типа такого?
function({ $: value, delta }) {
value = value + delta;
}
348 1900853
>>900825

>Гайд ...


В гугле есть же.

>а что за библиотека?


Я тебя не понимаю вообще.
Какая библиотека?
Что ты хочешь получить, в конечном итоге?
И не экономь буквы, их на всех хватит.
349 1900863
>>900853
Подожду, пока ответит кто-то более шарящий.
350 1900867
>>900849
Значение по умолчанию просто поставь.
351 1900874
>>900867
Но мне не нужно значение по умолчанию, я просто не хочу в простой функции объявлять лишние переменные. Особенно с учетом того, что теперь всем приспичило объявлять их через const. А я раньше смеялся над длинным local в луа.
352 1900880
>>900874
Тогда зачем тебе х в аргументах, если ты внутри все равно его переопределяешь? Суть аргумента в том, чтобы получить его из вне.
353 1900884
>>900849
Ну т. е. я передаю в функцию 5, а она у меня заменяется на 4, потом что-то работает не так как ожидалось, я дебажу с осознанием того, что передаю 5, но нахожу баг только когда дохожу до исходного кода функции в которой долбоеб зачем то меняет передаваемый аргумент на 4, а не 5.
Поэтому это и плохой паттерн. Если ты заменяешь аргумент функции, значит нужно как минимум уведомить об этом того кто этот аргумент передаёт.
354 1900889
>>900884

> Ну т. е. я передаю в функцию 5, а она у меня заменяется на 4


толсто
355 1900893
>>900880
Да там условный код. Если я переопределяю х, это не значит, что до того я им не пользуюсь.
356 1900901
>>900889

>function( x, y ) {


>x = 4


>толсто



Ясно.
357 1900917
>>900901
Толсто — это приходить в JS тред, изображая незнание самых азов программирования.

P.S. По поводу моего изначального вопроса, единственный реальный аргумент против переопределения параметров — это мутация объекта arguments. Но кто вообще юзает эту глючную депрекейтед херню в 2021?
358 1900932
>>900917
Дурик, у тебя мутация аргумента происходит, этого уже достатчно для того чтобы твой говнокод стал еще хуже, хотя бы потому, что для того чтобы изменить любую функцию написанную тобой, нужно сначала проверить не захуячил ли ты там где-нибудь в середине какой-нибудь цикл который у тебя вертит на хую аргумент функции.
359 1900940
>>900932
Фп-шиз, в мутациях нет ничего плохого. Плохо - это постоянно создавать новые переменные и засирать все вокруг.
360 1900950
>>900940
Во-первых, если переменная лишняя, то её не будет в итоговом коде благодаря оптимизациям компилятора. Во-вторых, зачем ты игнорируешь то что тебе говорят, в частности пример ситуации когда тебе нужно внести изменения в существующий код?
Тебя если не интересует ответ на твой вопрос, то ты сразу так и пиши - моя идея охуенная и мне похуй на опыт моих предшественников.
361 1900955
Почему все так дрочать на spa? Хотя до сих пор юзают ssr
362 1900959
>>900884

>Если ты заменяешь аргумент функции, значит нужно как минимум уведомить об этом того кто этот аргумент передаёт.


Что ты несешь, шизоид? Если ты не мутируешь переданный объект/массив, то на переопределение переменных внутри функции похуй абсолютно, вызывающему от этого ни тепло ни холодно, ему важно только чтобы функция сделала что должна.
WJKh5rx.png170 Кб, 374x347
363 1900962
>>900853
г-гугл??
буквы????
364 1900968
>>900955
Каждая технология для своих задач. Если у тебя вебгл-игра, ясен пень выбираешь SPA, если у тебя магазин запчастей, цель которого повыше влезть в выдачу гугла, тебе нужен SSR.
365 1900987
>>900959

>важно только чтобы функция сделала что должна.



Функция должна складывать 2 числа. Я передаю в неё два массива. Функция возвращает мне результат сложения двух единиц. Почему? Потому что важно чтобы функция сделала что должна.

В общем, поссал тебе на голову, выскочка тупорылая.
366 1900988
>>900968

>цель которого повыше влезть в выдачу гугла, тебе нужен SSR.



Как там в 2008? Закупились биткоинами?
367 1900995
>>900987
Таблетки выпил? А то уже начал придумывать какие-то функции, которые в твоей голове что-то возвращают, скоро и голоса слышать начнешь.
368 1900996
Как найти вакансию, чтобы писать на ваниле онли?
369 1900997
>>900996
javascript vakansiya naiti
370 1900999
>>900996
ищешь вакуху где нужен жиквери и типа коварно пишешь на ванилле вместо жиквери
371 1901002
>>900995
Штаны уже постирал или решил начать с оправданий?
372 1901025
>>897984 (OP)
как сделать чтобы нода видела глобальные модули?
373 1901035
>>900996
мне интереснее, как найти вакансию, чтобы вообще прогать что-нибудь на JS.
во фронте никому не нужны программисты, всем нужны версталы, пишущие цсс со скоростью пять медиакверей в секунду
374 1901040
какой потолок возможностей канваса?
376 1901046
>>901035
вакансии на фреймворки это преимущественно кодинг а не верстка
377 1901048
>>900849
Напиши весь проект в таком паттерне и расскажешь, как охуенно это дело дебажить.
378 1901049
>>901043
окей,а что надо чтобы крестики-нолики были через инет?
379 1901051
>>901049
многопользовательские?
380 1901052
>>901051
на 2 человека же
381 1901055
>>901052
сокеты
382 1901056
>>900988
От гугла насчёт SPA есть только честное слово. Другие поисковоки так и вообще в них не могут.
383 1901058
>>901055
а точнее
384 1901059
>>901025
Импортируй их.
385 1901061
386 1901062
>>901058
вебсокеты
387 1901069
>>901049
Надо понимание кучи вещей, на самом деле.
Нужно бегло разбираться в JS, CSS и HTML, иметь общее представление о клиент-серверном взаимодействии, потом скурить десяток-другой мануалов по ноде. Через полгода, когда от объёма информации перестанет кружиться голова, можно сесть и сделать мультиплеерные крестики-нолики за пару часов.
388 1901082
>>901069
а игровое поле рисовать в граф редакторе?
389 1901084
>>897984 (OP)
как использовать jquery в скрипте? require(jquery) не работает
390 1901088
>>901084

>как использовать jquery


Не использовать
391 1901091
>>901088
я с твоей девушкой тоже не использую
392 1901102
>>897984 (OP)
есть html страница ИЗ ФАЙЛА, как использовать на неё jquery без всяких иньекций?
393 1901104
>>901102
Никак. HTML это просто текст, а jQuery работает с DOM, ему нужно браузерное окружение.
394 1901106
>>901104
как взять DOM из puppeteer
395 1901108
>>901102
Что значит "на неё"?
В ней?
Через тэг:

<script src="jquery.js"></script>

Файл jquery.js надо скачать с сайта jquery и поместить в тот же каталог, где страница.
397 1901110
>>901106
Ты опять выходишь на связь?
Что ты хочешь получить в итоге?
С какой целью ты всё это делаешь?
1smp5QQVnZU-ZcsZBjJDw.jpeg63 Кб, 709x765
398 1901112
>>901110
>>901109
>>901108
Вы так троллите, да?
399 1901114
>>901112
Ты хочешь странного
400 1901119
>>901112
Ну, кто-то здесь точно кого-то троллит.

>>901114
Он просто пиздюлей хочет, мне кажется.
401 1901121
>>901082
Игровое поле - 9 дивов, вложенных в десятый.
402 1901123
>>901084
Зачем тебе жиквери в нодовском окружении?
403 1901124
>>901123
Он хочет лазить по дереву - >>900630
Такой способ - >>900635 - его не устраивает.
querySelector в jsdom работает как-то через жопу.
Теперь он, похоже, решил попробовать jQuery.
Конечную цель всего этого - упорно скрывает.
79a90b65fc9478bf59c82ddc49575240.jpg30 Кб, 500x312
404 1901128
>>901123
>>901119
>>901114
Задача поставлена четко и ясно, взять динамическую страницу паппетиром, парсить jquery что непонятного.

сделал костылем с jsdom
const { JSDOM } = require( "jsdom" );
const { window } = new JSDOM( "" );
const $ = require( "jquery" )( window );
const puppeteer = require('puppeteer')

вариант н2
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});

Больше не гуглится
405 1901129
>>901124
querySelector работает нормально. Но jsdom не дал мне динам страницу
14432589708860.jpg25 Кб, 457x480
406 1901130
>>901128

>парсить jquery

407 1901134
>>901128
Если ты не троллишь, то, тебе надо научиться связно излагать свои мысли.
Потому, что если ты даже этого не можешь, то, как ты сможешь написать программу?
Что такое "динамическая страница"?
Где её нужно взять?
И т.д. И т.п.

Если же ты троллишь, то тебе просто надо сходить на хуй.
Это, обычно, помогает.
409 1901140
>>901137
Похоже, тебя больше устраивает опция 2 из поста >>901134
Я правильно понял?

Потому, что иначе непонятно, зачем ты ебёшь тут мозги.

Но, хуй с тобой, давай покормлю:
- Тебе надо настроить node как веб сервер, для отдачи статического конента. Или использовать другой веб сервер.
- Положить туда свой html.
- Добиться того, чтобы он открывался оттуда браузером.
- Использовать куклоёба кукловода вместо браузера. Как это сделать - почитать в гугле.
410 1901143
>>901128
Зачем тебе парсить жиквери? Паппетир может лазить по дому без всяких писечек.
411 1901147
>>901140
>>901143
Подожду, пока кто-то более шаристый ответит.
412 1901171
>>900791
Учи матчасть, ебанарот
413 1901179
Аноны, пишу небольшую апиху и столкнулся с проблемой. Есть бд, в ней условная таблица Парикмахеры связана с таблицей Записи. У каждого парикмахера определено рабочее время в виде промежутка, время на одного клиента, время на отдых.
У каждой записи есть собственно время записи - промежуток между начальным временем и конечным, то есть начальное время(то на которое клиент назначил запись) + время на одного клиента + время на отдых.

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

Появилась потребность отфильтровать парикмахеров по фильтру "свободен сегодня". То есть взять каждого парикмахера, посмотреть его записи, и если есть время еще хотя бы для одной записи, то пометить этого парикмахера как "свободен сегодня".
Но как перебрать все записи?
То есть надо как-то по порядку взять промежутки для каждой записи в виде "конечное время предыдущей записи - начальное время следующей записи" и вернуть парикмахера, у которого хотя бы один промежуток может вместить время новой записи - промежуток между начальным временем и конечным.

Использую библиотеку Luxon, там промежутки очень легко сравнивать методом Inetrval().contains()
Но как это сделать с помощью цикла для каждой записи у всех парикмахеров?
414 1901199
>>901179
Тебе нужен TypeScript
415 1901200
>>901179
Отсортируй список, сделай как нибудь pairwise чтобы из [A,B,C] получилось [(A,B), (B,C)], потом мапишь в {endFirst, startSecond}, потом фильтруешь по duration >= X

Или напиши функцию, которая пилит один интервал другим, а потом appointments.reduce((freeIntervals, a) => freeIntervals.flatMap(x => split(x, a)), [worktimeInterval])
416 1901213
>>901179
Если ты собрался парикмахеров и их записи руками перебирать и тебе абсолютно похуй на перформанс, то это просто sort на массиве с записями и потом проход по этому массиву с ужасным мутабельным прерываемым циклом, который будет проверять промежуток между концом предыдущей записи и началом следующей на наличие свободного окна, строчек в 10 чистого, читабельного и быстрого жопоскрипта уложишься, в отличие от функционального шизика >>901200

Если же ты хочешь сделать нормально, через один запрос к своей реляционной БД, то без хеви рефакторинга не обойтись, надо менять таблицу записей на таблицу "рабочее время", которая будет включать в себя и записи, и свободное время(которое тебе так же придется добавлять каждом парикмахеру на каждый рабочий день, менять при добавлении записи и т.д).
417 1901223
>>901213

>менять при добавлении записи и т.д


Нормально ты придумал вычисляемые поля считать руками и хранить в бд. Хоть бы materialized view предложил
418 1901228
>>901223
Это не вычисляемые поля, это структура рабочего дня, которая может меняться как угодно в течение каждого отдельно взятого дня(отменили запись, добавили запись, время освободилось, рабочий день короче из-за выходных, и т.д), и каждое из этих изменений должно отображаться и учитываться при поиске. Как ты собрался это делать, кроме как руками и в БД?
419 1901232
Хочу сделать квест гейм онли с кнопками. Встал вопрос. Как сделать, чтобы при нажатии нескольких кнопок в игре игроком они добавлялись в массив? Например есть 4 кнопки и пользователь активировал две из четырех и надо чтобы эти две кнопки добавились в массив, которые выполняли бы дальнейшие функции
420 1901233
>>901228
Свободное время - это интервалы рабочего времени без записей, считается где угодно, как в бд, так и не в бд.
Рабочее время на каждый день хранить тоже пушка, рабочее время на конкретный день считается из расписания (рабочие дни, 2 через 2 и т.д.) плюс всякие ограничения типа производственного календаря, больничных, отпусков и отгулов.
Хранить надо то что накликал пользователь - записи, и то накликал хозяин - расписание.
Если хочется пооптимизировать - вьюшечки и кэшики, а не усложнять все остальные операции ради ускорения обной
421 1901244
>>901232
Вешаешь на эти кнопки клик эвенты и внутри колбэка можешь хоть свою мамашу в массив положить.
422 1901253
ну что потомки, разобрались как переменную объявить в жс?
423 1901254
>>901253
<script>
var name = "ti hui ego eris"
</script>
424 1901284
>>901199
тайпскрипт для тех, кому граблей коффискрипта показалось мало.

уже сейчас есть proposal для опциональных типов в стандарте. когда примут, будете обратно переписывать свою кодобазу с тайпскрипта на ваниллу.
425 1901285
>>901284
Зачем
426 1901286
>>901285
затем что представь, что у тебя был бы сейчас хотя бы мегабайт кода на коффискрипте.
а он сейчас есть у тех, кто в 2015-ом не избавился от него, пока ещё на hh водились коффискриптеры.
427 1901289
>>901286
Давай еще про wa задвинь че нибудь, по итогу пук среньк как писали на js/ts так и будут дальше
428 1901292
>>901121
а крестик и нолик?
429 1901329
>>901284
...
Ты же понимаешь что статическая типизация оберегает от описок и ошибок на стадии компиляции кода?
или не понимаешь?
430 1901330
>>897984 (OP)
Анонасы, как написать функцию

>new Xyeta().add(1, 2, 3).add(11).add(12).add(55555)



add может складывать все это в массив, не суть важно.
431 1901331
>>901330
...
То есть блять добавить массив значений для единого вызова метода add "никрута"? Или же если мы вынуждены будем между ними засунуть другие операция с инстансом Xyeta то цикл for это тоже "никрута"?
ФПшники, вы там совсем ебанулись?
432 1901335
>>901330
class Adder {
value = [];

add(...nums) {
this.value = [...this.value, ...nums];

return this;
}
}
433 1901336
>>901331
При чем тут ФП?
111.jpg26 Кб, 400x317
434 1901337
435 1901338
>>901335
>>901337
Спс, так же пытался, только без возвращения this и нихуя не работало.
А зачем this возвращать, может кто объяснить?
436 1901339
>>901338
Чтобы можно было вызвать add, очевидно.
437 1901340
>>901339
Это понятно. На что this будет указывать?
438 1901341
>>901340
На тот же инстанс класса Adder, очевидно
439 1901344
>>901341
Ок, спасибо.
440 1901345
>>901340
На объект перед точкой.
441 1901346
>>901340
На контекст, в котором вызван add(). В общем случае на объект Adder, у которого есть свой add(), по-этому на результате выполнения add() можно сделать add()
442 1901348
>>901335
но ведь так `...this.value` при каждом вызове метода будет создавать копию массива, а там четыре миллиона элементов
443 1901350
>>901348
Если новый референс не нужен, то можно и пушить, я не пурист в этом плане
444 1901367
>>901233

>рабочее время на конкретный день считается из расписания


Необязательно, расписание не всегда фиксированное и может меняться для каждого работника(ушел раньше, пришел позже), плюс изначально задача стоит как "найти всех работников, у которых в выбранный день есть свободный интервал рабочего времени в n часов". Как ты собрался это делать одним запросом(подразумеваем sql-базу), без перебора каждого работника вручную, если все, что у тебя в базе есть - это записи клиентов, я представить не могу.
445 1901374
>>901329
Не оберегает, это как прикладывать подорожник к перелому. Если у тебя нет правильного метода написания и валидации кода TDD, то хоть типизируй, хоть не типизируй, баги, рантайм ошибки и прочее-прочее будет без вариантов. А если правильный метод есть, то типизация отпадает за ненадобностью.
446 1901377
>>901374

>типизация отпадает за ненадобностью


В проектах уровня "змейка", "калькулятор" или "маня -CRUD"

Поработал бы хоть в одном крупном проекте, такой херни никогда б не спизданул
447 1901380
>>901377

>ad hominem пук


Возвращайся, когда научишься аргументировать свою позицию, а не просто пукать, сопляк.
448 1901383
>>901380
Недоросль, пиздуй-ка на кухню, твоя маман уже зовет борща навернуть
449 1901386
>>900825
Бамп
450 1901390
Бля ребятишки помогите с вебпаком. Есть две папки client server, сервер собирается tsconfig-ом и запускается нодемоном, client собирается через жопу вебпак в папку дист и нихуя не работает, те запросы не проксируются на сервер, хотя в режиме dev все работает через девсервер
451 1901391
>>901380
Но он прав, а пукаешь ты.
452 1901396
>>901377
Ох уж эти "крупные проекты", возможные только на типизированных языках. На руби и питоне-то отродясь ничего крупного не писали, а если писали, то сразу умирали в агонии потому что типов нет и поддерживать нельзя только джава, сисярп и их брат-имбецил тайпскрипт.
453 1901397
На странице есть несколько изображений, все они вида <img src="https://random/Download?entityId=54654" alt="" />, атрибуты width и height не указаны.
Вопрос, можно ли получить как-то высоту и ширину изображений?
454 1901398
>>901396
В пистоне-то как раз типы есть. Статической типизации там нет
455 1901401
>>901398
Прямо как в жсе, охуеть, да?
456 1901407
test
434.png3 Кб, 414x163
457 1901408
>>901330

> чейнинг


как там в 2012, конец света наступил?
теперь в моде функциональный стиль:
458 1901417
>>901408

>void 0


>function


>new


>2к21

459 1901431
>>901417
void, кстати, получил второе дыхание с введением стрелочных функций. Когда не хочется писать лишние скобки и хочется избежать возврата чего попало, поможет void.
460 1901445
>>901386
Где можно почитать про $ и $$ нотацию?
461 1901446
>>901408
Зачем ты создал объект, который сразу выбросил? Чтобы засрать память и добавить работы сборщику мусора*
462 1901447
игры в Вконтакте на чем пишут?
463 1901460
>>901447
На флэше, епта
464 1901471
>>901460
А всякие иксбэты джойказино и прочая ебала?
465 1901477
>>901471
На срякте наверняка.
466 1901484
>>901460
так он помер в прошлом году...
а дальше на чем писать будут?
16011320437830.png7 Кб, 810x84
467 1901504
468 1901510
>>901504
Проблевался.
16060938858540.png273 Кб, 720x583
469 1901517
111.png17 Кб, 760x300
470 1901538
как вам эмуляция php-массива?
471 1901560
>>901538
Говно собачье, еще и не работающее.
Положи в свой массив другой массив, или ссылку на массив или объект.
472 1901578
>>901560
всё работает не пизди
473 1901579
Docker compose -d
474 1901609
>>901292
X и O в дивах.
475 1901616
>>901517
На пике типичный тайпскриптер
476 1901619
до какого объёма либа считается лайтвеигхт? вон threejs полмегабайта, а тоже лайтвеигхт, судя по их вики
477 1901672
>>901619
Зависит от предназначения. Для 3d библиотеки полмегабайта это действительно лайгтвейт.
478 1901782
Хотел заюзать геттеры и сеттеры, но смутно помнил про них что-то плохое. Проверил — и верно: они очень медленные. В тысячи раз медленнее вызова функции и в десятки тысяч раз медленнее обычного доступа к полю. Выглядит как баг, если честно.
479 1901786
Кто-нибудь может у себя провести тест? Я хз, может у меня жыт их не обрабатывает или оперативка кончается. Откуда такой разрыв.
480 1901797
>>901782
Выглядит как шиза долбоеба который ожидает от JS производительности.
image.png28 Кб, 496x540
481 1901811
482 1901815
>>901811

>тест


>консоль браузера



Я думал дебилы уже вымерли, а нет, еще ты остался.
483 1901831
>>901811
А ретурн у setv зачем?
В общем, разрыв тоже в разы, хоть и меньше моего.
484 1901834
>>901831

>А ретурн у setv зачем?


Потому что операция присвоения возвращает результат присвоения.
485 1901836
>>901786
И что же ты ожидаешь от жита? По сути вызываешь произвольные функции с произвольными данными, так что интерпретатору приходиться пердеть с угадыванием и приведением типов. Это тебе не жава-хуява, с компилятором не получится поиграться.
486 1901837
>>901836
Не произвольными. Жит умеет оптимизировать функции до 4 разных типов входящих параметров. Если тип вообще не меняется, то функция мономорфна и оптимизируется на раз.

Проседание в скорости вовсе не поэтому, а потому что алгоритм прямого доступа к полю, вызова метода и геттера сильно различен.
487 1901849
>>901837

>Жит умеет оптимизировать функции до 4 разных типов входящих параметров.


Это ты про какой движок и какой версии?
488 1901857
>>901849
В v8 spidermonkey и jscore это так и последние 6 лет ничего не меняется
489 1901897

>Ученые осуществили квантовую телепортацию на 44 км



Страницы теперь будут загружаться моментально?
490 1901898
>>901897
Исследователям удалось передать квантовое состояние на 44 км с точностью более 90% по волоконно-оптическим сетям, аналогичным тем, которые составляют основу существующего интернета.
491 1901906
>>901898

>квантовое состояние


>с точностью более 90%


То есть проебали его.
492 1901927
В общем, делаю хартстоуноподобную игру на ноде, существа наследуют от класса EventEmitter и обмениваются событиями при взаимодействии. Система получилась гибкой и работала успешно, пока это дело не разрослось и я не столкнулся с круговыми зависимостями, приводящими к бесконечному стэку колбеков (у меня проблемы бесконечного стэка нет, т.к. колбеки асинхронные, но один хрен игра застревает на каком-нибудь циклическом взаимодействии).
Простой пример: у мечников есть способность контратаковать врага, если враг промахнулся. Если раскачать уворот двум мечникам до небес, и направить одного на другого, они будут махаться до бесконечности, и ход никогда не завершится.
Можно, конечно, поставить кап на максимальный уворот и так далее, но это всё полумеры, и при разрастании проекта такие зацикливания будут неизбежны.
Хотелось бы придумать какое-нибудь архитектурное решение.
493 1901931
>>901906
Кот Шредингера остался без хвоста
494 1901933
>>901927
Ограничивать пропагацию события?
495 1901941
>>901927
Так надо было сразу разделять атаку и контратаку, как стадии боя или механически, и соответсвенно мечники контратакуют если атака противника промахнулась. Это даже не программирование, а уровень гейм дизайна.
496 1901943
>>901941
Да я там явно переборщил с гибкостью. С мечниками ещё относительно простой пример. А что, если у игрока есть артефакт, который повышает атаку всем существам со защитой меньше X, и есть существо, чья защита повышается пропорционально его атаке.
Всё, бесконечная гонка обсерверов.
Это действительно больше вопрос геймдизайна.
497 1901954
>>901943я.
1) Ввести две "мировые константы" в игре: коэфициент затухания ε воздействия и порог срабатывания воздействия F.
2) В кажом событии передовать параметр А - силу воздействия
3) Событие распостряняется на следующий объект с силой М = ε * A
4) Если М < F то собыите не срабатывает и не распостраняется дальше.
498 1901958
>>901954
Естественно 0 < ε < 1
499 1901959
>>901954
Проще уж ввести лимит срабатываний на каждый обсервящий события колбек. Счётчик будет обнуляться каждый раз, когда "ход обсчитан".
500 1901961
>>901943

>А что, если у игрока есть артефакт, который повышает атаку всем существам со защитой меньше X, и есть существо, чья защита повышается пропорционально его атаке.


И схуев ли тут бесконечная рекурсия? Даже если ты накриворучил, что у тебя артефакт какого-то хуя бафает существ при каждом изменении их защиты, а не работает как аура или одноразовый бафф, то он все равно должен останавливаться, когда защита превышает X.
>>901954
Охуенно наверное переизобретать stack depth limit, да еще и вставлять его прямо в механику игры, потому что не смог поправить бесконечную рекурсию, 10/10 идея.
501 1901962
>>901959
Может потом захочется сделать А вектором (разные параметры эффекта), M и F - нормой, а ε матрицей
502 1901963
>>901961
Я как раз не предалагаю stack depth limit, а советую тоже самое что и ты, только более формально описав.
503 1901964
>>901961
Артефакт следит за защитой существ, и когда она меньше 10, даёт существу +5 атаки.
Существо изначально обладает атакой 7 и способностью "защита этого существа всегда равна его атаке".
Артефакт повышает атаку --> Существо повышает защиту --> Артефакт убирает повышение атаки --> Существо понижает защиту --> начинай сначала
504 1901966
>>901963
Нет, ты советуешь именно глобальный костыль для остановки рекурсии, когда она превышает некий порог. Это самый что ни на есть лимит стека.
505 1901968
>>901964
Тут вообще непонятно, что должно получиться в итоге.
506 1901969
>>901964
А как оно должно работать-то?

Ты в MTG играл? Раздели статические эффекты на слои и применяй их в сторого обозначенном порядке. Более верхний слой не может влиять не предыдущий.
507 1901970
>>901969

>Раздели статические эффекты на слои и применяй их в сторого обозначенном порядке. Более верхний слой не может влиять не предыдущий.


Не очень понимаю, как это.
508 1901990
>>901966
Ну так не только это, какая то разумная модель должна быть. Нельзя же было просто унаследоваться от EventEmitter и айда логику писать, уникальную в каждом методе.
509 1902000
>>901990
Ни в каком виде это разумной моделью быть не может, потому что рекурсия в твоей программе возникать не должна в принципе, если она возникает, то это баг, и баги правят только там, где они возникли, а не глобальными костылями.
510 1902001
>>901970
Разберу на примере атаки/защиты (опять же, как оно в MTG). Там порядок такой:

1. Изначальная атака/защита
2. Эффекты, которые устанавливают атаку/защиту в конкретное значение
3. Эффекты, которые добавляют или удаляют атаку/защиту
4. Эффекты, которые меняют атаку и защиту местами

>Артефакт следит за защитой существ, и когда она меньше 10, даёт существу +5 атаки.


>Существо изначально обладает атакой 7 и способностью "защита этого существа всегда равна его атаке".



1. Изначальная атака 7
2. Установлена защита 7
3. Атака модифицирована до 12
4. ...

Итого — существо 12/7.

Ну а дальше уже меняй систему как тебе надо.
511 1902008
>>902001

>1. Изначальная атака 7


>2. Установлена защита 7


>3. Атака модифицирована до 12


>4. ...


>


>Итого — существо 12/7.



Какая-то фигня. Если я напою существо эликсиром на +10 атаки, то защита у него тоже не возрастёт, и мне придётся долго растолковывать игрокам, почему так получилось.
512 1902009
>>902000
Да я предложил не бороться с рекурсией, а модель похожую на физическую. В природе тоже рассеяние есть, трение из-за чего упавший мячик не скачет как маятник. В модели А может быть векором эффектов воздействия, М нормой ε как матрицей так и числом.
513 1902011
>>902009
Ну то есть два мечника устанут молотить друг друга - и поэтому другие существа даже не походят.
514 1902012
>>902008

>Какая-то фигня. Если я напою существо эликсиром на +10 атаки, то защита у него тоже не возрастёт, и мне придётся долго растолковывать игрокам, почему так получилось.


Блэт, я же тебе написал, что это только принцип. Ты можешь поменять слои 2 и 3 местами. Или придумывать менее всратые абилки, которые не взрывают мозг игроками и взаимодействуют более очевидным образом.
515 1902013
>>902011
Там одно событие на всю игру и есть объект бог, который это одно событие создает ?
516 1902016
>>902013
Если там turn based рогалик, то зачем вообще геморой с событиями было создавать?
517 1902024
>>902009
Этим методом ты прежде всего пытаешься бороться именно с нежелательной рекурсией и ни с чем другим. И в карточной игре должны быть строгие правила а не костыльное "затухание", которое хуй знает как работает и на каких комбинациях карт.
518 1902025
>>902016
Потому что блин это там самое прикольное: ты приказываешь атаковать, а на поле секунд десять происходит всякая дичь, потому что у одного сработал триггер на уворот и контрудар, у второго на "прикрыть союзника", у третьего ещё на что-то.
519 1902026
>>902024

>И в карточной игре должны быть строгие правила а не костыльное "затухание"


То-то в харстоуне тупо лимит на стек из 50 событий.
520 1902028
>>902026
Если ты основываешь свою игру на ебаном херстоуне, написанном индусами, о ебанутых багах, костылях и кривых механиках которого слышал даже не игравший в него человек, то земля тебе пухом.
521 1902034
>>902026
Не говоря уже про то, что у даже у них хватило ума не делать "мамяумный у меня динамический коэфицент затухания рекурсии", а просто ебануть хард лимит на действия.
522 1902221
Попробовал я ваш реакт, написал пару тудушек, новостную ленту с монго сервером и самой серверной частью на ноде, че лучше поюзать дальше ангулар или вью?
523 1902225
524 1902240
>>902221
И то, и то параша. Делать интерфейсы — самое дно для программиста.
525 1902247
>>902240
А кто тебе сказал что это програмирование?
526 1902250
>>902240

>Делать интерфейсы — самое дно для программиста.


Абсолютно всё пррграмиирование заключается в том, чтобы делать интерфейсы
527 1902251
>>902250

> мам смари как я пошутил

528 1902257
>>902251
Это не шутка.
529 1902258
>>902257
значит это тупость
530 1902265
>>902258
Обоснуй.
531 1902272
Как вообще дебажат ноду?
У меня сейчас вот сервер тупо встал: ошибок в консоли нет, процесс запущен, при этом сервер не реагирует на запросы, будто ушёл в бесконечный цикл.
532 1902273
>>902272
прикол: нажал в консоли Ctrl+C, и сервер возобновил работу, будто был на паузе. что за дерьмо?
533 1902286
>>902272

>вообще дебажат


console.log
534 1902323
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
ПЕРЕКАТ >>1902322 (OP)
535 1902763
>>901927
Мне пришла в голову дерзкая идея, как всё упростить.
Что, если показывать игрокам не актуальные статы существ, а статы на момент последнего вычисления? Учитывая, что вычисление статов на сервере происходит по требованию, получается простая логика: игрок не знает урон существа, пока это существо никого не ударило. Игрок не знает броню существа, пока это существо не получило удар. И так далее.
Это снимает целый пласт проблем с поддержанием кучи параметров в актуальном состоянии, а также добавляет в игру элемент эксплора, кек.
536 1902830
>>902273
Если с cmd из винды, то ты наверняка выделил текст в консоли, а это замораживает любой процесс. Ctrl+C отменяет выделение.
537 1902934
>>902830
Да, действительно, скорее всего так и было.
538 1903308
>>902272
Как минимум в вс код есть дебаггер и в принципе у ноды есть какие-то выходы для дебага. Но анон выше правильно сказал, единственное, что намертво замораживает процесс - это такое выделение в консоли.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 27 апреля 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски