Este é um conceito super simples, mas muitas vezes esquecido. Exemplo de conjunto de problemas: você tem um jogo com dois ou mais jogadores e currentPlayer
mantém o estado como um int. Normalmente, quando é hora de ir para o próximo jogador currentPlayer + 1
, você faria até chegar ao último jogador e obter um índice de erro fora dos limites ( currentPlayer => 3
quando há apenas dois jogadores). Normalmente, uma condição para verificar fora dos limites é fazer:
currentPlayer++;
if (currentPlayer >= numerOfPlayers) {
currentPlayer = 0;
}
No entanto, existe uma maneira mais fácil com o módulo. Uma vez que a matemática é nossa amiga, um módulo converterá seu fora dos limites em uma função rotativa. Este é frequentemente o caso para determinar valores pares ímpares com um contador de incremento:
var i, isEven, results = [];
for (i = 0; i < 20; i++) {
isEven = (i % 2) === 0;
results.push(isEven);
}
Se você reatribuir o contador ao resultado, ele está reiniciando o contador. Isso é equivalente ao primeiro exemplo:
currentPlayer = (currentPlayer + 1) % numberOfPlayers;
// Or for golf competitions:
c = ++c % n;
Usando essa técnica e o propósito de ter um int para um índice de matriz, o seguinte código:
function playTurn(domElTile) {
if (currentPlayer === 0) {
domElTile.className = 'white';
currentPlayer = 1;
} else {
domElTile.className = 'black';
currentPlayer = 0;
}
}
Pode ser simplificado para:
function playTurn(domElTile) {
domElTile.className = ['white', 'black'][currentPlayer];
currentPlayer = (currentPlayer + 1) % 2;
}