Продолжаю работу с ментатами 🤓
...Чуть лучше разобрался с работой вложенных лямбд в Java. Заметили в коде проекта баг, который связан с этим делом.
Код был написан исходя из неверных предположений и делал не совсем то, что от него ждали. Проблему заметил тимлид. В том коде хотели выполнять некоторую операцию в чистом контексте, операция передавалась как лямбда в метод выполнения задачи. Всё это было обёрнуто методом forEach какой-то коллекции. Но оказалось, что в чистом контексте происходило только создание лямбды, а сама же операция выполнялась в рамках основного контекста.
В общем мы попали в ситуацию, когда одна лямбда создавала другую, которая потом выполнялась в рамках forEach(), а код был написан так, будто вторая лямбда не создаётся, а сразу выполняется.
Как меня всё это запутало. Но потом стал разбираться с темами создания и работы лямбд, подключил ИИ к объяснению происходящего и вроде удалось понять что там происходит и в каком порядке вызывается. Теперь буду с особым вниманием писать код в таких местах, чтобы самому не оказаться в такой ловушке.
Как и чтобы таких ошибок избегать "по построению", будет в LPF. Сам по себе класс-обёртка "монада" с return и bind совершенно ничего не гарантирует, пайп из таких самодельных монад может развалиться по 100500 причинам.
...Юнит-тестов в прошлом проекте, разумеется, не было (по настоянию лида),
и отсутствие непредсказуемого поведения (или, по крайней мере, выявленного непредсказуемого поведения) на момент сдачи я считаю удачным стечением обстоятельств для меня и неудачным для тех, кто после меня будет этот проект поддерживать.
...После изучения TOP, в голове так и крутится что типы это состояния, я состояния - это типы.
...Возврат из репо дефолтной sql ошибки не понравился, решил оберунть в кастомную ошибку с nil полем,
не заполнил nil поле, получил панику на проде при попытке логирования
...Если подвести общий итог. Солвер — не про то, чтобы получить ответ, а про то, чтобы обнаружить, что вопрос был задан неточно. Ответ он даёт мгновенно.
...для обрастания хорошими знакомствами необходимо выстраивать сеть людей -> расширяю свою сеть в linkedin, списываюсь там с разными людьми (уже появилось полезное знакомство в зарубежную компанию), и что самое интересное - люди ко мне добавляются сами, что очень приятно; думаю в будущем необходимо делать свой личный бренд
...В РФ скудно по вакансиям. Снял розовые очки - надо давить на личный бренд и иметь запасные варианты.
...В примере 2 задал имплементацию класса статистики BonusAccountStats с реализацией plus, чего делать, конечно не надо было, так как:
теряется гибкость задания Stats (по сравнению с Max);
BonusAccountStats начинает знать про plus.
Это противоречит идее универсальности использования моноида. Оставил как напоминание себе.
В примере 3 доработал пример 2, чтобы довести моноид до группы. Пришлось избавиться от вычисления максимума в статистике, так как при откате для него нет обратимой операции.
В примере 4 моделировал движение робота как мы это делали в одном из курсов через задание смещения относительно текущего положения. Группа получилась абелевой, так как в исходную точку можно вернуться с помощью инвертированного набора исходных шагов вне зависимости от их порядка.
🔥
Post #2618
508

- ❤ 24
- ✍ 10
- 👍 3