Как стать автором
Обновить

Комментарии 9

Можно ли упростить Revolver так, чтобы кода стало поменьше, а смысла — побольше?
Можно.

var colors = ['red', 'green', 'blue'];

for (var i = 0; i < units.length; i++) {
units[i].color = colors[i % 3];
}
конечно вы имелли ввиду
... = colors[i % units.length]

? ;)
Может всё-таки:
... = colors[i % colors.length]
?
нет.
Пожалуй, цикл в примере я выбрал не очень удачно.

Представьте ситуацию, когда цикл неявный, и переменной i нет.
Или другую: нужно раскрасить не все юниты, а только наземные.

var next_color = revolver(['red', 'green', 'blue']);

for (var i = 0; i < units.length; i += 1) {
    if (units[i].type === LAND_UNIT) {
        units[i].color = next_color();
    }
}
:)
var colors = ['red', 'green', 'blue'];
var k = 0;

for (var i = 0; i < units.length; i++) {
if (units[i].type === LAND_UNIT) {
units[i].color = colors[k++ % 3];
}
}
разметка кода не сработала, пардон…
а слабо дочитать статью в википедии до определения генераторов и не пороть глупости? ru.wikipedia.org/wiki/%C8%F2%E5%F0%E0%F2%EE%F0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)#.D0.93.D0.B5.D0.BD.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D1.8B
Вот тут
"Генератор выглядит как функция, которая помнит, в каком месте был предыдущий return, и при следующем вызове возобновляет работу с прерванного места"
по-моему закралась ошибка, должно быть «Итератор выглядит как функция, которая помнит...»
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории