2
respostas

Resposta dos desafios da aula 2

Gostaria de deixar a minha resolução dos desafios, e comentar que acredito que o desafio 3, de verificar se palavra ou frase é um palíndromo, me parece complexo demais para o nível de conhecimento passado pelas aulas até o momento.

Desafio 1: é bem simples, basta adicionar um confirm dentro de uma condicional. Decidi utilizar um return para interromper a execução do código caso não o usuário clique em "não".

    // Confirma se o jogo deve ser mesmo devolvido
    if (imagemDoGame.classList.contains('dashboard__item__img--rented')) {
        if (!confirm(`Tem certeza que deseja devolver ${nomeDoJogo}?`)) {
            return;
        }
    }

Desafio 2: não ficou claro se o intuito era incrementar um contador ou contar quantos jogos dentre os disponíveis foram alugados, decidi fazer da segunda forma:

function jogosAlugados() {
    let jogosAlugados = 0;
    const listaJogos = document.querySelectorAll('.dashboard__items__item');
    
    for (const jogo of listaJogos) {
        if (jogo.querySelector('.dashboard__item__img').classList.contains('dashboard__item__img--rented')) {
            jogosAlugados++;
        }
    }

    console.log(`Jogos alugados: ${jogosAlugados}`);
}

Desafio 3: utilizei um filtro usando Regex para deixar apenas caracteres alfanuméricos, e, por sorte, verifiquei que esse filtro também removeu acentos. A verificação foi feita caractere a caractere, utilizando um loop for. Também fiz validações caso não fosse digitado nada, e caso o filtro resultasse em uma string vazia, e adicionei um confirm para permitir reiniciar a execução.

verificarPalindromo();

function verificarPalindromo() {
    const string = prompt('Digite uma palavra ou frase para verificar se ela é um palíndromo');
    let palindromo = true;
    
    // Verifica se uma palavra foi digitada
    if (string !== null && string !== '') {
        const stringFiltrada = string.toLowerCase().replace(/[^a-z0-9]/g, '');
        const tamanho = stringFiltrada.length;

        if (tamanho) {
            for (let i = 0; i < tamanho; i++) {
                if (stringFiltrada[i] !== stringFiltrada[tamanho - 1 - i]) {
                    palindromo = false;
                    break;
                }
            }
        } else {
            palindromo = false;
        }
    
     
        alert(`"${string}" ${palindromo ? 'é' : 'não é'} um palíndromo.`);
    } else {
        alert('Nenhuma palavra foi digitada')
    }

    const reiniciar = confirm('Deseja verificar uma nova palavra?');

    if (reiniciar) verificarPalindromo();
}

Desafio 4: utilizei um loop while para validar se o valor digitado era mesmo um número válido, utilizando o fato de que parseInt retorna NaN caso ele não consiga transformar o valor em número

escolher();

function escolher() {
    alert('Escolha 3 números');
    const num1 = verificar('Primeiro número:');
    const num2 = verificar('Segundo número:');
    const num3 = verificar('Terceiro número:');

    // Converte array em string, e adiciona espaço entre os itens
    const numerosOrdenados = ordenar(num1, num2, num3).toString().replaceAll(',', ', ');

    alert(`Números ordenados: ${numerosOrdenados}`);

    // Reinicia se o usuário desejar
    if (confirm('Deseja executar novamente?')) escolher();
}

// Verifica se o valor digitado é um número válido e o retorna, caso contrário repete a escolha do número
function verificar(msg) {
    let numero = prompt(msg);
    numero = parseFloat(numero?.replace(',', '.'));

    while(Number.isNaN(parseInt(numero))) {
        alert('O valor digitado não é um número válido');
        numero = prompt(msg);
        numero = parseFloat(numero?.replace(',', '.'));
    }

    return numero;
}

// Retorna array com números ordenados
function ordenar(num1, num2, num3) {
    return [num1, num2, num3].sort();
};
2 respostas

Bom dia Vinicius! Tudo bem com você?

Obrigada por compartilhar sua resolução com a comunidade Alura. A seguir, comento ponto a ponto sobre suas escolhas:

  • Desafio 1: Sua solução está correta. O uso do confirm() dentro de uma condicional foi bem pensado, e o return para interromper a execução ao clicar em “Não” é uma prática muito comum — tanto por questões de fluxo de controle quanto de clareza de leitura do código. É uma forma direta e segura de evitar que a devolução siga adiante sem confirmação.

  • Desafio 2: O objetivo do enunciado era contar quantos jogos estão alugados no momento, considerando os que aparecem na tela com a classe dashboard__item__img--rented. Você estruturou bem a função ao usar querySelectorAll e for...of para iterar nos itens. Esse padrão é fácil de manter e adaptar, caso novas regras de contagem sejam adicionadas depois.

  • Desafio 3: Esse desafio tem como objetivo estimular o raciocínio lógico aplicado. Te fazendo pensar sobre:

    • Como estruturar o problema
    • Quais etapas precisam ser executadas
    • Como validar as entradas

    A sua solução, utilizando regex para limpar a entrada e um loop para fazer a verificação caractere a caractere, mostra que você entendeu bem o problema e soube aplicar os recursos da linguagem.

  • Desafio 4: A utilização do while para validar a entrada do usuário foi uma escolha acertada, garantindo que apenas números válidos sejam aceitos. A função ordenar cumpre bem o papel, e a conversão de vírgula para ponto antes de parseFloat é uma atenção super relevante para o público brasileiro que naturalmente digitará números com vírgula. Pequenos detalhes como esse fazem diferença no resultado final.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

eu tive a mesma ideia mas n consegui fazer direito! :(