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!