А почему в java нету готовых методов, которые бы позволяли парсить числа, не кидая исключений? Т.е. возвращали бы true+число, либо false, типа как int.TryParse в дотнете.
А в чем их возвращать? Можно сделать class что-то вроде MutableInteger, но как-то не очень красиво. Можно возвращать Object[] - но это совсем уж извращение.
Чем так сильно отличает возвращение статуса от кидания исключения?
Есть постулат, что строка, не подходящая по формату для преобразования в число - это идеологически не исключение, а вполне штатная ситуация. Потому правильны метод - возвращающий bool результат преобразования, а если все хорошо, то еще и модифицирующий переменную, которую мы ему указали.
Хмм. откуда такой постулат? В исходном посте в C# - tryParse - попробовать распарсить. в Java - parseInt() - требует распарсить. Вполне логично по-моему.
Ситуация, когда нормальная работа приложения либо модуля не может быть продолжена обычным образом, и вам необходимо вернуться, возможно, на несколько уровней вложенности в первоначальное состояние, передав наверх информацию о ситуации.
А не факт, что IOException - это правильное архитектурное решение. У нормальных людей эти операции возвращают результат операции, число там записанных байт и т.п. Там исключение - как корове седло.
Очень простой. Если работу можно продолжать - исключение кидать не принято. Исключения - для случаев, когда надо свалится в корень исполняемого потока (main loop или там обработчик выдающий 500 в веб-сервисе). Делать логику на исключениях - очень нехорошо, но конкретно в данном случае жаба вынуждает это делать.
Потом этот налл удетит по веб-сервису на N удаленных систем. Там сохранится в базах, потечет по бизнес-процессам и через пол года на другом континенте начнет вываливаться NPE. Нал он такой, да. Как и любители нала.
C т.з. требований на вашем уровне- вполне возможно. С т.з. метода парсинга строки в инт неподходящая строка- это ошибка. В жаве принято обрабатывать ошибки консистентно- исключениями.
Еще вот тут отмечусь. Вот сделали туплом аутпут, ок, облегчили себе жизнь и вместо исключения пользуем дефолтное значение. Берет юзверь вашу прогу, вводит какую-нибудь шнягу, верную с его точки зрения (можно я не буду придумывать варианты?) А потом несколько дней ебется в поисках решения, хули получается совершенно другое значение на выходе?
А кто говорил о каких-то дефолтных значениях? Если все не ок, то возвращается кортеж из булена об ошибке и кода ошибки. Если все ок, то возвращается тупл с буленом и с полученным значением.
no subject
Можно возвращать Object[] - но это совсем уж извращение.
Чем так сильно отличает возвращение статуса от кидания исключения?
no subject
no subject
В исходном посте в C# - tryParse - попробовать распарсить. в Java - parseInt() - требует распарсить. Вполне логично по-моему.
no subject
no subject
Опять же, что плохого в исключениях?
no subject
no subject
no subject
no subject
Чем принципиально это отличается от IOException?
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
Если работу можно продолжать - исключение кидать не принято.
Исключения - для случаев, когда надо свалится в корень исполняемого потока (main loop или там обработчик выдающий 500 в веб-сервисе).
Делать логику на исключениях - очень нехорошо, но конкретно в данном случае жаба вынуждает это делать.
no subject
Исключение кидаются когда произошло нечто неожиданное с точки зрения разработчика.
parseInt() ожидает увидеть число. А получило. - вполне неожиданное событие.
Ожидали прочитать из файла, а он закончился - тоже.
Но и то, и другое можно сделать на статусах, как C.
no subject
no subject
Но вот с числами.. можно конечно сделать Integer Integer.parseInt() и возвращать null если не удалось распарсить.
no subject
no subject
(no subject)
(no subject)
no subject
Неумение языка возвращать tuple тоже зло.
no subject
no subject
no subject
Сферически - идеальные языки, с кортежами на выходе и т.п. Ням-ням.
no subject
в ратомкена испанском побережье- это мысль.no subject
no subject
Берет юзверь вашу прогу, вводит какую-нибудь шнягу, верную с его точки зрения (можно я не буду придумывать варианты?) А потом несколько дней ебется в поисках решения, хули получается совершенно другое значение на выходе?
no subject
Если все не ок, то возвращается кортеж из булена об ошибке и кода ошибки. Если все ок, то возвращается тупл с буленом и с полученным значением.
no subject