metaclass: (дзедline)
metaclass ([personal profile] metaclass) wrote2013-03-21 11:25 am
Entry tags:

java try parse integer

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

[identity profile] kzn.livejournal.com 2013-03-21 10:32 am (UTC)(link)
Скорее вопрос - "где" :)

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

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

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

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

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

[identity profile] kzn.livejournal.com 2013-03-21 10:39 am (UTC)(link)
Ну ок. А какое труъ исключение?

[identity profile] vp.livejournal.com 2013-03-21 10:42 am (UTC)(link)
Тру исключение то, которое спроектировано для выхода на определенный уровень обработки наверх.
То есть правильно было бы иметь по 2 версии функций, с исключениями и без них.
Просто использование исключений вместо кодов возврата приводит к тому, что 50 строчек линейного рабочего кода, например, для работы с файлом, превращаются в гору try блоков, которые могут быть не нужны.

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

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

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

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

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

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

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

[identity profile] kzn.livejournal.com 2013-03-21 10:56 am (UTC)(link)
Ну почему же? Что-то пошло не так при обработке файла? IOException и обрабатывать его на нужном уровне. Код вполне линейным получается.

В жабе конечно есть Checked Exceptions, но при правильном использовании вполне полезны.

[identity profile] vp.livejournal.com 2013-03-21 10:58 am (UTC)(link)
правильнее, мне кажется, было бы все-таки поиметь на месте код возврата и если нужно - бросить исключение. Потому что чаще это при таких операциях не сильно нужно.
Сделать из кода возврата исключение пишется лаконичнее, чем сделать код возврата из исключения :)

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 11:20 am (UTC)(link)
Ну а как иначе жить

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

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

[identity profile] henu3detb.livejournal.com 2013-03-21 11:45 am (UTC)(link)
При этом комментатор выше (которому посмел ответить volodimir_k) конечно же привнес много полезной и нужной информации в дискуссию.

[identity profile] denisioru.livejournal.com 2013-03-21 11:47 am (UTC)(link)
а что, об этом нельзя говорить вслух?

[identity profile] henu3detb.livejournal.com 2013-03-21 11:49 am (UTC)(link)
Про острое желание я ничего не говорил. А про случайные ситуации - говорил. И от таких ситуаций взрослые люди стараются себя страховать. Предохранители делают на приборах или эксепшны в коде. От всех несчастных случаев это не застрахует, но это не повод расслабляться и рассказывать про отстреленную ногу, случайность, карму, фазы луны и прочую ересь.

[identity profile] guamoka.livejournal.com 2013-03-21 11:54 am (UTC)(link)
и еще сервер в инете поднять. и чтобы по restу запрос слался. с ssl, sso, понятное дело, и лоад балансом с отказоустойчивостью.

[identity profile] bydlorus.livejournal.com 2013-03-21 11:56 am (UTC)(link)
И кешировать обязательно. Зачем каждый раз вычислять?

[identity profile] henu3detb.livejournal.com 2013-03-21 11:58 am (UTC)(link)
Да ладно, две строки кода вас не должны вгонять в депрессию. Можете как какой-нибудь программист из коворкинга сделать свой проект на гитхабе с оберткой над Integer.parseInt из двух строк. Это сейчас в тренде.

[identity profile] kzn.livejournal.com 2013-03-21 11:59 am (UTC)(link)
Ну так и говорю, что то, что parseInt() кидает исключение - вполне нормально.

На грабли всегда наступить можно.

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

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

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

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

Page 3 of 5