ME AJUDA [Dúvida] - 🟠🟠 Será que isso existe?🟠
Eu estou criando um timer, e eu não sabia como criar então eu fui procurar no yt e encontrei um vídeo q no vídeo declararou uma variavél da seguinte maneira:
var timer = duration, minutes, seconds
Puts mano eu nunca vi isso, por favor alguém sana a minha dúvida. Code da função completa:
function startTimer(duration, display) {
var timer = duration, minutes, seconds;
setInterval(function () {
minutes = parseInt(timer / 60, 10);
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if (--timer < 0) {
timer = duration;
}
}, 1000);
}
Na verdade foram declaradas três variáveis: timer
, minutes
e seconds
.
A vírgula está servindo para separar as declarações. E cada declaração pode ou não inicializar a respectiva variável com algum valor. Isso está bem descrito na documentação.
Ou seja, timer
, além de ser declarada, também foi inicializada com o valor da variável duration
.
Já as outras (minutes
e seconds
) não foram inicializadas. Mas pode reparar que elas são usadas depois (minutes = parseInt(etc
).
entendi, Valeu amigão
Outra coisa que reparei: o código usa `parseInt` para arredondar o resultado da divisão.
Apesar de "funcionar", isso nem sempre dá o resultado esperado - [veja aqui](https://pt.stackoverflow.com/q/506307/112052). A meu ver, o mais correto é trocar por `Math.floor`, e somente na divisão. Já o operador `%` retorna o resto da divisão, e se os operandos forem inteiros, o resultado também será. Então o que poderia ser feito é validar se os valores são inteiros, ou arredondar antes dos cálculos, por exemplo.
No exemplo abaixo vou omitir esta etapa e assumir que a função sempre recebe inteiros.
Outra melhoria é interromper o timer se ele chegar a zero. Não tem porque continuar rodando, já que neste caso o valor não é mais alterado. E se o valor inicial é menor ou igual a zero, nem inicie o timer. Enfim, uma sugestão:
```javascript
function displayTime(duration, display) {
var minutes = Math.floor(duration / 60).toString().padStart(2, '0');
var seconds = (duration % 60).toString().padStart(2, '0');
display.textContent = minutes + ":" + seconds;
}
function startTimer(duration, display) {
if (duration <= 0) {
// se o tempo é menor ou igual a zero, mostra zero nem inicia o timer
displayTime(0, display);
return;
}
var intervalId = setInterval(function () {
displayTime(duration, display);
if (duration > 0) {
duration--;
} else {
// se o tempo zerou, interrompe o timer (não tem porque continuar rodando)
clearInterval(intervalId);
}
}, 1000);
}
```