Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Foreach для Enumeration 
:(
    Опции темы
dorogoyIV
Дата 15.6.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: нет
Всего: 46



Цитата(AntonSaburov @  14.6.2012,  19:31 Найти цитируемый пост)
А может попробовать самому поискать ответ ?

http://www.codingrus.ru/readarticle.php?article_id=647
PM MAIL   Вверх
Karadul
Дата 15.6.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Я бы назвал тему "Почему в яве так не любят foreach и все, что младше 10 лет". 
И все-таки жалко, что у вас холиворов нету.
PM MAIL   Вверх
k0rvin
Дата 15.6.2012, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 15.6.2012,  20:40)
Я бы назвал тему "Почему в яве так не любят foreach и все, что младше 10 лет". 
И все-таки жалко, что у вас холиворов нету.

А это что?

Но вообще джавовский foreach весьма убог, в CL loop (и iter из пакета iterate) намного круче.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Karadul
Дата 15.6.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



О, действительно.
А что такое CL?

Убог/не убог, но уже лучше, чем ничего, меньше можно напортить (ошибки при копипасте вложенных циклов, когда забывают исправить переменную), не говоря о том, что foreach не требует индексации. Ну и выглядит лучше, чем ручной вызов итератора.
PM MAIL   Вверх
k0rvin
Дата 15.6.2012, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 15.6.2012,  21:52)
А что такое CL?

Common Lisp

Цитата(Karadul @ 15.6.2012,  21:52)
Убог/не убог, но уже лучше, чем ничего, меньше можно напортить (ошибки при копипасте вложенных циклов, когда забывают исправить переменную), не говоря о том, что foreach не требует индексации. Ну и выглядит лучше, чем ручной вызов итератора.

вот только такую фишку с его помощью не сделать:
Код

int[] xs = new int[] { 1, 2, 3, 4, 5 };
int[] ys = new int[xs.length];
for (int x : xs, int &y : ys) { // & означает ссылку
  y = x*x;
}
// ys = { 1, 4, 9, 16, 25 }


Впрочем в CL loop этого тоже не сделать, но в C++, думаю, можно что-такое сотворить.

Добавлено через 9 минут и 18 секунд
И вот такую штуку не сделаешь:
Код

int[] xs = new int[] { 1, 2, 3 };
int[] ys = new int[] { 4, 5, 6 };
int sum = 0;
for (int x : xs, int y : ys) {
  sum += x + y;
}

а в CL loop сделаешь =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Pawl
Дата 15.6.2012, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: нет
Всего: 28



Цитата(k0rvin @  15.6.2012,  22:12 Найти цитируемый пост)
а в CL loop сделаешь =)

зато в java можно извратиться smile:
Код

import static java.util.Arrays.copyOfRange;

public class ForEachTest {
    public static void main(String[] args) {
        int[] xs = new int[] { 1, 2, 3 };
        int[] ys = new int[] { 4, 5, 6 };
        int sum = 0;
        for (int x : xs) {            
            for (int y : ys) {
                sum += x + y;
                break;
            }
            ys = copyOfRange(ys, 1, ys.length);
        }
        System.out.println(sum);
    }
}


Это сообщение отредактировал(а) Pawl - 15.6.2012, 22:51


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Karadul
Дата 15.6.2012, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(k0rvin @  15.6.2012,  22:12 Найти цитируемый пост)
Цитата(Karadul @ 15.6.2012,  21:52)
А что такое CL?

Common Lisp

Фу. Вы небось теми же руками потом на форуме пишете?

Цитата(k0rvin @  15.6.2012,  22:12 Найти цитируемый пост)
вот только такую фишку с его помощью не сделать:

Это map чтоли? Библиотекой наверняка можно, а встроенных средств ФП в яве нет.

Не, фп в питоне очень приятное и не слишком тошнотное. Линку не юзал, но тоже с виду неплох + параллелизация искаропки.
PM MAIL   Вверх
k0rvin
Дата 17.6.2012, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 15.6.2012,  23:07)
Фу. Вы небось теми же руками потом на форуме пишете?

Это мне любитель джавы говорит?  smile 

Цитата(Karadul @ 15.6.2012,  23:07)
Это map чтоли? Библиотекой наверняка можно

Нет, не map.

Цитата(Karadul @ 15.6.2012,  23:07)
а встроенных средств ФП в яве нет.

А при чем тут ФП?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Karadul
Дата 18.6.2012, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(k0rvin @  17.6.2012,  20:39 Найти цитируемый пост)
Цитата(Karadul @ 15.6.2012,  23:07)
Фу. Вы небось теми же руками потом на форуме пишете?

Это мне любитель джавы говорит?  smile 

Ну любитель - не любитель, но пользуюсь. А какое лисп имеет отношение к яве в частности и к промышленной разработке вообще? Он за пределами университетов кому-то нужен?


