| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Foreach для Enumeration |
| Автор: Karadul 13.6.2012, 18:52 |
| foreach не работает? |
| Автор: Skipy 14.6.2012, 11:38 | ||
Для Enumeration? Ну проверьте. |
| Автор: priam220 14.6.2012, 13:55 | ||
| foreach тут как бы не нужен, почитать почему можно http://javarevisited.blogspot.com/2010/10/what-is-difference-between-enumeration.html. вкратце:
|
| Автор: Karadul 14.6.2012, 14:31 |
| Если я правильно помню, foreach требует Iterable, а не Iterator. |
| Автор: priam220 14.6.2012, 15:03 |
| Все правильно помните, осталось только глянуть что из себя представляет http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Iterable.html. |
| Автор: Karadul 14.6.2012, 15:28 |
| Но можно же кидать исключение на remove(), для кого foreach придумали-то? |
| Автор: priam220 14.6.2012, 15:47 |
| Почти уверен, что и такой подход оскорбил бы Вас не менее: что за хрень! в жава есть классы, имеющие паблик методы remove! но на попытку удалить там что то оно мне ругается! ай-ай! какие они там все балбесы, спросили бы у меня, я б им сказал как надо! |
| Автор: jk1 14.6.2012, 16:22 | ||||
Не такая уж и хрень. Если вспомнить доки на java.util.Iterator, то там операция remove() заявлена как optional, то есть она может не быть реализована и кидать UnsupportedOperationException:
Так что реализация Enumeration'ом интерфейса Iterable контракта не нарушает. |
| Автор: priam220 14.6.2012, 17:26 |
| Вынужден признать свою неправоту и принести свои извинения товарищам по цеху, за безосновательный пафос! И принять этот красивый подсрачник в награду. Тогда действительно, наблюдается избыточность, наверное Enumeration, существующий с 1.0 будет умирать. А все казалось таким красивым. |
| Автор: Pawl 14.6.2012, 18:49 |
А как сделать лучше напишете? |
| Автор: AntonSaburov 14.6.2012, 19:31 |
| А может попробовать самому поискать ответ ? |
| Автор: priam220 14.6.2012, 20:15 |
1. Думаю, лучше было бы сделать что то однозначное. 2. Я думаю, многие согласятся, что провайдить интерфейс, которого не должно быть согласно логической концепции объекта (например велосипеду метод startEngine() ) не совсем верно. Т.е. применительно к нашему вопросу UnmodifiableCollection<E> implements Collection<E> выглядит не совсем красиво, имхо. 3. Лучше - сложный оценочный фактор. У меня нет причин не доверять разработчикам системы, - возможно маленькие нестыковки в объектной модели языка, с лишком окупаются другими профитами. |
| Автор: Karadul 14.6.2012, 20:20 |
| Ситуация, когда прошло 7 с лишним лет, а некоторым авторам нинужен foreach, говорит о, как бы сказать, их отсталости. В питоне, например, вообще нет сишного for, только foreach. |
| Автор: jk1 15.6.2012, 09:31 | ||||||
| Karadul, а в чем собственно проблема? Можно же делать вот так:
Функционально будет полным эквивалентом foreach. Что же до синтаксического сахара, то пора бы понять, что в Java его практически нет. Если он для Вас так важен, то берите Scala и забудьте про Java как про страшный сон. Я уже молчу о том, что Enumeration встречается достаточно редко, можно годами писать код на Java и не знать о нем.
что порождает костыли в случае, когда нужно вызвать функцию четко определенное число раз или перебрать последовательные числа:
На этом дискуссию предлагаю закрыть, так как она давно ушла в оффтоп. |
| Автор: dorogoyIV 15.6.2012, 18:11 |
http://www.codingrus.ru/readarticle.php?article_id=647 |
| Автор: Karadul 15.6.2012, 20:40 |
| Я бы назвал тему "Почему в яве так не любят foreach и все, что младше 10 лет". И все-таки жалко, что у вас холиворов нету. |
| Автор: k0rvin 15.6.2012, 21:38 | ||
А http://forum.vingrad.ru/forum/holy-wars.html что? Но вообще джавовский foreach весьма убог, в CL loop (и iter из пакета iterate) намного круче. |
| Автор: Karadul 15.6.2012, 21:52 |
| О, действительно. А что такое CL? Убог/не убог, но уже лучше, чем ничего, меньше можно напортить (ошибки при копипасте вложенных циклов, когда забывают исправить переменную), не говоря о том, что foreach не требует индексации. Ну и выглядит лучше, чем ручной вызов итератора. |
| Автор: k0rvin 15.6.2012, 22:12 | ||||||||
Common Lisp
вот только такую фишку с его помощью не сделать:
Впрочем в CL loop этого тоже не сделать, но в C++, думаю, можно что-такое сотворить. Добавлено через 9 минут и 18 секунд И вот такую штуку не сделаешь:
а в CL loop сделаешь =) |
| Автор: Pawl 15.6.2012, 22:48 | ||
зато в java можно извратиться
|
| Автор: Karadul 15.6.2012, 23:07 |
Фу. Вы небось теми же руками потом на форуме пишете? Это map чтоли? Библиотекой наверняка можно, а встроенных средств ФП в яве нет. Не, фп в питоне очень приятное и не слишком тошнотное. Линку не юзал, но тоже с виду неплох + параллелизация искаропки. |
| Автор: k0rvin 17.6.2012, 20:39 | ||||||
Это мне любитель джавы говорит?
Нет, не map.
А при чем тут ФП? |
| Автор: Karadul 18.6.2012, 01:35 | ||||||
Ну любитель - не любитель, но пользуюсь. А какое лисп имеет отношение к яве в частности и к промышленной разработке вообще? Он за пределами университетов кому-то нужен? А что? Уж очень похоже
Там не вложенные for. |
| Автор: k0rvin 18.6.2012, 06:29 | ||
Common Lisp - вполне себе прямое. http://www.lispworks.com/success-stories/index.html http://www.franz.com/success/ Но ты отвлекаешься. |
| Автор: k0rvin 18.6.2012, 08:25 | ||||
Зачем ты пропустил
? =) Но это конечно изврат. |
| Автор: Karadul 18.6.2012, 15:00 | ||||||
От чего? Мы о ФП говорили? Так а что из себя представляют примеры, если не map+reduce? Добавлено @ 15:05
Это типа как много на нем написано? А на яве этот список тебе браузер завесит
Вот уж действительно изврат - из-за одного значения foreach вызывать и потом останавливать, так еще и с O(n**2). На govnokod.ru надо запостить. |
| Автор: k0rvin 18.6.2012, 15:53 | ||||||
От циклов foreach.
Простые циклы.
Это типа его используют в "энтерпрайзе", а мерятся количеством как-то не солидно. |
| Автор: Karadul 18.6.2012, 17:38 | ||||||||
| И чего в них не хватает? Параллельной итерации по двум последовательностям? В питоне это решается так
Т.е. берется функция zip, которая возвращает выполнят на каждой последовательности next() и возвращает кортеж со значениями, потом этот кортеж распаковывается в x,y. Скорость такой операции жавоёидов может не устроить. А как часто такое бывает надо? Ну в принципе можно бы было и сделать, но с консервативностью явы вряд ли, мож в дотнете бы появилось.
Это уже какая-то полунизкоуровневая хрень. Для таких целей лучше подходит map или уже сишный for цикл. Итерация через foreach с возможностью изменения элемента не всегда возможно, т.к. итерация может идти через последовательности, которые изменить нельзя в принципе (например, поток байтов из сокета или файла, открытого для чтения). Хотя для массивов, возможно бы, и пригодилась. В сисярпе есть ref, может там что-то работает. А вообще работа с итераторами хорошо получается через ФП. Может, в сисярпе linq решает часть этих проблем.
А яву где? А количеством людей, пишущих на нем, солиднее? |
| Автор: Karadul 18.6.2012, 22:30 |
Модератор: Сообщение скрыто. |
| Автор: AntonSaburov 18.6.2012, 23:20 |
| Тему закрываю - она уже ушла непонятно куда. |
| Автор: AntonSaburov 20.6.2012, 15:49 |
| Возобновляем в разделе холиваров. |
| Автор: k0rvin 20.6.2012, 16:44 | ||||
Угу, вот так и получается, что прожорливость софта идет в ногу с повышением производительности железа. Где-то на stackoverflow вроде уже было сравнение производительности C#/.NET foreach и for. Не в пользу foreach. Добавлено через 2 минуты и 8 секунд
Ты спрашивал, использутеся ли CL где-то за пределами университетов (кстати, там он как раз не используется), я тебе ответил с примерами. Никаким количеством не солидней. |
| Автор: Karadul 24.7.2012, 06:01 | ||
Батхертнутые модерашки мне бан на три недели выписали. Когда им уже руки поотпиливают.
Понятия не имею, зачем я это написал. Наверно, как пример, как это можно сделать. В принципе, можно конечно же сделать foreach и с несколькими переменными, заодно решив, что делать с последовательностями разной длины. Но почему-то этого не сделали. |