Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] [Dúvida] Como funciona exatamente essa parte do código

Meu código esta funcionando perfeitamente, minha dúvida é de como essa parte código funciona na pratica, não entendo como essa parte do código "aprova" a continuação do código, mas não entendo já que "xCarro" não tem valor definido o valor definido no código é do "xCarros" não "xCarro"

function voltaPosicaoInicialDoCarro(){
    for(let i = 0; i < imagemCarros.length; i = i + 1){
        if(passouTodaATela(xCarros[i])){
                xCarros[i] = 600;
        }
    }
}

function passouTodaATela(xCarro){
    return xCarro < - 50;
}
2 respostas
solução!

Nesse código, a variável xCarro é restrita ao contexto da função passouTodaATela que só aceita um elemento como entrada. Portanto, a variável xCarro não está disponível para o resto da aplicação, apenas dentro dessa função específica.

Por isso que, na função voltaPosicaoInicialDoCarro, é feito uma iteração na lista xCarros e cada elemento dessa lista é informado individualmente para a função passouTodaATela usando como referência o respectivo índice de cada elemento na lista.

Olá Manoel,

Vi ontem esta aula e fiquei exatamente com a mesma dúvida que você, passei um bom tempo tentando entender. A explicação do Luciano me parece perfeita tecnicamente, mas vou adicionar alguns comentários que me ajudaram a compreender o funcionamento, seguindo uma linha lógica:

1 - Talvez o fato de o professor utilizar o termo 'xCarro' como parâmetro da função 'passouTodaATela' pode ter prejudicado a compreensão, uma vez que anteriormente tínhamos a mesma referência utilizada de forma diferente, mas considere um nome qualquer, poderia se chamar por exemplo, 'posicaoDoCarroVerde', ou qualquer nome aleatório, como simplesmente 'a' (não ficaria muito claro, mas funcionaria da mesma forma - veja abaixo).

2 - Mas por que funcionaria da mesma forma? Porque este termo está sendo usado unicamente dentro da função para calcular o valor em 'return'. No exemplo acima, quando 'a' < -50 = true, e se 'a' > -50 = false.

3 - Mas qual resultado? R.: O resultado do if aonde a função 'passouTodaATela' está inserida. Em outras palavras, se 'passouTodaATela' < - 50 = true então alterar xCarros para o valor 600.

4 - Mas alterar quem para 600? Como ele soube que eram os carros? Pq o índice de xCarros[i] está inserido no parâmetro de 'passouTodaATela' dentro da função if.

5 - De qualquer forma, xCarro não está atribuído em lugar nenhum, como funcionou? R.: No seu código 'xCarro' é só um simples parâmetro e não precisa ser previamente definido. Nem a função 'passouTodaATela' precisa pois ela só é chamada dentro de 'voltaPosicaoInicialDoCarro' caso o 'return' for verdadeiro. Esta segunda função sim, precisa estar rodando constantemente no 'draw' para verificar frame a frame se 'passouTodaATela' é true/false.

Um outro exemplo de como o xCarro está somente sendo usado para calculo dentro do 'return' seria o código abaixo:

function soma (xCarro, b){
  return xCarro + b;
  }

let resultado = soma(4, 3);
console.log(resultado); //resultado que vai mostrar no console: 7

Neste exemplo, chamei propositalmente um parâmetro de 'xCarro' e outro de 'b', atribuindo a 'xCarro' o valor de 4 neste caso. Tentei demonstrar de outra forma que se trata de um simples parâmetro.

Por favor, se cometi algum erro na explicação, alguém com mais experiência me corrija, estou apenas começando também hehehe.

Espero ter ajudado!