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] bydlorus.livejournal.com 2013-03-21 09:25 am (UTC)(link)
In modern machines, accessing RAM is really slow (compared to anything the CPU does), which means applications that use the caches as much as possible (which is easier when less memory is used) can be up to a hundred times faster than those that don't. And there are many ways in which Java uses more memory than C++.

Тесты, гоняющие цифры, не возбуждают.

[identity profile] bydlorus.livejournal.com 2013-03-21 09:26 am (UTC)(link)
Сейчас доделаю другую задачу и отвечу, please wait...

[identity profile] artureg.livejournal.com 2013-03-21 09:28 am (UTC)(link)
М, почему оно ещё не забанено, оно же личинка глазова

[identity profile] enternet.livejournal.com 2013-03-21 09:33 am (UTC)(link)
Утютю ) Говорю что знаю, т.к. писал несколько лет. Получившийся продукт многое говорит о Гослинге, но вам незачем включать мозг. Вы же оцениваете по имени а не по результату.

[identity profile] ivan sopov (from livejournal.com) 2013-03-21 09:37 am (UTC)(link)
com.google.common.primitives.Ints.tryParse

[identity profile] denisioru.livejournal.com 2013-03-21 09:38 am (UTC)(link)
ты упртый!

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

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

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 09:43 am (UTC)(link)
  public static int getInteger(String value, int def) {
    try {
      return Integer.parseInt(value);
    } catch (Exception e) {
      return def;
    }
  }
Edited 2013-03-21 09:45 (UTC)

[identity profile] kosiakk.livejournal.com 2013-03-21 09:43 am (UTC)(link)
Ты ещё скажи что на NodeJS только упоротые наркоманы пишут!

[identity profile] metaclass.livejournal.com 2013-03-21 09:44 am (UTC)(link)
Чтобы были альтернативные мнения :)

[identity profile] artureg.livejournal.com 2013-03-21 09:46 am (UTC)(link)
пизда пизда пизда

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

[identity profile] metaclass.livejournal.com 2013-03-21 09:48 am (UTC)(link)
да,
(defn parseIntDef
"convert string to int"
[str & [default]]
(try (Integer/parseInt str)
(catch Exception _ default)))

Но наличие таких функций в моей библиотеке меня огорчает :)

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

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

[identity profile] stop-nonsense.livejournal.com 2013-03-21 10:09 am (UTC)(link)
С радостью посмотрю на более другие тесты. Линкуйте.

[identity profile] metaclass.livejournal.com 2013-03-21 10:21 am (UTC)(link)
Это можно, но само выполнение подобных действий у меня вызывает ощущение, что я вернулся в 90е годы и занимаюсь изобретением велосипедов :)

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

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

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

[identity profile] kzn.livejournal.com 2013-03-21 10:25 am (UTC)(link)
Да ладно. Java вполне может быть быстрой.

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

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

[identity profile] artureg.livejournal.com 2013-03-21 10:29 am (UTC)(link)
но кому это надо?

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

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

Page 2 of 5