metaclass: (дзедline)
[personal profile] metaclass
А почему в java нету готовых методов, которые бы позволяли парсить числа, не кидая исключений?
Т.е. возвращали бы true+число, либо false, типа как int.TryParse в дотнете.

Date: 2013-03-21 09:39 am (UTC)
From: [identity profile] kzn.livejournal.com
А в чем их возвращать? Можно сделать class что-то вроде MutableInteger, но как-то не очень красиво.
Можно возвращать Object[] - но это совсем уж извращение.

Чем так сильно отличает возвращение статуса от кидания исключения?

Date: 2013-03-21 09:47 am (UTC)
From: [identity profile] vp.livejournal.com
Есть постулат, что строка, не подходящая по формату для преобразования в число - это идеологически не исключение, а вполне штатная ситуация. Потому правильны метод - возвращающий bool результат преобразования, а если все хорошо, то еще и модифицирующий переменную, которую мы ему указали.

Date: 2013-03-21 09:53 am (UTC)
From: [identity profile] kzn.livejournal.com
Хмм. откуда такой постулат?
В исходном посте в C# - tryParse - попробовать распарсить. в Java - parseInt() - требует распарсить. Вполне логично по-моему.

Date: 2013-03-21 09:57 am (UTC)
From: [identity profile] vp.livejournal.com
Так мы дойдем, что проверка if() при не выполнении условия тоже будет бросать исключения вместо того, чтобы ветвиться.

Date: 2013-03-21 10:23 am (UTC)
From: [identity profile] kzn.livejournal.com
Не надо преувеличивать :) Скажем isInteger() исключений бросать не должна.

Опять же, что плохого в исключениях?

Date: 2013-03-21 10:24 am (UTC)
From: [identity profile] vp.livejournal.com
Есть мнение, что исключение - это исключительная ситуация. По определению здесь нет факта исключительной ситуации.

Date: 2013-03-21 10:26 am (UTC)
From: [identity profile] kzn.livejournal.com
Каков критерий исключительной ситуации?
Edited Date: 2013-03-21 10:27 am (UTC)

Date: 2013-03-21 10:30 am (UTC)
From: [identity profile] vp.livejournal.com
Ситуация, когда нормальная работа приложения либо модуля не может быть продолжена обычным образом, и вам необходимо вернуться, возможно, на несколько уровней вложенности в первоначальное состояние, передав наверх информацию о ситуации.

Date: 2013-03-21 10:36 am (UTC)
From: [identity profile] kzn.livejournal.com
Ну а чем это не подходит к ситуации, когда мы ожидаем распарсит число, а не получается? Тут тоже возможно нужно передать информацию на уровень выше?

Чем принципиально это отличается от IOException?

Date: 2013-03-21 10:38 am (UTC)
From: [identity profile] vp.livejournal.com
А не факт, что IOException - это правильное архитектурное решение. У нормальных людей эти операции возвращают результат операции, число там записанных байт и т.п. Там исключение - как корове седло.

(no subject)

From: [identity profile] kzn.livejournal.com - Date: 2013-03-21 10:39 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2013-03-21 10:42 am (UTC) - Expand

(no subject)

From: [identity profile] kzn.livejournal.com - Date: 2013-03-21 10:56 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2013-03-21 10:58 am (UTC) - Expand

(no subject)

From: [identity profile] sil-e-nt.livejournal.com - Date: 2013-03-22 07:50 am (UTC) - Expand

Date: 2013-03-21 10:30 am (UTC)
From: [identity profile] metaclass.livejournal.com
Очень простой.
Если работу можно продолжать - исключение кидать не принято.
Исключения - для случаев, когда надо свалится в корень исполняемого потока (main loop или там обработчик выдающий 500 в веб-сервисе).
Делать логику на исключениях - очень нехорошо, но конкретно в данном случае жаба вынуждает это делать.

Date: 2013-03-21 10:54 am (UTC)
From: [identity profile] kzn.livejournal.com
Это крайность имхо.

