All streams
Search
Write a publication
Pull to refresh
3
0

Пользователь

Send message
да но как это отменяет суть процесса? Происходит композиция функций. Просто передача параметров не напрямую а с упаковкой/распаковкой.
>А на самом деле монада — это просто интерфейс с парой методов.
Монада это переопределенная функция композиции функций. Все остальное от лукавого.
никогда не сдавайтесь?
Но тут напрашивается пошлое —
Где граница между «никогда не сдавайся» и «если лошадь сдохла, слезь»?
одной трансляцией тут не обойдешься. Надо либо завозить в язык всю инфраструктуру (ага, свои реакты, редаксы, less/sass, вот это вот все) либо давать нормальную интеграцию с существующей. В первом варианте это все хозяйство надо поддерживать, во втором — программисту держать в голове контекст языка на котором пишет + контекст всего js хозяйства. Первый вариант не нужен коммерсам, второй — программистам. Но попытки делаются, да. Рано или поздно что либо стоящее думаю выкристаллизуется. Но пока что ничего более вменяемого чем emscripten на горизонте не видно.
>Я просто не буду проверять на nothing в maybe, если я не могу это адекватно обработать на этом уровне.
Да это понятно, я к тому что в любом случае эта обработка где то должна существовать. Я js c хаскелем и не пытаюсь сравнить :)

>а тайпчекер уже гарантирует, что кто-то это да проверит.
Так и в js можно притянуть typescript, там вполне себе приличный тайпчекер, просто речь изначально о js — я поэтому особо статичную типизацию в тред не несу. А так то есть вполне себе убойный аргумент — typescript и фронт с бэком на нем в одном наборе типов. Но это уже реально совсем другая история.
Это поведение float в IEEE 754. Ну или покажите мне язык где бросает эксепшин на это: 103209823048320840000 + 1?
>будто это я этот говнокод написал.
Нет конечно, но кто то же его писал? Какое отношение кривизна программиста имеет к дизайну языка? Напомню, изначально моя позиция — ляпы в языке есть, жить они не мешают. Если вы приводите свой пример в опровержение моих слов то моя позиция — лично Вам мешают жить плохие программисты. Те самые что на уровне прокладки между монитором и креслом. Есть ли они в js — есть, много, обсуждение этой статьи в том числе показывает наглядно что народ языка не знает. Есть ли они в других языках? Не знаю, мне реально без разницы.

>То есть каждую мельчайшую функцию надо проверить на тему того, что она там себе обрабатывает? Вот уж нафиг.
У Вас на входе функции — union, конечно будете проверять. Расскажите мне как вы обойдетесь без проверки на nil в go или тот же nothing в maybe? Это ведь не дизайн языка, это дизайн функции, и такому дизайнеру в любом языке оторвут руки предварительно поломав пальцы.
Не хотите выхватить сюрпризов в рантайме — используйте инструменты — eslint и typescript. В общем если хотите жить нормально — возможности есть. Для плача Ярославны поводы — тоже. Тут как бы сам себе выбирает что больше по душе.
>Как насчёт функции, в которую приходит параметр, который иногда boolean, а иногда — лямбда?
Никак. Там ведь стоит на входе if typeof bla bla, верно?
тогда не понимаю в чем проблема? Нет IDE для js или Вы не умеете ей пользоваться? Или она не подсказывает сигнатуры? С тем же сортом — как его можно использовать зная только название? Как он отсортирует — по возрастанию или по убыванию? Что вернет — новый отсортированный массив или отсортирует тот на котором вызван? Есть какое то общепрограммистское соглашение по сигнатурам функций сортировок которого все придерживаются а js цинично и с особой жестокостью нарушает?
Ляпы не надо учить. Если писать на js нормальный код с нормальными практиками — вы просто в них не будете втыкаться. 90% ляпов — неявное приведение типов. Странно слышать от апологетов статичной типизации что они страдают от того как они заложились на то что js будет приводить типы так как они рассчитывали. Апологет статичной типизации никак не рассчитывает, он либо приводит явно либо проверяет. Проблемы с js как правило у народа пришедшего с таких же динамичных языков, просто там приведение работает по другому и при этом они знают КАК.
Не закладывайтесь на приведение. Используйте === и явные преобразования типов.
>но они сигнализируют о том какого качества было проектирование языка
А я и не говорю о том что язык прекрасен. Я говорю о том что эти ляпы не мешают жить если вы пишете на js так как вы пишите на нормальном языке. То есть ляпы есть но они не вынуждают вас их использовать. В этом и заключается мой вопрос — покажите мне ситуацию к которой вас подталкивает дизайн js в которой потребуются знания этих ляпов. Что касается хаскела — как хаскелист любитель/начинающий дилетант с удовольствием послушаю историй успешных хаскелистов овладевших языком не зная что там под капотом. Можно привести пример эффективной сортировки написанной на хаскеле без глубокого знания ситуации под капотом :) (для тех кто не в теме оставлю тут)
Это поведение float. Странно что вы этого не видите по первой строке.

