Alexandr
паника как правила когда полный звездец (не всегда), почти все остальное возвращает 2 значения
Alexandr
ну си еще, да, просто код выполнения операции
Sergey
Си?
коды ошибки жи
Mark
помню кто то говорил в австралии ничего не происходит https://t.me/true_secator/1685
Остаётся Африка Хотя вчера читал про Кению, там интернет у 20% населения, но все равно есть цензура
Sergey
другой механики нету
Alexandr
так речь не про наличие механизма эксепшенов
Romɑn
https://twitter.com/vzarytovskii/status/1390280587722772480?s=09
Alexandr
речь про то, что такой обычный метод как удаление файла \ директории, генерирует нормальное такое количество исключений
Alexandr
в условном го он вернет еррор
Alexandr
в си - код ошибки
Alexandr
https://docs.oracle.com/javase/tutorial/essential/io/delete.html
Alexandr
} catch (NoSuchFileException x) { System.err.format("%s: no such" + " file or directory%n", path);
Alexandr
Бросать исключение не то, что файла нет в директории, когда ты вызываешь его удаление
Alexandr
Я вот не поверю что это адекватное поведение, и что это действительно исключительная ситуация
Sergey
я не понял какие предложения то
Sergey
верить или не верить это в храм идти
Sergey
что ты предлагаешь
Anatoly
я не понял какие предложения то
Предложение - делать методы идемпотентными
Anatoly
И не кидать идиотских исключений
Sergey
Вернее он другие какие-то может кинуть но не файлнотфауд
Sergey
И не кидать идиотских исключений
так как обрабатывать такие ситуации
Alexandr
я не понял какие предложения то
так ведь речь была не об этом) это просто в тему обработки ошибок и что в целом пока идеального варианта нет Но мне ближе был бы подход го, но с хорошим синтаксическим сахаром для обработки всего этого Мб возврат error либо result когда надо
Anatoly
так как обрабатывать такие ситуации
Никак. Что в твоём коде изменится, если ты захотел удалить файл, а его и так нет?
Alexandr
когда тебе надо игнорируешь, когда нужно обрабатываешь
Alexandr
но как писал выше, подобное к куче |> ignore привести может так что я хез, идеальных вариантов пока не видел
Mark
зависит
Вернуть bool, был ли удален файл
Sergey
Вернуть bool, был ли удален файл
не удален потому что прав нет
Alexandr
бул тоже не всегда вариант
Sergey
или потому что нету файла
Sergey
есть разница?
Alexandr
он не даст контекст
Alexandr
Result видится хорошим вариантом, но можно на грабли го легко наступить
Mark
не удален потому что прав нет
Права мне кажется надо проверять до вызова, а из метода кидать исключение
Sergey
Да даже если проверил, на момент вызова их может не стать
Mark
так а если не проверил то че
Ну я размышляю так, что в нормальной ситуации проблем с правами не должно быть. Если они есть, то что-то с логикой приложения не так и надо править. А для нормального хода процесса удаления возвращать бул, удалился файл или нет Но звучит это все немного запутанно и неоднозначно
Sergey
тут помоему @theycallmewildrose рассказывал как они избавлялись от ошибок
Mark
Ну приложение это не только код, а ещё окружение
Mark
Если прав не хватило на удаление, то приложение вряд ли дальше сможет работать штатно
Sergey
Если прав не хватило на удаление, то приложение вряд ли дальше сможет работать штатно
с правами это один пример там же можно придумать больше ситуаций и не на файл
Ilya
Вернуть bool, был ли удален файл
тогда должно быть TryXXX
Mark
да поэтому бул говно)
Не, я предложил кидать эксепшн если прав не хватило :)
Sergey
А есть ещё хттп, там нужно вообще всего ожидать
Alexandr
Ага, и вроде если в ответ приходит не 200 код, кидается эксепшен, и если инет упал, днсник.
Alexandr
хотя это в вебе вроде рядовая ситуация так-то
Sergey
Не, в сишарпе по крайней мере хттп клиент так не делает
Anonymous
тут помоему @theycallmewildrose рассказывал как они избавлялись от ошибок
Да, у меня есть неплохие техники на вооружении
Alexandr
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.getstringasync?view=net-5.0 ориентируюсь на это, но насчет кода 200 не уверен совсем
Sergey
Ну он любой код ответа прожуёт, а если что-то в сетевом стеке отстрелило то эксепшн
Sergey
Коды ошибок заманчиво, но они не сквозные для разных подсистем и ебись потом с этим 0x100500_FUCK_YOU_FUCK
Mark
Alexandr
если и возвращать значение, то какой-то Result или Error Option но как уже говорил выше, можно наступить на грабли го, и еще задолбишься игнорить получаемое значение
Sergey
когда не узнал что есть чекед эксепшены
Alexandr
Я про случаи с делитем
Alexandr
не всегда для тебя имеет значение, был ли файл успешно удален
Sergey
Ну ты вокруг одного кейса пытаешься систему строить
Alexandr
я не пытаюсь, за меня все построили)
Alexandr
фактически, хотелось бы просто иметь меньше эксепшенов в стиле что файл не обнаружен
Alexandr
а так ну есть эксепшены и есть, нужно с этим жить и их обрабатывать
Sergey
@ilchert вот про Try* говорил для таких случаев, по-моему разумно звучит. Осталось только правильный System.IO написать)
Alexandr
ну тогда опять натыкаешься на то, что как тогда уведомить что файл для удаления не обнаружен
Alexandr
трайзвезда это что?
Alexandr
я как-то писал обобщенную функцию трай кстати
Sergey
Ну всякие методы TryParse(.... out result)
Sergey
в джаве
Alexandr
Трай нормальный выход, согласен