Исключение кидаются когда произошло нечто неожиданное с точки зрения разработчика.

parseInt() ожидает увидеть число. А получило. - вполне неожиданное событие.

Ожидали прочитать из файла, а он закончился - тоже.

Но и то, и другое можно сделать на статусах, как C.

Date: 2013-03-21 10:29 am (UTC)
From: [identity profile] metaclass.livejournal.com
с if часть алгоритмов сильно короче и нагляднее. Ну, еще насчет производительности вопрос сложный.

Date: 2013-03-21 10:38 am (UTC)
From: [identity profile] kzn.livejournal.com
Да. С этим согласен. Сам переписывал парсера, который не проверял границы, а кидал Out Of Bounds. Стало короче и даже быстрее.

Но вот с числами.. можно конечно сделать Integer Integer.parseInt() и возвращать null если не удалось распарсить.

Date: 2013-03-21 11:36 am (UTC)
From: [identity profile] henu3detb.livejournal.com
Потом этот налл удетит по веб-сервису на N удаленных систем. Там сохранится в базах, потечет по бизнес-процессам и через пол года на другом континенте начнет вываливаться NPE. Нал он такой, да. Как и любители нала.

Date: 2013-03-21 11:39 am (UTC)
From: [identity profile] kzn.livejournal.com
Ну ногу-то практически всегда отстрелить можно. Особенно при остром желании.

(no subject)

From: [identity profile] henu3detb.livejournal.com - Date: 2013-03-21 11:49 am (UTC) - Expand

(no subject)

From: [identity profile] kzn.livejournal.com - Date: 2013-03-21 11:59 am (UTC) - Expand

Date: 2013-03-21 10:49 am (UTC)
From: [identity profile] avnik.livejournal.com
можификация переменных зло
Неумение языка возвращать tuple тоже зло.

Date: 2013-03-21 10:50 am (UTC)
From: [identity profile] vp.livejournal.com
совершенно согласен. Тут tuple при возврате было бы самое то, что нужно.

Date: 2013-03-21 12:05 pm (UTC)
From: [identity profile] guamoka.livejournal.com
C т.з. требований на вашем уровне- вполне возможно. С т.з. метода парсинга строки в инт неподходящая строка- это ошибка. В жаве принято обрабатывать ошибки консистентно- исключениями.

Date: 2013-03-21 12:06 pm (UTC)
From: [identity profile] vp.livejournal.com
Ну мы тут обсуждаем "как было бы лучше" :)
Сферически - идеальные языки, с кортежами на выходе и т.п. Ням-ням.

Date: 2013-03-21 12:07 pm (UTC)
From: [identity profile] guamoka.livejournal.com
с коттеджами в ратомке на испанском побережье- это мысль.

Date: 2013-03-21 12:12 pm (UTC)
From: [identity profile] vp.livejournal.com
У нас в оперденях есть такой возвращаемый тип. Крайне полезен.

Date: 2013-03-22 07:54 am (UTC)
From: [identity profile] sil-e-nt.livejournal.com
Еще вот тут отмечусь. Вот сделали туплом аутпут, ок, облегчили себе жизнь и вместо исключения пользуем дефолтное значение.
Берет юзверь вашу прогу, вводит какую-нибудь шнягу, верную с его точки зрения (можно я не буду придумывать варианты?) А потом несколько дней ебется в поисках решения, хули получается совершенно другое значение на выходе?

Date: 2013-03-22 08:14 am (UTC)
From: [identity profile] vp.livejournal.com
А кто говорил о каких-то дефолтных значениях?
Если все не ок, то возвращается кортеж из булена об ошибке и кода ошибки. Если все ок, то возвращается тупл с буленом и с полученным значением.

Date: 2013-03-21 04:36 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Это не правильный метод, а одно из решений, и не думаю, что самое хорошее.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 17th, 2025 06:38 pm
Powered by Dreamwidth Studios