Цитата(k0rvin @  17.6.2012,  20:39 Найти цитируемый пост)
Нет, не map.

А что? Уж очень похоже

Код

ys = map(lambda x: x*x, xs)


Код

sum = reduce(lambda x,y: x+y, map(lambda x, y: x+y, xs, ys))


Цитата(Pawl @  15.6.2012,  22:48 Найти цитируемый пост)
Код

for (int x : xs) {            
            for (int y : ys) {
                sum += x + y;
                break;
            }

Там не вложенные for.

PM MAIL   Вверх
k0rvin
Дата 18.6.2012, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 18.6.2012,  01:35)
Ну любитель - не любитель, но пользуюсь. А какое лисп имеет отношение к яве в частности и к промышленной разработке вообще?

Common Lisp - вполне себе прямое.

http://www.lispworks.com/success-stories/index.html

http://www.franz.com/success/

Но ты отвлекаешься.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
k0rvin
Дата 18.6.2012, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 18.6.2012,  01:35)
Цитата(Pawl @  15.6.2012,  22:48 Найти цитируемый пост)
Код

for (int x : xs) {
    for (int y : ys) {
        sum += x + y;
        break;
    }
}

Там не вложенные for.

Зачем ты пропустил
Код

ys = copyOfRange(ys, 1, ys.length);

? =)

Но это конечно изврат.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Karadul
Дата 18.6.2012, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(k0rvin @  18.6.2012,  06:29 Найти цитируемый пост)
Но ты отвлекаешься. 

От чего? Мы о ФП говорили?

Так а что из себя представляют примеры, если не map+reduce?

Добавлено @ 15:05
Цитата(k0rvin @  18.6.2012,  06:29 Найти цитируемый пост)
Цитата(Karadul @ 18.6.2012,  01:35)
Ну любитель - не любитель, но пользуюсь. А какое лисп имеет отношение к яве в частности и к промышленной разработке вообще?

Common Lisp - вполне себе прямое.

http://www.lispworks.com/success-stories/index.html

http://www.franz.com/success/

Это типа как много на нем написано? А на яве этот список тебе браузер завесит smile


Цитата(Pawl @  15.6.2012,  22:48 Найти цитируемый пост)
Код

for (int y : ys) {
        sum += x + y;
        break;
}
ys = copyOfRange(ys, 1, ys.length);


Вот уж действительно изврат - из-за одного значения foreach вызывать и потом останавливать, так еще и с O(n**2). На govnokod.ru надо запостить.

Это сообщение отредактировал(а) Karadul - 18.6.2012, 15:11
PM MAIL   Вверх
k0rvin
Дата 18.6.2012, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Karadul @ 18.6.2012,  15:00)
От чего?

От циклов foreach.

Цитата(Karadul @ 18.6.2012,  15:00)
Так а что из себя представляют примеры, если не map+reduce?

Простые циклы.

Цитата(Karadul @ 18.6.2012,  15:00)
Это типа как много на нем написано? А на яве этот список тебе браузер завесит smile

Это типа его используют в "энтерпрайзе", а мерятся количеством как-то не солидно.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Karadul
Дата 18.6.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



И чего в них не хватает?
Параллельной итерации по двум последовательностям? В питоне это решается так
Код

for x, y in zip(xs, ys):

Т.е. берется функция zip, которая возвращает выполнят на каждой последовательности next() и возвращает кортеж со значениями, потом этот кортеж распаковывается в x,y. Скорость такой операции жавоёидов может не устроить.
А как часто такое бывает надо? Ну в принципе можно бы было и сделать, но с консервативностью явы вряд ли, мож в дотнете бы появилось.

Цитата(k0rvin @  15.6.2012,  22:12 Найти цитируемый пост)

Код

int[] xs = new int[] { 1, 2, 3, 4, 5 };
int[] ys = new int[xs.length];
for (int x : xs, int &y : ys) { // & означает ссылку
  y = x*x;
}
// ys = { 1, 4, 9, 16, 25 }

Это уже какая-то полунизкоуровневая хрень. Для таких целей лучше подходит map или уже сишный for цикл.
Итерация через foreach с возможностью изменения элемента не всегда возможно, т.к. итерация может идти через последовательности, которые изменить нельзя в принципе (например, поток байтов из сокета или файла, открытого для чтения). Хотя для массивов, возможно бы, и пригодилась.
В сисярпе есть ref, может там что-то работает.

А вообще работа с итераторами хорошо получается через ФП. Может, в сисярпе linq решает часть этих проблем.

Цитата(k0rvin @  18.6.2012,  15:53 Найти цитируемый пост)
Это типа его используют в "энтерпрайзе", а мерятся количеством как-то не солидно. 

А яву где?
А количеством людей, пишущих на нем, солиднее?




Это сообщение отредактировал(а) Karadul - 18.6.2012, 17:39
PM MAIL   Вверх
Karadul
Дата 18.6.2012, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.