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

Duas dúvidas

Tenho duas dúvidas em relação ao exercício:

Nessa parte aqui é a minha primeira dúvida:

for(var posicao = 0; posicao < ingredientes.length; posicao++) {

Em que momento do código foi especificado o tamanho do array ingredientes pra eu poder usar o length dela como parada do laço for?

E a minha segunda dúvida, o que acontece se eu declarar o jaRepetiu = false; que é pra conferir se a String repetiu, acima do While? Pois no começo eu deixei ele fora do While e o programa não funcionava como esperado e por um acaso eu o coloquei dentro do While e funcionou, mas é aquele negócio de quando algo funciona mas você nem sabe explicar como.

4 respostas
solução!

Fala Matheus, tudo beleza?

O length nada mais é que um atributo pertencente a todo array onde você consegue saber seu tamanho.

Sempre que fizermos nomeDoArray.length, isso nos retornará seu tamanho.

Mas onde isso foi definido?

A maioria das linguagens de programação trabalha com estruturas de dados, como arrays e outros tipos de listas, etc...

O length é uma propriedade que está na definição dessas estruturas mais complexas (listas), que deve retornar sempre o tamanho do array.

Então, você não precisa se preocupar em definir isso, já que isso já vem como parte integrante da estrutura de dados utilizada! (quem implementou a estrutura colou lá para nós)

Respondendo a outra dúvida,

A ideia de se declarar a variável dentro do while parte da necessidade de que se é necessário sempre se redefinir a variável.

A cada iteração do while, nossa variável é redeclarada assumindo o valor original dela, garantindo nossa lógica.

Caso declarássemos fora, essa variável não seria 'resetada' e sempre teria o ultimo valor salvo, sendo true caso existissem ingredientes repetidos.

Assumindo o valor true (oposto do que setamos originalmente), toda a lógica é comprometida, fazendo com que não funcione conforme o esperado.

Caso algo tenha ficado nebuloso, basta perguntar!

Espero ter ajudado,

Abraços.

Acho que entendi, no caso do length a primeira vez que o programa chegar no for não irá ser executado pois o mesmo dá uma condição falsa:

for(i=0; i<ingredientes.length; i++){

O ingredientes.length vale 0 já que não recebeu qualquer valor antes e, portanto, 0 não é menor do que 0, então o programa vai executar o que está depois do for e vai receber o push do var ingrediente, a partir daí o length será de 1 e o programa voltará ao for novamente por causa do While e aí sim vai ser executado, pois 0 é menor do que 1. A segunda dúvida já foi sanada logo ao ler sua resposta.

Muito obrigado!

Perfeito Matheus!

Uma boa forma de entender melhor o código é fazer um teste de mesa.

Você pode ver como aplicá-lo aqui

Com o tempo você vai pegando os macetes e entendendo melhor as coisas, não se esqueça de utilizar o console.log para saber o estado das suas variáveis em determinados pontos de execução.

Você está indo num bom caminho, meus parabéns!

Sucesso e abraços!

Olá Matheus.

Estou fechando seu tópico uma vez que sua dúvida foi solucionada.

Caso tenha uma nova dúvida basta criar um novo.

Abraços!