2016-11-22 1 views
0

Часто я сталкиваюсь с ситуацией, когда мне нужно «закодировать» число. То есть, учитывая значение 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); 

} 

ответ

1

В общем, циклического преемника от значения к я в диапазоне к , ..., kn -1 определяется как

следующих (кя) = (кя - к + 1) по модулю п + к

Например,

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 
0

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

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

x = MinValue 
Loop 
    Increment x 
    If x > MaxValue 
     x = MinValue 
    Do things with x