Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Dúvida: exercícios 9 e 10 da lista de exercício n° 5

Fluiu tudo bem até o exercício 8:

// 1. Função de saudação
    // Crie uma função chamada saudacao que exibe a mensagem "Olá! Seja bem-vindo(a)!" ao ser chamada.
// function saudacao() {
//     console.log('Olá! Seja bem-vindo(a)!')
// }
// saudacao();

// 2. Função com parâmetros
    // Crie uma função apresentarPessoa(nome, idade) que exibe no console: "Olá, meu nome é [nome] e tenho [idade] anos."
// function apresentarPessoa(nome, idade){
//     console.log('Olá, meu nome é '+nome+' e tenho '+idade+' anos.')
// }

// function apresentarPessoa(nome,idade){
//     console.log(`Olá, meu nome é ${nome} e tenho ${idade} anos`)
// }
// apresentarPessoa('Esperidião', 36)

// 3. Cálculo de IMC
// Crie uma função chamada calcularIMC que receba dois parâmetros: peso e altura.
// A função deve calcular o IMC utilizando a fórmula:

//     IMC = peso / (altura * altura)

// A função deve retornar o valor do IMC.
// Depois, utilize o retorno da função para exibir no console uma mensagem com o resultado.

// function calcularIMC(peso, altura){
//     let imc = peso / (altura*altura)
//     return imc
// }

// let resultadoIMC = calcularIMC(70, 1.71);
// console.log('Seu IMC é: '+resultadoIMC)


// 4. Verificar aprovação
    // Crie uma função verificarAprovacao(nota) que retorna "Aprovado" se nota >= 7 ou "Reprovado" caso contrário.

//     function verificarAprovacao(nota) {
//         if (nota>=7) {
//             console.log('Aprovado')
//         } else{
//             console.log('Reprovado')
//         }
//     }

// verificarAprovacao(9)



// 5. Número par ou ímpar
    // Crie uma função ehPar(numero) que retorna true se o número for par e false se for ímpar. Teste a função com diferentes valores.

    // function ehPar(numero){
    //     if (numero %2 ==0) {
    //         return true
    //     } else {
    //         return false
    //     }
    // }

    // function ehPar(numero){
    //     return numero %2 ===0
    // }

    // console.log("O número é par? " + ehPar(5));



// 6. Função soma
    // Crie uma função que recebe dois números e retorna a soma deles. Exiba o resultado no console com uma frase completa. 

// function soma(a,b){
//     return a + b
// }

// let resultadoSoma = soma(4,8)
// console.log('O resultado da soma de 4 com 8 é:', resultadoSoma)



// 7. Reutilizando código
    // Reescreva o exercício da calculadora de troco utilizando uma função chamada calcularTroco.
    // A função deve receber dois parâmetros: valorCompra e valorPago.
// A função deve:
    //     calcular o valor do troco
    //     retornar o valor calculado
// Depois, utilize o retorno da função para exibir o valor do troco no console.

// function calcularTroco(valorCompra,valorPago){
//     let troco = valorPago - valorCompra
//     return troco
// }

// let valorDoTroco = calcularTroco(35.9,50)
// console.log('Valor do troco é: R$ '+valorDoTroco)




// 8. Arrow function
    // Transforme a função do exercício 6 em uma arrow function com sintaxe reduzida.

// let somarArrow = (a,b) => a + b;
// console.log('Soma (arrow): '+soma(3,7))



// 9. Callback simples
    // Crie uma função executarAcao(acao) que recebe uma função como parâmetro e a executa. 
    // Teste passando uma função que imprime "Executando ação!". 

    function executarAcao(acao){
        acao()
    }

    // a partir daqui não entendo e não consigo entender afinal o propósito do exercício

    
// function executarAcao(acao) { 

// acao(); 

// } 

// executarAcao(function() { 

// console.log("Executando ação!"); 

// }); 




// 10. Desafio do quiz
    // Crie uma função fazerPergunta(pergunta, respostaCorreta). 
    // A função deve exibir a pergunta e depois mostrar se a resposta está certa ou errada (simule a resposta com uma variável).

// não seria melhor começar a usar o readline nesta questão?

Eu consigo compreender o que aprendemos em callbackHOF.js

// HOF -> Higher-Order Function === função que recebe outra função como parametro

function calcular(numero1, numero2, operacao) {
    return operacao(numero1, numero2)
}

function soma(num1, num2) {
    return num1 + num2
}

function divisao(num1,num2) {
    return num1/num2
}

const resultadoSoma = calcular(3, 8, soma) // soma é um callback
console.log('Resultado da soma:', resultadoSoma)

const resultadoDivisao = calcular(32, 8, divisao) // divisao é um callback
console.log('Resultado da divisão:', resultadoDivisao)

mas não consegui compreender a lógica da solução apresentada.

function executarAcao(acao) { 

acao(); 

} 

executarAcao(function() { 

console.log("Executando ação!"); 

}); 
1 resposta

Oi, Esperidião. Tudo bem com você?

Sua dúvida sobre os exercícios 9 e 10 faz bastante sentido, principalmente porque o conceito de callback começa a ficar mais abstrato quando a função passada como argumento não tem um nome próprio. O ponto principal é entender que acao não representa o resultado de uma função, mas a própria função que foi recebida como parâmetro. Por isso, quando você escreve acao(), está executando a função que foi passada para executarAcao.

Essa function() { ... } é uma função anônima que está sendo enviada como argumento. Dentro de executarAcao, ela passa a ser acessível pelo nome acao. É uma ideia semelhante ao exercício calcular, em que soma é passada como argumento e depois executada por operacao(numero1, numero2). A diferença é que, no exercício 9, a função recebida não precisa de parâmetros nem retorna um valor.

Sobre o exercício 10, usar readline seria uma possibilidade para tornar o exercício mais próximo de uma situação real, mas não é necessário para trabalhar o conceito solicitado. A ideia é simular a resposta com uma variável justamente para manter o foco na função, nos parâmetros e na comparação entre valores. Depois, em um exercício futuro, você pode substituir essa variável por uma entrada feita com readline.

Continue compartilhando suas dúvidas e experimentos no fórum.

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