6
respostas

Não entendi porque ficou 1 há mais :(

Seguinte, vamos entender aqui o código sem enrolação. O que eu entendi foi, temos um código que imprime onde tem o "console.log", que até então não tinha sido mostrado.

Primeira pt:

function calculaProximaIdade(idade) {
    idade += 1;
    console.log(idade);
}

Ele foi procurar o "calculaProximaIdade" que está lá embaixo:

const idadeStefany = 21;
calculaProximaIdade(idadeStefany);

OBS: não sei o que é "const", provavelmente vem de constante, porém não sei o que faz.

E aí, acontece o seguinte, ele coloca o "idadeStefany" para ser igual ao "idade", creio eu que fique assim, porque trata da mesma variável "calculaProximaIdade" ok, massa. Logo, "idade += 1", como já foi ensinado, isso é simplesmente somar 1. Massa. Ficou 22.

Vamos lá que tem mais. Chegando na pt 2, temos o seguinte:

function calculaProximasIdades(idades) {
    for (let i = 0; i < idades.length; i += 1) {
        idades[i] += 1;
    }
    console.log(idades);
}

E vamos lá, ele vai procurar o "calculaProximasIdades", que está aqui oh:

const idadesAmigos = [idadeStefany, 20, 23, 18, 7];
calculaProximasIdades(idadesAmigos);

Ele está com o "idadesAmigos" que já foi especificado que é uma lista, ok, ok, massa. Chegando então nesse código aqui, novamente, com uma lista agora:

function calculaProximasIdades(idades) {
    for (let i = 0; i < idades.length; i += 1) {
        idades[i] += 1;
    }
    console.log(idades);
}

E mais uma vez, o "idades" vai receber o valor de "idadesAmigos" porque faz parte da mesma variável "calculaProximasIdades". topzera. Entrando no laço 'for', acontece o seguinte, o "idades.length" provavelmente conta a quantidade de valores dentro da lista, que são 5. Massa. Ele vai repetir 5 vezes, passando por cada bloco da lista, e vai ficar:

0 é menor que 5, então i agora é 1
idades = 22.
1 é menor que 5, então i agora é 2.
idades = 23.
2 é menor que 5, então i = 3.
idades = 24.
3 < 5, então i = 4.
idades = 25.
4 < 5, então i = 5.
idades = 26.

Isso vai passar pelo 5 blocos da lista, 5 vezes. Logo, ficaria 26, 25, 28, 23, 12.

E aí eu não entendi mais, porque aparentemente isso era para dá 27, 26, 29, 24, 13.

Aí eu tive uma hipótese: Que poderia ter ficado o valor 22 da primeira função, porém, seria somente a "idadeStefany", e não é o caso, todos ficaram com +1. E agora? Quem poderá nos defender.

6 respostas

Boa noite Felipe, tudo bem?

Legal que está se desenvolvendo em programação!

Vamos lá as suas dúvidas:

  1. Perceba que todas as vezes que você atribui um function dentro do seu código, você está criando um método/função que vai processar alguma informação de acordo com o que você precisa e o function possui uma forma de referência de váriaveis, ou seja, eu posso enviar uma váriavel que vai conter um valor x, para que a função possa pegar essa váriavel e processá-la, só que ele vai processar dentro da sua função, isso não vai modificar o que está fora dela, a menos que você queira.

Exemplo: Aqui você está atribuindo um valor para idadeStefany

const idadeStefany = 21; #Váriavel fora da função
 calculaProximaIdade(idadeStefany); #Método que recebe sua váriavel

Aqui a sua função vai usar o parâmetro passado que se chama idades(variável que é recebida como parâmetro), que pode ser qualquer valor, não necessariamente precisa ser a variável idadeStefany.

Uma vez recebido o parâmetro(valor), ele utiliza como uma nova váriavel somente dentro da function, ou seja, isso não modifica o valor da sua variável idadeStefany

function calculaProximaIdade(idade) {
    idade += 1;
    console.log(idade);
}

Por isso que quando você faz a função no array passando a variável idadeStefany, ela continua com o valor 21.

Um plus aqui sobre a variável do tipo const, sim, é uma constante e constantes não podem ser alteradas nem redeclaradas.

Espero que tenha ajudado!

Tá, mas eu não entendi o porquê ficou com 1 há mais. Por que ficou [27, 26, 29, 24, 13]?

Você diz um valor a mais na lista?

Se for isso, é porque no console.log ele está constando com o valor da váriavel que você definiu no array/lista.

[idadeStefany, 20, 23, 18, 7];

idadeStefany conta como um valor dentro dessa lista para finalidade de console.log.

Sim, está definido com estes valores [idadeStefany, 20, 23, 18, 7], mas, quando você joga isso naquele 'for', não era para ficar

0 é menor que 5, então i agora é 1
idades = 22.
1 é menor que 5, então i agora é 2.
idades = 23.
2 é menor que 5, então i = 3.
idades = 24.
3 < 5, então i = 4.
idades = 25.
4 < 5, então i = 5.
idades = 26.

assim?

Se os valores que estão sendo passados realmente forem esses, seu código deveria estar mostrando os valores abaixo.

22, 21, 24, 19, 9

Porque você está passando no for, valor por valor e acrescentando +1 a cada um deles.

Por favor, deixe-me saber se lhe ajudei em algo e se a dúvida foi sanada, pode encerrar o tópico.

Obrigado e até a próxima!