- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
// same as Callable but without exception
public interface Executable<T>
{
public T call();
}
/*В другом классе: методы для конверсии туда-сюда */
public Callable<T> toCallable(final Executable<T> ex){
return new Callable<T>(){
public T call() throws Exception{
return ex.call();
}
};
}
public Executable<T> toExecutable(final Callable<T> c)
{
return new Executable<T>(){
public T call(){
try{
return c.call();
}catch (Exception e){
throw new RuntimeException(e);
}
}
};
}
bormand 11.06.2012 19:29 # +2
Зачем???
bormand 11.06.2012 19:31 # 0
Завернули в RuntimeException, чтобы throws Exception не писать?
3.14159265 11.06.2012 19:34 # 0
3.14159265 11.06.2012 19:32 # +1
bormand 11.06.2012 19:39 # +1
Чтобы выстрелить себе в ногу...
Lure Of Chaos 11.06.2012 21:53 # 0
да, они показываются в сигнатуре, и их обработка обязательна.
но действие рождает противодействие - они тупо оборачиваются в catch(Exception e){e.printStackTace();} или, в лучшем случае, catch(Exception e){throw new RuntimeException(e);}. Наиболее сознательные пишут catch(Exception e){logger.log(e);}
но во всех трех случаях происходит совершенно не то, что изначально задумывалось, а именно - борьба, но никак не обработка по каждому исключению. т.е. "правильно" было бы так:
catch(FirstException e) {
//действия, специфичные для FirstException
}
catch(SecondException e) {
//действия, специфичные для SecondException
}
но, как несложно заметить, код распухает и становится нечитаемым.
лучше бы все исключения были непроверяемыми - достаточно было бы javadoc документации по ним.
з.ы. на закуску оставлю пост одного неглупого человека, исполненный ненависти к проверяемым исключениям:
з.з.ы. ну и чтобы исчерпать дискуссию (либо поднять древний холивар), есть еще одна достойная альтернатива исключениям:
bormand 12.06.2012 06:19 # 0
В с++ так и поступили и, видимо, поступили правильно.
> Pattern_matching
Вы имеете в виду что-то типа хаскелевских Maybe a и Either error result? Ну да, удобная вещь, особенно в сочетании с соотв. монадой. Или есть еще какое-то применение pattern matching'а для обработки исключений?
Lure Of Chaos 12.06.2012 07:39 # +1
krypt 12.06.2012 13:02 # +3
Now you have a ProblemFactory.
На jav'е не пишу, но наблюдая код человека, который на ней писал - складывается впечатление, что утверждение верно :)
Lure Of Chaos 12.06.2012 17:25 # +1
так вот, что я могу сказать: вырабатывается стойкая "привязанность" к языку, т.е. на другом языке начинаешь писать код в том же стиле. после джавы, например ФП, кажется очень противоестественным.
насчет паттернов: да, они там есть, и очень часто язык, а особенно фреймворки, заставляют ими пользоваться. и тут два пути:
если ты осилил паттерны - ты умело ими пользуешься и они тебе помогают
если ты пишешь вроде бы паттерны, но неправильные или не в нужном месте, они начинают жутко мешать.
впрочем, достаточно освоить несколько и их комбинировать. тут уже, подобно разговорному языку, надо чувствовать джаву - где какое решение будет лучшим, а где лучше не стоит в данной ситуации
и факторов много:
- фреймворк
- необходимость такой функциональности (ограничение снизу)
- достаточность функциональности (ограничение сверху) т.е. будет ли востребована, или только мешать?
- производительность
- скорость реализации
krypt 12.06.2012 17:57 # +1
По крайней мере в моих глазах, бывшего C#-разработчика.
Lure Of Chaos 12.06.2012 18:03 # +1
у нас в проекте используются Spring+Stripes, JPA\Hibernate.
Stripes - ну ничего такой, хотя и местами хлопотный.
все равно лучше Tapestry 5 я ничего не видел.
geust 12.06.2012 18:11 # +2
паттерны существуют для того, чтобы сократить время на обучение мартышек
bormand 12.06.2012 18:18 # +2
geust 12.06.2012 18:24 # +1
3.14159265 12.06.2012 18:32 # +4
"Хоть говно, зато полный рот."
geust 12.06.2012 18:57 # +2
Проблема в том, что мартышка, познавшая паттерны уже не хочет стричь газоны и класть асфальт, а начинает считать себя программистом.
bormand 12.06.2012 19:02 # +2
geust 12.06.2012 19:16 # +2
3.14159265 12.06.2012 20:15 # +2
>А c# принял эстафету у Делфи.
Папашка ж в мелкософт ушел.
>Таки в большей мере у VB
А команда у MS осталась VB-шная.
А тут еще и Сан забрала лицензию на жабу.
Ну не увольнять же их?!
Lure Of Chaos 13.06.2012 01:05 # 0
bormand 12.06.2012 18:39 # 0
Lure Of Chaos 12.06.2012 18:42 # +2
оксюморон
bormand 12.06.2012 18:55 # +7
А у людей она слыхала,
Что можно с кодом много не тупить:
Лишь стоит паттерны вкурить.
И их с полдюжины себе она достала;
Вертит кусками кода так и сяк:
То к классу их прижмет, то их на list нанижет,
То их понюхает, то их полижет;
Но паттерны не действуют никак.
'Тьфу пропасть!' говорит она: 'и тот дурак,
Кто слушает людских всех врак:
Про паттерны мне лишь налгали;
А проку на́-волос нет в них'.
Мартышка тут с досады и с печали
Шифт-делом так хватила их,
Что только брызги засверкали.
----
К несчастью, то ж бывает у людей:
Как ни полезна вещь,- цены не зная ей,
Невежда про нее свой толк всё к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
tir 12.06.2012 20:30 # 0
Lure Of Chaos 13.06.2012 00:55 # 0
я даже помню свой "хелловорлд", это был апплет, анимированная плазма 256х256 (на синусо-косинусах). не помню, где он описывался, но по картинке вот нашел вроде бы тот: http://phpbb3.ru/?p=1950
книга, по которой я изучал (чуть позже) джаву, была "JAVA 2. В подлиннике. Наиболее полное руководство", авторы П. Ноутон, Г.Шилдт (да, я нашел, как она называлась!). до сих пор ярко помню эти апплеты, billboard.java и scrabblet.java, где Ноутон хвастался, как впечатлил публику, сделав эти апплеты (наплевав на ООП в общем и инкапсуляцию в частности) мгновенно загружавшимися, без мерцаний серого квадрата.
вот такие воспоминания о моих первых шагах на джаве...
tir 13.06.2012 07:30 # 0
geust 13.06.2012 09:12 # +4
bormand 13.06.2012 09:48 # 0
3.14159265 13.06.2012 17:45 # 0
Хотя это конечно лучше, чем [code], которые мой букмарклет не хавает.
Lure Of Chaos 13.06.2012 23:13 # +2
Lure Of Chaos 13.06.2012 01:01 # 0
> Сколько же вам лет? =)
я родился в декабре 1984, т.е. на момент этого комментария мне 27
правда, выгляжу намного моложе, даже пиво и сигареты без предъявления водительских прав (там личный код с датой рождения) не дают. = (
tir 13.06.2012 07:30 # −4
Если честно, то по вашим комментам складывается впечатление, что вы года на 4 моложе
Lure Of Chaos 13.06.2012 09:05 # 0
tir 13.06.2012 09:40 # 0
tir 13.06.2012 14:02 # +1
все что я имел ввиду: вы просто иногда высказываете суждения в резкой, безапеляционной форме, часто с небольшим налетом фамильярности, что обычно свойственно для людей более молодого возраста. Людей, которые "кодят" 2-3 года, но уже считают, что все на свете знают и видят мир таким, какой он есть на самом деле.
Т. о. моя фраза отражала мое восприятие товарища Lure Of Chaos и ни в коей мере не была попыткой дать какую-либо характеристику.
Как говорится: ничего личного =)
roman-kashitsyn 13.06.2012 14:57 # +4
bormand 13.06.2012 14:58 # +1
roman-kashitsyn 13.06.2012 15:06 # +3
bormand 13.06.2012 15:20 # 0
3.14159265 13.06.2012 15:35 # +2
Как и #Goomno кстати.
bormand 13.06.2012 15:45 # +2
vistefan 13.06.2012 16:33 # +1
geust 13.06.2012 16:45 # −2
bormand 13.06.2012 16:48 # +1
@ - права оператора в IRC :)
P.S. Или вы не мне? Из-за линеаризации не видно кому адресован коммент.
tir 13.06.2012 15:27 # −1
TarasB 13.06.2012 19:43 # +3
bormand 13.06.2012 20:26 # +1
Lure Of Chaos 13.06.2012 23:14 # +3
Lure Of Chaos 13.06.2012 23:03 # 0
во-первых: если осторожничать, то вас сочтут неуверенным в себе, а, следовательно, неправым. безапелляционная форма, с одной стороны, дает шанс мнению быть услышанным, а с другой - оспоренным.
во-вторых: после каждой моей фразы нужно мысленно ставить "имхо" - поставленное явно, оно сразу натирает глаза. имхо.
> фамильярности
просто воспринимайте это как юмор и доброжелательность. в силу некоторых обстоятельств (кроме того, что я затрудняюсь с контролем своего стиля общения) я вполне считаю это допустимым для себя.
> все на свете знают и видят мир таким, какой он есть на самом деле.
в силу моего стойкого убеждения, что истина не является единой и абсолютной величиной, я позволяю себе считать мое мнение истинным относительно меня, и выражать его, как абсолютную истину - что совершенно не делает его истинным в системе отсчета любой другой личности.
все равно, я вам при всем моем желании ничего не докажу, и вы меня точно так же не переубедите. можете попробовать наращивать свой авторитет в моих глазах, и тогда я, быть может, в чем-то соглашусь с вами.
однако, поскольку я в ближайшие ~100 лет живу на Земле, то Солнце вращается вокруг Земли.
> не была попыткой дать какую-либо характеристику
не трудитесь, ваше мнение столь же субъективно, что вы можете даже прямо оскорблять меня, и это ничуть меня не заденет. в моей вселенной я резко и безапелляционно лучший.
спасибо за внимание.
tir 14.06.2012 07:17 # 0
я никогда никому ничего не доказываю, я всего лишь иногда предлагаю посмотреть на вещи с другой стороны, не более того.
TarasB 13.06.2012 23:10 # +1
tir 14.06.2012 07:24 # 0
Дискуссия - это хорошо, это правильно, но только пока она не превращается в навязывание своей точки зрения.
bormand 14.06.2012 07:35 # +1
Но согласен, использовать ее нужно не всегда и не везде.
rat4 14.06.2012 08:32 # 0
3.14159265 12.06.2012 14:00 # +3
>Now you have a ProblemFactory.
Лол, надо им написать предупреждение: длительное использование может вызывать паттернизм головного мозга.
Lure Of Chaos 12.06.2012 17:13 # 0
bormand 12.06.2012 17:17 # +1
Lure Of Chaos 12.06.2012 17:20 # +2
апаттернизм, если я правильно понимаю, это полное отсутствие паттернов, их избегание
а анти - это повсеместное применение антипаттернов
krypt 12.06.2012 18:00 # +1
Lure Of Chaos 12.06.2012 18:01 # 0
guest 22.06.2012 17:23 # +4
Lure Of Chaos 23.06.2012 00:25 # +1
TarasB 11.06.2012 19:29 # +1
3.14159265 11.06.2012 19:42 # 0
Чтобы избежать checked exceptions сделан новый интерфейс - суть, константная-функция.
Callable же часть стандартной либы, и ясное дело много всякого завязано на него. Ну и чтоб конвертировать одну интерфейс в другой написаны такие вот "паттернобертки".
Насколько я понял достаточно было отнаследовать стандартный интерфейс:
И никакий конверсии не надо (по крайней мере toCallable, точно).
guest 22.06.2012 17:26 # 0
3.14159265 22.06.2012 17:31 # 0
Более того, есть спец. хак - можно выбросить checked исключение, там где его совсем не ждали.
>такой код успешно работает.
потому что RuntimeException наследник Exception.
Потому T call(); эквивалентно T call() throws RuntimeException;
guest 22.06.2012 18:01 # 0
А, ну теперь понятно, почему иерархия исключений в Java такая запутанная. Пытались семантику языка Java скрестить с семантикой виртуальной машины. Получился выкидыш.
3.14159265 22.06.2012 18:13 # +3
Зато смотрите как я умею:
http://ideone.com/8tgP8
Lure Of Chaos 23.06.2012 00:27 # 0
roman-kashitsyn 23.06.2012 00:28 # 0
3.14159265 11.06.2012 19:48 # 0
Ищите отличия!
Pedofil 11.06.2012 21:32 # −11
Lure Of Chaos 11.06.2012 21:55 # +1
Pedofil 11.06.2012 21:57 # −9
Lure Of Chaos 11.06.2012 22:04 # +2
rat4 13.06.2012 10:13 # +3
eth0 13.06.2012 12:46 # +2
Lure Of Chaos 13.06.2012 23:11 # 0
Pedofil 11.06.2012 19:42 # −11
geust 13.06.2012 16:54 # −2
> это действительно из IRC.
Рассмотрите свою гипотезу на предмет внутренних проиворечий и увидите, что ухо не вписывается.
Lure Of Chaos 13.06.2012 23:12 # +2