1
resposta

[Dúvida] EX 1

Bom dia! Eu fiz o exercício 1 e consegui, mas percebi um detalhe.

const pessoa = {
    nome: 'Rafael',
    notas: [10,8,9,6],
    

calcularMedia: function(){
    const somaNotas = this.notas.reduce((soma,nota) => soma + nota, 0);
    const calculaMedia = somaNotas / this.notas.length;
    return calculaMedia;
},

classificarDesempenho: function(){
    const calculaMedia = this.calcularMedia()
 if(calculaMedia >=9){
 return 'excelente';
 } else if (calculaMedia >7.5 && calculaMedia <9 ){
   return 'Bom desempenho';
 } else if(calculaMedia >= 6 && calculaMedia < 7.6){
    return 'Regular';
 } else if(calculaMedia < 6 ){
    return 'Desempenho insuficiente';
 }

 
}
}

console.log(pessoa.calcularMedia());
console.log(pessoa.classificarDesempenho());

Quando eu faço o código assim, o terminal me dá 8.25 e bom desempenho. Agora quando faço assim:

const pessoa = {
    nome: 'Rafael',
    notas: [10,8,9,6],
    

calcularMedia: function(){
    const somaNotas = this.notas.reduce((soma,nota) => soma + nota, 0);
    const calculaMedia = somaNotas / this.notas.length;
    console.log(calculaMedia);
},

classificarDesempenho: function(){
    const calculaMedia = this.calcularMedia()
 if(calculaMedia >=9){
 return 'excelente';
 } else if (calculaMedia >7.5 && calculaMedia <9 ){
   return 'Bom desempenho';
 } else if(calculaMedia >= 6 && calculaMedia < 7.6){
    return 'Regular';
 } else if(calculaMedia < 6 ){
    return 'Desempenho insuficiente';
 }

 
}
}

console.log(pessoa.calcularMedia());
console.log(pessoa.classificarDesempenho());

O terminal me retorna: 8.25 undefined 8.25 undefined

1 resposta

Oi Flavio,

A diferença no resultado ocorre porque na primeira versão, a função calcularMedia retorna o valor da média, que é então usado pela função classificarDesempenho. Já na segunda versão, a função calcularMedia usa console.log para exibir a média, mas não retorna nenhum valor (ou seja, retorna undefined). Consequentemente, quando classificarDesempenho chama calcularMedia(), ela recebe undefined e não consegue realizar a comparação corretamente. 🤔

Para corrigir, você precisa que a função calcularMedia retorne o valor da média, assim como na primeira versão. Remova o console.log de dentro da função calcularMedia e mantenha o return calculaMedia;. 👍

Exemplo:

const pessoa = {
    nome: 'Rafael',
    notas: [10, 8, 9, 6],
    

calcularMedia: function(){
    const somaNotas = this.notas.reduce((soma,nota) => soma + nota, 0);
    const calculaMedia = somaNotas / this.notas.length;
    return calculaMedia; // Retorna o valor da média
},

classificarDesempenho: function(){
    const calculaMedia = this.calcularMedia()
 if(calculaMedia >=9){
 return 'excelente';
 } else if (calculaMedia >7.5 && calculaMedia <9 ){
   return 'Bom desempenho';
 } else if(calculaMedia >= 6 && calculaMedia < 7.6){
    return 'Regular';
 } else if(calculaMedia < 6 ){
    return 'Desempenho insuficiente';
 }
}
}

console.log(pessoa.calcularMedia());
console.log(pessoa.classificarDesempenho());

Para saber mais: Funções em JavaScript 📚

Continue praticando e explorando as funcionalidades do JavaScript! 💪

tux matrix Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