Фил Ранжин
Roman
да? почему?
Потому что с юнионами можно сделать нормальный опшн и не портить язык костылем этим
Фил Ранжин
о, ну погодь, а легаси
Фил Ранжин
хорошо же
Фил Ранжин
проще вопросики расставить, чем все на опшны перелопачивать
Roman
И опшн сто пудов появится
Фил Ранжин
а потом уж потихонечку на опшны ехать
Roman
о, ну погодь, а легаси
А что легаси? Оно автоматически перейдет на нулреф типы?
Фил Ранжин
ну ты включишь в легаси проекте их, получишь тонну ворнингов
Фил Ранжин
пойдешь по ворнингам, будешь менять на опшны
Romɑn
А что легаси? Оно автоматически перейдет на нулреф типы?
Все же опшены не замена наллам. Налл дешевле по памяти)
Roman
Все же опшены не замена наллам. Налл дешевле по памяти)
Ну кхм, можно и на спичках сэкономить, да
Фил Ранжин
Так, те кто глянул статью, можете докинуть аргументов против исключений?
Romɑn
Ну кхм, можно и на спичках сэкономить, да
Кейс был про миллионы опшнов.
Фил Ранжин
Все же опшены не замена наллам. Налл дешевле по памяти)
кстати по идее можно опшны зарулить как зерокост
Фил Ранжин
идеологически
Romɑn
Хотя хз как сделают
Romɑn
В фарше none сразу налл
Roman
кстати по идее можно опшны зарулить как зерокост
Да, если уж с таском генерацию стейт машин сделали, то тут тоже должны справиться
Romɑn
А вот контейнер памяти сдирает немношк
Roman
А вот контейнер памяти сдирает немношк
Вот если бы сразу структуру сделали
Romɑn
Да, если уж с таском генерацию стейт машин сделали, то тут тоже должны справиться
Ну так то уж лучше бы вместо тасков сделали бы нормальные мохнаты
Romɑn
Вот если бы сразу структуру сделали
Кстати, вопрос. Чё сразу страктом не сделали хз
Фил Ранжин
я ведь могу заимплементить этот мейби так, что когда создаёшь Some и кормишь ему null, создаётся None
Roman
Так, те кто глянул статью, можете докинуть аргументов против исключений?
контракт размытый. Чтобы узнать ожидаемые негативные исходы, надо дойти до дна коллстека, продравшись через бляцкие IUserService -> go to implementation, ведь в интерфейсе исключения не закреплены никак. Учитывая, что реализаций может быть больше одной — удачи с чтением контракта
Roman
В итоге понять бизнес-логику по коду довольно тяжело, пушто исключения разбросаны по всей скотобазе. Вместе они встречаются только в глобальном ExceptionHandler, но там уже поди разбери, откуда оно тебе прилетело
Roman
Сейчас это делает .ofObj
тока он не позволяет работать с типами, у которых нет AllowNullLiteral. Но это обычно редко требуется, и можно десериализовывать сразу в MyRecord option
Shub
Хотя я говорил про фшарп. За реализацию сишарпа ничего утверждать не буду
Нутк, в эфшарпе нулл можно только из интеропа, или с помощью особой магии получить. А в сишарпе достаточно невнимательности
Roman
спасибо)
еще кстати у исключений меньше гранулярность получается, чем, например, у ошибок в резалте фшарповском. Т.е. под каждый контракт я создаю отдельный тип ошибок, пушто это очень дешево с точки зрения кода. А в исключениях часто основная важная инфа находится в поле Message (ну и стектрейс), из-за чего гораздо сложнее качественно покрывать тестами.
Roman
Исключения сабтайпятся если что
они сабтайпятся, но почему-то этим редко пользуются. На моей практике по крайней мере.
Shub
Но принципиально можно сделать, стоить будет как пустой класс
Roman
Да, но тогда надо все равно либо сообщение подробно заполнять, либо каждый тип отдельно обрабатывать в глобальном хендлере, чтобы превратить это в полезное сообщение об ошибке на самом верху
Roman
И вот это уже очень легко будет проебать, пушто компилятор даже не попытается помочь отследить такое говно
Shub
Да, но тогда надо все равно либо сообщение подробно заполнять, либо каждый тип отдельно обрабатывать в глобальном хендлере, чтобы превратить это в полезное сообщение об ошибке на самом верху
Ну вроде этого их хочется? Кому не нужна гранулярность- просто ловит исключение базового класса, кому надо - ловит только нужные ему подклассы. Ты ведь резалт тоже матчишь где-то
Roman
Резалт я матчу, но там мне помогает компилятор — он кидает ошибку, если я забыл какой-то кейс юниона. А тут я кину исключение нового типа, а сообщение не заполню, пушто имя говорящее. А в глобал хендлере забуду, и там оно поймается как исключение-родитель
Roman
И превратится в более размытое сообщение об ошибке
Shub
И вот это уже очень легко будет проебать, пушто компилятор даже не попытается помочь отследить такое говно
В жаве была попытка зафорсить с помощью checkered exceptions, но потом сообщество сказало «єто біла ошибка» и как-то потихоньку назад вернулись
Romɑn
Если ты не забыл включить специальную опцию, а так это просто варнинг
Ну научить включать опцию или сразу ее в в шаблоне проекта включить не проблема
Ayrat
В котлине ду эмулируют через силед классы. Научить сишарп не ругаться на то что ты дефолт не поставил легко
Roman
Если ты не забыл включить специальную опцию, а так это просто варнинг
ну не забыть включить настройку один раз на проект легче, чем каждый раз не забывать новое исключение. Да и варнинг уже лучше, чем ничего
Ayrat
То есть стоит ждать что так и сделают
Shub
Тут можно match myExc with | ex -> defaultExHandler ex
Ну лови базовый тип и будет точно так же. Роман аргументирует, что в эфшарпе лучше, потому что строже - ну так это очевидно, эфшарп в целом получше язык
Shub
ну не забыть включить настройку один раз на проект легче, чем каждый раз не забывать новое исключение. Да и варнинг уже лучше, чем ничего
Ну получается что мы говорим про свой комплекс мер. Уверен, что телезрители будут спрашивать «чем ваш комплекс лучше моего комплекса?»
Shub
Я конечно предпочту матчить резалты и включать ключи
Shub
Тем что один раз, а не постоянно
Хороший поинт, действительно
Roman
Ну получается что мы говорим про свой комплекс мер. Уверен, что телезрители будут спрашивать «чем ваш комплекс лучше моего комплекса?»
он лучше, пушто делает жизнь профессионалу легче. Но да, не спасает от дураков, мудаков и диверсантов
Shub
Фил, ты конспектируешь?
Romɑn
Фил, просто заскринь и выкинь на хабр как есть
Shub
Про мудаков не забудь. Не было бы мудаков - не надо было бы статью писать
Фил Ранжин
Фил Ранжин
пару тейков точно заберу
Фил Ранжин
но тут вот какая проблема
Romɑn
Фил, просто заскринь и выкинь на хабр как есть
Кстати, было б заебись так статью написать
Фил Ранжин
вам не надо продавать идею, что ошибки надо обрабатывать
Фил Ранжин
вы и так с этой идеей согласны
Фил Ранжин
код, с которым обычно имел дело я, похоже написан людьми, которые так не думают
Фил Ранжин
ну и типа
Фил Ранжин
в джаве же отказались от обязательных исключений
Фил Ранжин
почему?
Shub
Ну я предпочитаю в два часа ночи спать, в не в плейбуках рыться
Фил Ранжин
Типа, а как блядь ещё то, есть исключение, значит надо обработать
Фил Ранжин