Мне не нравятся обычные исключения, из-за них поток управления становится трудноотслеживаемым, изучать код с ними бывает сложно. Мне не нравятся checked exceptions, они не спасают от недостатков обычных, но при этом вынуждают писать лишние аннотации. Мне не нравится c/go-подобный подход, он вынуждает повторять однотипные блоки возврата, а затем вынуждает высматривать их в теле процедуры. Вообще, ранний возврат мне кажется неудобным для чтения. Мне не нравится haskell-подобный подход, он по сути является вариантом checked exceptions, только вместо throws пишем Either и прописываем возврат исключения явным образом.
В каком языке, по-вашему, исключения работают идеально?
>>544954 Ты охуенен. И эти сигналы на первый взгляд охуенны. Но сейчас я найду причины, по которым они плохи. Для упрощения этой задачи, можешь привести пример перехвата ошибки с последующим восстановлением.
>>544930 (OP) Нет ничего идеального, иначе не было бы 100500 разных парадигм и языков. Для процедурного программирования unchecked exceptions кагбе наименее плохой вариант.
>>544965 >>544965 Все говен и создавались большинство на коленке для поднятия ЧСВ. Идеального тоже нет. НО программирование это инженерная дисциплина и в ней должен быть порядок. А порядка нет. Есть куча петухов которые тянут одеяло на себя и обмазываются всякими фичами, которым цена три копейки. Каждый мнит себя творцом, клепает по 10 языков за год и тянет ИТ в энтропию.
>>545290 >Either вместе с do-сахарком охуенна. Конечно охуенна. Просто без ду-сахарка еитхер - неюзабельное говно, а с ним - те же исключения, что и в яве.
>>545322 >>545290 >Either вместе с do-сахарком охуенна. >Просто без ду-сахарка еитхер - неюзабельное говно Э, уася, но как же монадка, either то композабелен. А твои сраные сигналы и эксепшны нет.
Всегда нравилась эта аргументация. Ну так-то фича не плохая, но вот если убрать вон ту штуку, получится говно. Перекатывайтесь лучше в java/scala/rust/etc
>>545442 В случае Either ошибка является полноценным значением, а не костылём, прикрученным сбоку. И, соответственно, функции, которые могут принимать/возвращать ошибку можно комбинировать так же, как и обычные функции.
>>545465 ВНЕАПНО исключения - такие же обычные первоклассные объекты, которые можно так же передать в другую функцию, вернуть как значение или опять как исключение. Никаких принципиальных отличий.
>>548874 >invoke-restart вызывается выше* по стеку вызовов, throw - ниже. Эт я хуйню написал. Фактически invoke-restart тоже ниже, но фишка в том, что при обработке сигнала (type-error в нашем случае) стек вызовов не раскручивается, и обработчик вызывается в том же месте (в функции factorial, в недрах check-type) и с тем же динамическим окружением, где сигнал произошел, поэтому принимать решение о перезапусках можно выше.
В общем, try catch'ами такое сэмулировать не получится.
>>545472 Ох уж эти функцианальщики. Как только выберутся за пределы своей функцианальной песочницы, так сразу беспомощные. Все мозги отсыхают, видимо. Дали тебе фвп - делай конбенаторы и канбенируй. http://try.haxe.org/#91955
Мне не нравятся checked exceptions, они не спасают от недостатков обычных, но при этом вынуждают писать лишние аннотации.
Мне не нравится c/go-подобный подход, он вынуждает повторять однотипные блоки возврата, а затем вынуждает высматривать их в теле процедуры. Вообще, ранний возврат мне кажется неудобным для чтения.
Мне не нравится haskell-подобный подход, он по сути является вариантом checked exceptions, только вместо throws пишем Either и прописываем возврат исключения явным образом.
В каком языке, по-вашему, исключения работают идеально?