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

Minha resolução para o exercício: criando métodos dentro de um objeto

let maquinas = [
  {
    nome: "Lavadora de frutas",
    funcionando: true,
    exibirStatus: function () {
      this.funcionando == true
        ? console.log(`A máquina '${this.nome}' está funcionando.`)
        : console.log(`A máquina '${this.nome}' está parada.`);
    },
  },
  {
    nome: "Despolpadeira",
    funcionando: true,
    exibirStatus: function () {
      this.funcionando == true
        ? console.log(`A máquina '${this.nome}' está funcionando.`)
        : console.log(`A máquina '${this.nome}' está parada.`);
    },
  },
  {
    nome: "Rotuladora",
    funcionando: false,
    exibirStatus: function () {
      this.funcionando == true
        ? console.log(`A máquina '${this.nome}' está funcionando.`)
        : console.log(`A máquina '${this.nome}' está parada.`);
    },
  },
];

maquinas.forEach(function (maquina) {
  maquina.exibirStatus();
});
2 respostas
solução!

Olá, Diego. Como vai?

Excelente resolução! O seu código está 100% correto e demonstra que você compreendeu com muita clareza como estruturar métodos dentro de objetos literais e a importância do uso da palavra-chave this para acessar as propriedades internas de cada escopo.

A sua escolha pelo operador ternário (? :) deixou o bloco de decisão extremamente limpo e elegante. Além disso, usar o método maquinas.forEach() para percorrer o array e disparar o método exibirStatus() de cada máquina foi a estratégia perfeita para automatizar a leitura dos dados.

Para enriquecer o seu projeto e elevar ainda mais o nível do seu código JavaScript, separei duas dicas sobre boas práticas de desenvolvimento (incluindo uma técnica de reaproveitamento de código que vai salvar muito o seu tempo no futuro):


1. Evitando a Repetição de Código (DRY - Don't Repeat Yourself)

Reparou que você teve que reescrever exatamente a mesma função exibirStatus três vezes, uma para cada máquina? No dia a dia do desenvolvimento, duplicar código assim pode virar um problema: se amanhã você precisar mudar o texto da mensagem, terá que alterar o código em três lugares diferentes.

No JavaScript moderno, para evitar esse tipo de repetição ao criar coleções de objetos que compartilham o mesmo comportamento, nós utilizamos as Classes (ou Funções Construtoras). Elas funcionam como uma "fábrica" ou um molde de objetos.

Veja como o seu código ficaria infinitamente mais enxuto, profissional e fácil de dar manutenção usando uma classe:

// Criamos o molde (Classe) com as propriedades e o método uma única vez
class Maquina {
  constructor(nome, funcionando) {
    this.nome = nome;
    this.funcionando = funcionando;
  }

  exibirStatus() {
    this.funcionando
      ? console.log(`A máquina '${this.nome}' está funcionando.`)
      : console.log(`A máquina '${this.nome}' está parada.`);
  }
}

// Agora apenas instanciamos as máquinas de forma limpa
let maquinas = [
  new Maquina("Lavadora de frutas", true),
  new Maquina("Despolpadeira", true),
  new Maquina("Rotuladora", false)
];

// O seu loop continua funcionando perfeitamente!
maquinas.forEach(maquina => maquina.exibirStatus());

2. Simplificando a Condição Booleana

No seu operador ternário, você utilizou a comparação explícita this.funcionando == true.

Como a propriedade funcionando já guarda um valor booleano puro (true ou false), você não precisa compará-la com nada. O JavaScript já consegue avaliar o valor dela diretamente dentro do teste lógico.

Você pode reduzir isso de forma bem natural:

// Em vez de: this.funcionando == true ? ...
// Você pode usar apenas:
this.funcionando ? console.log(...) : console.log(...);

Se o valor for true, ele entra na primeira opção; se for false, vai direto para a segunda. É um detalhe simples, mas que deixa a leitura do código bem mais fluida e limpa!

Parabéns pelo excelente domínio sobre objetos e loops no JavaScript! Continue com esse ótimo ritmo de estudos.

Espero que possa ter lhe ajudado!

Olá, Evandro. Espero que esteja bem!

Muito obrigado pela excelente explicação; consegui compreender perfeitamente como o código ficaria utilizando as classes para evitar repetições. Ainda não havia utilizado esse método, mas achei muito interessante e fácil de implementar. Realmente, facilitaria bastante a realização de alterações futuras, caso fosse necessário modificar o código.

Agradeço também pela explicação sobre a simplificação da condição booleana. Acabei comparando explicitamente com true para que eu conseguisse entender o que fiz com maior facilidade, caso precisasse rever o código em outro momento. Mas vou me atentar a isso nos próximos exercícios.

Tenha um excelente dia!