>где-то в документации можно найти что-то, что поможет так не «встрять»?
Number_type
>Словил багу, где с сервера в json приходил null вместо числа.
Это типичное нарушение правил гигиены. Информация пришедшая из-за пределов периметра должна валидироваться, это от языка не зависит. Если не уверены что проверили все и везде — есть unknown в typescript для контроля периметра, если хочется по феншую. Но проверять придется.

>но это поведение неожиданное
Неожиданно пользоваться функцией не зная ее сигнатуры. sort принимает на входе функцию сравнения. Это необязательный параметр, но это параметр. Если вы открыли доку что бы посмотреть сигнатуру функции — вы это увидели. Дальше простая цепочка — если есть параметр и его можно не указывать — значит есть поведение по умолчанию. Какое? Ответ видим в том же абзаце где описывается этот параметр. Ситуация описанная Вами может возникнуть только при программировании наугад.

>В более предсказуемом языке глубоко документацию надо читать чтобы узнать о фичах, а не о подводных камнях. Чувствуете разницу?
Нет, не чувствую. Берем язык x и используем функцию y. О наличии функции y в языке x мы как узнали? common knowledge?

>И что кстати значит, что в js нет интов?
обычные числа в js — float, инты надо задавать явно — либо в массивах (intXArray) либо Bigint. Переполнение возникает потому что Вы применяете bitwise операцию к float, она естественно делается с приведением типа а приводится к 32 разрядному инту, результат внезапно приводится обратно к float. То есть воткнувшийся в эту ситуацию не понимает как хранятся числа в js — это я уже упомянул, знать надо. Все остальное — следствие. Попытка применить битовую операцию к float у любого вменяемого программиста вызовет вопрос — как оно будет сделано.
Ни в коем случае не пытаясь оправдать очевидные ляпы в языке, задам все же вопрос который задаю каждый раз когда вижу эти замечательные списки ляпов или когда мне задают подобные вопросы на собеседованиях — что именно вы пишете что втыкаетесь в эти проблемы?

Поведение sort описано в документации, то что в js нет интов (не было, теперь есть но их надо объявлять явно) — должно быть известно с первых дней программирования на этом языке (ну или переходите на язык на котором можно писать не читая документации)
Со всем остальным — если вы пишете нормальный код и используете нормальные пакеты — вы просто не должны сталкиваться. Я за четыре года не столкнулся ни с чем не только из вышеперечисленного но и из гораздо более полных и обширных плачей Ярославны по этому поводу.
>Для меня проблема в том, что (речь об английском языке, его сумасшедшей орфографии) услышанное звучание можно записать чуть ли не десятком различных способов.

Процесс поиска написания услышанного слова — важная часть обучения. Если слово досталось легко — мозг считает что это не сильно ценная информация (моя теория) С трудом добытое слово гораздо ценнее. Времени тратится больше конечно, но зато второй раз возвращаться не придется, оно прочно засядет в мозгу. А повторное прослушивание этого слова (желательно в другом контексте, я обычно смотрю практику применения на reverso а потом гуглю из какого фильма/сериала цитата, они (reverso) в свою базу сабы загружают) закрепит его, даст подтверждение мозгу что добыча имеет ценность. Есть конечно патологические случаи, типа вот этих, но как rule of thumb вполне себе.

Опять же — это мой опыт, возможно он не всем подойдет. Но есть часть которая универсальна. Я в процессе обучения присматривался к своему мозгу, выделял именно те части которые давались плохо и старался понять почему. Что то вроде того как хакнуть свои мозги. Вот эта часть мне кажется подойдет любому.
yep. Пропустил плашку перевода.
>Теперь мы знаем, что logger — это PrintLogger
Как? type propagation или type inference? Если inference — то какой? Hindley-Milner или есть что поинтереснее?

>а multiplied — нет: она начинается с 0 и каждый раз умножается через multiplied = multiplied * count,

Ээээ, нееет. В смысле да, но как мы об этом узнали? Точнее не мы а компилятор. Что стоит за этим выводом — гвоздями прибитый эмпиризм или он на этой же логике выведет str += '' и int += 0?

ну и так далее и тому подобное. /зануда моде офф
зачем? Я и так неплохо зарабатываю. А смотреть я предпочитаю то что мне интересно :) сейчас потихоньку испанский учу, есть вещи которые хочу посмотреть/почитать в оригинале.

Information

Rating
Does not participate
Registered
Activity