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

Propriedade length e tag <input>

O código abaixo foi desenvolvido no Curso Lógica de programação I:

<meta charset="UTF-8">

<input/>
<button>Compare com o meu segredo</button>

<script>

    function sorteia() {

        return Math.round(Math.random() * 10);
    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

            var numeroAleatorio = sorteia();

            if(numeroAleatorio !== 0 ) {

                var achou = false;

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

                    if(segredos[posicao] == numeroAleatorio) {
                        achou = true;
                        break;
                    }
                }

                if(achou == false) {
                    segredos.push(numeroAleatorio);    
                    numero++;
                } 
            }
        }

        return segredos;
    }

    var segredos = sorteiaNumeros(5);

    console.log(segredos);

    var input = document.querySelector("input");
    input.focus();    

    function verifica() {

        var achou = false;

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

            if(input.value == segredos[posicao]) {

                alert("Você ACERTOU!");
                achou = true;
                break;
            }
        }

        if(achou == false) {

            alert("Você ERROU!");    
        }


        input.value = "";
        input.focus();        
    }

    var button = document.querySelector("button");

    button.onclick = verifica;


</script>

Minha primeira dúvida é quanto à propriedade length no for dentro da função sorteiaNumeros. Como segredos.length sabe o tamanho do array segredos se o tamanho não foi declarado?

E a minha outra dúvida é referente à tag input. Vi a mesma tag escrita de duas maneiras diferentes, <input/> e <input>. Qual seria a correta?

4 respostas

Olá Alessandro tudo bem?

1 - Bom vamos lá, primeiro, eu vou te explicar para q e o que é a propriedade Length no Javascript.Esta propriedade contém um número inteiro, que é responsável por indicar o número de caracteres no objeto de String. Neste caso, ele devolve o tamanho do seu Array chamado Segredos.

2 - Algumas tags, não HTML não precisam ser fechadas , que é o caso do input, o autor optou por utilizar o fechamento no final da tag.

O input assim '<input />'  é o mesmo que assim <input> </input>.

Mas nem todas as tags podem ser fechadas desta maneira, por exemplo a <div>Exemplo</div>

Espero ter ajudado. Abraços.

Olá estudo02, obrigado pela atenção!

Em relação à questão do retorno da propriedade length, minha dúvida é exatamente essa. Vou tentar explicar melhor comentando meu raciocínio no código:

   function sorteiaNumeros(quantidade) {

        // aqui o array segredos foi declarado, mas nenhum                         elemento foi atribuido, logo, segredos.length deveria             retornar o valor 0, não? Já que o array está vazio.
    var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

            var numeroAleatorio = sorteia();

            if(numeroAleatorio !== 0 ) {

                var achou = false;
//Agora, nesse primeiro for é verificado se *posicao < segredos.length*, e como posicao = 0 e de acordo com o que eu entendi segredos.length retorna 0, o for não deveria funcionar. Essa é minha dúvida, o valor retornado pela propriedade length nesse caso.
                for(var posicao = 0; posicao < segredos.length; posicao++) {

                    if(segredos[posicao] == numeroAleatorio) {
                        achou = true;
                        break;
                    }
                }

                if(achou == false) {
                    segredos.push(numeroAleatorio);    
                    numero++;
                } 
            }
        }

        return segredos;
    }

Sobre a tag input, muito obrigado, compreendi as diferentes formas de usa-la.

solução!

Alessandro, realmente o array segredos possui um length = 0 na primeira passada. Mas olhe bem, oque tem fora do for? Sim, uma condição que será verdadeiro e sabe oq ela faz? adiciona um número aleatório no array. Ou seja, o programa inicia, não entra no primeiro loop na primeira iteração e com a propriedade push, adiciona um numero no array segredos.

Obrigado estudo02, agora entendi!