java try parse integer
Mar. 21st, 2013 11:25 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А почему в java нету готовых методов, которые бы позволяли парсить числа, не кидая исключений?
Т.е. возвращали бы true+число, либо false, типа как int.TryParse в дотнете.
Т.е. возвращали бы true+число, либо false, типа как int.TryParse в дотнете.
no subject
Date: 2013-03-21 09:43 am (UTC)no subject
Date: 2013-03-21 09:46 am (UTC)no subject
Date: 2013-03-21 09:48 am (UTC)(defn parseIntDef
"convert string to int"
[str & [default]]
(try (Integer/parseInt str)
(catch Exception _ default)))
Но наличие таких функций в моей библиотеке меня огорчает :)
no subject
Date: 2013-03-21 11:20 am (UTC)no subject
Date: 2013-03-21 01:45 pm (UTC)no subject
Date: 2013-03-21 02:01 pm (UTC)no subject
Date: 2013-03-21 02:49 pm (UTC); java.lang.Long
(type (read-string "aaa1234"))
; clojure.lang.Symbol
(type (read-string "(print 21)"))
; clojure.lang.PersistentList
только хотел сказать, что всё красиво, но
(type (read-string "1234bbb"))
; NumberFormatException Invalid number: 1234bbb clojure.lang.LispReader.readNumber (LispReader.java:258)
no subject
Date: 2013-03-21 12:33 pm (UTC)no subject
Date: 2013-03-21 02:44 pm (UTC)за ловлю голого Exception нужно пальцы дверью зажимать. сначала на ногах, при рецидиве - на руках и вон из профессии :)
no subject
Date: 2013-03-21 03:11 pm (UTC)no subject
Date: 2013-03-21 03:52 pm (UTC)Эксепшн это дорогая штука для жаба машины. То что вы написали это, несмотря на корректную работу, обычная индусятина.
no subject
Date: 2013-03-22 06:58 am (UTC)no subject
Date: 2013-03-23 05:39 pm (UTC)Про сами эксепшны вопрос, скорее, академический. Вот пример, у вас пользователь вводит логин и пароль. Факт ввода неправильного пароля это эксепшн?
К вашему коду претензия другого плана. Что толку от вашего возвращения некого дефолта? Вам в месте вызова этой функции надо проставлять этот дефолт, обрабатывать потом результат, не пришёл ли дефолт. Не говоря о том, что в таком случае парсинг самого дефолта невозможен. Всё это в совокупности - индусятина. Лучше уж сразу в месте вызова ловить эксепшн и обрабатывать.