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

De onde vem o "xCarro"?

Na seguinte função, como o código identifica xCarro? Já que o nome passado nela pouco importa, ao mudar tem o mesmo comportamento!

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

function passouTela(xCarro){
  return xCarro < -50;
}

Não sei se não entendi ao certo a função do return, mas parece mágica o código resgatar tal valor do carro independente do nome. Mesmo da seguinte forma funciona igual

function passouTela(x){
  return x < -50;
}
2 respostas

Opa, o parametro que você da na função não faz diferença pq ele é de escopo local. O nome que você vai dar para os parametros na função não importa por que ela vai assumir os valores que você passar para ela como parametro na hora que chamar ela. ex: let resultado = somar(3,5)

function somar(a,b){ return a+b }

console.log(resultado)

8

solução!

Olá, Murillo. Como vai você?

Sua pergunta é muito boa e faz todo o sentido porque parece que o valor pode ser "modificado de qualquer forma" ou que é um "bug" da linguagem. O Fernando respondeu de uma forma bem interessante e acredito que podemos retomar alguns conteúdos para reforçarmos o que entendemos.

No primeiro momento o instrutor desmembrou a função voltaPosicaoInicialDoCarro() e criou uma nova para fazer a verificação do Movimento do carro pela tela, que é a função passouTodaATela() ( Nesse caso ele já tinha as variáveis com os valores dos carros e suas velocidades , que armazenou em lista para deixar o código mais fluido).

Dessa forma, o que aconteceu na function passouTodaATela(xCarro){ return xCarro < - 50; } é que o xCarro é um parâmetro da função.

Mas... o que são parâmetros de funções?

Todas as funções possuem em sua estrutura um parâmetro (que pode ser nomeado ou não na construção da função). Quando definimos uma função, temos uma forma (que chamamos de sintaxe) especial para declará-la, vamos ver como funciona?

Sintaxe de uma função

//Assim é a estrutura de uma função

function nome([param[, param[, ... param]]]) {
   instruções;
}
  1. nome: nome da função

  2. param: o nome de um argumento a ser passado para a função (são os valores ou informações que vamos utilizar em nossa função);

  3. instruções: instruções que formam o corpo da função (o que nós queremos que nossa função execute);

Vamos ver no código do instrutor como fica? :)

//Agora veja a função que o instrutor criou

function passouTodaATela(xCarro){ 
return xCarro < - 50; 
}
  1. nome: passouTodaATela

  2. parâmetro: xCarro

  3. instrução: return xCarro <- 50

O parâmetro é apenas uma forma de nomear que naquele local vai um valor (que chamamos de argumento), você poderia substituir o nome desse parâmetro por qualquer outro que o resultado seria o mesmo (apenas aconselhamos a inserir um nome que faça sentido por questões de boas práticas).

E como a função "voltaPosiçãoInicial()" vai saber o que é o xCarro?

A função voltaPosiçãoInicial() "sabe" pois o instrutor inseriu o valor da lista xCarros dentro do parâmetro xCarro , olha só:

function voltaPosicaoInicialDoCarro(){
    for(let i = 0; i < imagemCarros.length; i = i + 1){
        if(passouTodaATela(xCarros[i])){ //bem aqui ele inseriu a lista xCarros como o valor do parâmetro.
                xCarros[i] = 600;
        }
    }
}

Separei aqui alguns links que podem te ajudar:

Aqui o instrutor fala um pouco sobre parâmetros nas funções https://cursos.alura.com.br/course/pong-javascript/task/56090

Aqui é a documentação oficial do MDN sobre funções

E mais um artigo do MDN também para você consultar como um Guia JavaScript sobre funções

Um abraço e bons estudos! :)