Идиома программирования для увеличения числа до значения

Часто я сталкиваюсь с ситуацией, когда мне нужно «зациклить» число. То есть, учитывая значение X, мне нужно увеличить его до точки, а затем вернуться к нулю. Обычно это приводит к довольно подробному коду с большим количеством «плюс 1». Есть ли для этого хороший однострочник или какая-нибудь другая хорошая идиома?

Пример (для простоты используется JS-карусель):

function cycle() {

    const $e = $('.a-carousel');
    const activeClass = 'active';

    var activeIndex = $e.find('.' + activeClass).removeClass(activeClass).index();
    if (activeIndex + 1 >= $e.children().length) {
        activeIndex = -1;
    }

    $e.children().eq(activeIndex + 1).addClass(activeClass);

}

person Calin Leafshade    schedule 22.11.2016    source источник


Ответы (2)


Как правило, циклический преемник значения k i в диапазоне k < sub> 0, ..., k n -1 определяется как

next (k i) = (k i - k 0 + 1) mod n + k 0

Например,

range = 3 ... 9
k0 = 3
n = 7

k    k-k0    k-k0+1    k-k0+1 mod n    k-k0+1 mod n + k0
------------------------------------------------------------
6     3        4           4            7
7     4        5           5            8
8     5        6           6            9
9     6        7           0            3
3     0        1           1            4
4     1        2           2            5
5     2        3           3            6
person chepner    schedule 22.11.2016

Я не знаю, есть ли для этого специальный термин, но ваш код более подробен, чем должен быть. Вы можете сделать это с одним приращением и одной if проверкой.

(в псевдокоде)

x = MinValue
Loop
    Increment x
    If x > MaxValue
        x = MinValue
    Do things with x
person Bradley Uffner    schedule 22.11.2016