💡 Как должен выглядеть стектрейс с AggregateError + cause
В примеры кода добавлена обработка ошибок: ООП, ФП, прототипного, реактивного и других стилей.
- Тут валидация выдает не только первую ошибку, но все, которые может найти, а значит, не нужно запускать код или его тесты много раз, исправляя ошибки по очереди
- Благодаря ФП и Result тут вся программа доходит до конца, выдавая максимум ошибок, не вылетая на первой же
- Обработка ошибок не требует кучи if-else в прикладном коде, все ветвление скрыто
- Стек-трейс вложенный, но простой и понятный
Обработка ошибок добавлена почти во все стили, это просто пример на ФП, но загляните, то же реализовано на ООП и других парадигмах и стилях.
Code: https://github.com/HowProgrammingWorks/Paradigms/blob/main/JavaScript/monad-result.js
В примеры кода добавлена обработка ошибок: ООП, ФП, прототипного, реактивного и других стилей.
AggregateError: Validation
at validatePoint (/monad-result.js:82:20)
at Monad.chain (/monad-result.js:21:12)
at Object.<anonymous> (/monad-result.js:93:43)
[errors]: [
TypeError: Invalid x: NaN
at validatePoint (/monad-result.js:79:40)
at Monad.chain (/monad-result.js:21:12)
at Object.<anonymous> (/monad-result.js:93:43)
TypeError: Invalid y: false
at validatePoint (/monad-result.js:80:40)
at Monad.chain (/monad-result.js:21:12)
at Object.<anonymous> (/monad-result.js:93:43)
]
}
- Тут валидация выдает не только первую ошибку, но все, которые может найти, а значит, не нужно запускать код или его тесты много раз, исправляя ошибки по очереди
- Благодаря ФП и Result тут вся программа доходит до конца, выдавая максимум ошибок, не вылетая на первой же
- Обработка ошибок не требует кучи if-else в прикладном коде, все ветвление скрыто
- Стек-трейс вложенный, но простой и понятный
Обработка ошибок добавлена почти во все стили, это просто пример на ФП, но загляните, то же реализовано на ООП и других парадигмах и стилях.
Code: https://github.com/HowProgrammingWorks/Paradigms/blob/main/JavaScript/monad-result.js
👍12🔥4❤2
То, что Promis не монада, это общеизвестно, но нашлись люди, которые говорят, что Array монада, и что из Thenable нельзя сделать монаду, здесь доказательство про Thenable, о про Array даже говорить нет нужды, ну я надеюсь, что это очевидно... или нет? https://github.com/HowProgrammingWorks/Thenable/blob/master/JavaScript/b-monad.js
❤5👍3💯1
Даже в JavaScript/TypeScript мире начала распространяться благая весть, что наследование это зло, и в большинстве случаев его лучше заменить структурной композицией или открытым конструктором. Но не все помнят, что была целая группа языков программирования объектно-базированных, где классы были и можно было делать экземпляры, но нельзя было делать новых классов: ada, fortran, foxbase, clipper... Подумайте, это интересное решение, так можно делать и в js/ts
❤7🔥3⚡2😁2💯1
Вчера на созвоне курса написали бандлер: 65 строк (2.3 kb). Чудеса? нет, он не универсальный, у модулей метархии такие свойства кода, что их можно собирать склейкой файлов и заменой пары строк. Минификация и бандлинг - это костыли эпохи HTTP/1 и отсутствия ESM (import/export), но с 2021 года HTTP/2 и HTTP/3 вместе с <script type="module"> и Brotli это уже индустриальный стандарт и осталось разделить сборку на простейшие операции склейки при публикации в npm и создание ссылок при установке пакета в папку /static/ Так кодовая база в git лежит один раз, не дублируется для node.js и браузера, ее легко исправлять, не нужны соурсмапы, код читаемый на клиенте, подгружается по мере надобности, обновляется частями, у каждого файла (библиотеки) свой хеш, это и CDN-френдли, а скоро мы будем распространять зависимости, подписанные хешом через WebRTC без CDN. Это пока прототип, сделанный на коленке, но скоро будет в отдельном репозитории https://github.com/metarhia/metautil/pull/310/files
👍11❤5🤯3😁1