Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Resolução da lista de exercícios

Olá como vai?
Espero que bem.

Gostaria só de uma validação se a forma que eu fiz o código está correta, se teria uma forma mais direta de fazer ou algo assim, nele já contem a solução dos 4 exercícios:

void main(){

ItemEstoque itemUm = ItemEstoque("Smartphone",100,1800.00);
ItemEstoque itemDois = ItemEstoque("Notebook",50,3500.00);
ItemEstoque itemTres = ItemEstoque("TV", 30,2500.00);
List itens = [itemUm,itemDois,itemTres];

for(ItemEstoque item in itens){
print("Produto: ${item.nome}, Quantidade em estoque: ${item.quantidade}, Valor: ${item.preco}");
}

itemUm.entrada(20);
itemDois.saida(10);

itemTres.atualizaPreco(2000.00);
itemUm.atualizaPreco(1000.00);

for(ItemEstoque item in itens){
print("Produto: ${item.nome}, Quantidade em estoque: ${item.quantidade}, Valor: ${item.preco}");
}

}

class ItemEstoque {
String nome;
int quantidade;
double preco;

ItemEstoque(this.nome, this.quantidade,this.preco);
void entrada(int valor){
this.quantidade += valor;
}
void saida(int valor){
this.quantidade -= valor;
}
void atualizaPreco(double novoPreco){
this.preco = novoPreco;
}

}

Desde já agradeço pelo apoio,
Estou aberto para sugestões e melhorias

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Oi Lucas, tudo bem? 😊

Seu código está muito bom e demonstra um ótimo entendimento dos conceitos de orientação a objetos em Dart! 👍

A forma como você implementou a classe ItemEstoque e utilizou seus métodos está correta e clara. A criação dos objetos e a manipulação da lista também foram feitas de maneira eficiente.

Para tornar o código um pouco mais conciso, você pode considerar o uso de final para as propriedades que não serão alteradas após a inicialização do objeto, como o nome do item. No entanto, para quantidade e preco, que são modificados, o uso de var ou a ausência de modificador (que por padrão é mutável) está correto.

Uma pequena sugestão para a impressão dos dados seria usar um toString() na classe ItemEstoque. Isso encapsula a lógica de representação do objeto em uma única função, tornando o main mais limpo.

Veja um exemplo de como ficaria com o toString():

void main() {
  ItemEstoque itemUm = ItemEstoque("Smartphone", 100, 1800.00);
  ItemEstoque itemDois = ItemEstoque("Notebook", 50, 3500.00);
  ItemEstoque itemTres = ItemEstoque("TV", 30, 2500.00);
  List<ItemEstoque> itens = [itemUm, itemDois, itemTres]; // Usando List<ItemEstoque> para tipagem explícita

  for (ItemEstoque item in itens) {
    print(item); // Agora o print(item) chama o toString()
  }

  itemUm.entrada(20);
  itemDois.saida(10);

  itemTres.atualizaPreco(2000.00);
  itemUm.atualizaPreco(1000.00);

  print("\n--- Após atualizações ---"); // Adicionando um separador visual
  for (ItemEstoque item in itens) {
    print(item);
  }
}

class ItemEstoque {
  final String nome; // Usando final para o nome, pois não muda
  int quantidade;
  double preco;

  ItemEstoque(this.nome, this.quantidade, this.preco);

  void entrada(int valor) {
    this.quantidade += valor;
  }

  void saida(int valor) {
    if (this.quantidade >= valor) { // Adicionando uma verificação para evitar estoque negativo
      this.quantidade -= valor;
    } else {
      print("Erro: Quantidade insuficiente em estoque para ${this.nome}.");
    }
  }

  void atualizaPreco(double novoPreco) {
    this.preco = novoPreco;
  }

  @override
  String toString() {
    return "Produto: $nome, Quantidade em estoque: $quantidade, Valor: $preco";
  }
}

Note que também adicionei uma verificação na função saida para evitar que a quantidade em estoque fique negativa, o que é uma boa prática em sistemas de controle de estoque. 💪

Continue praticando e explorando, você está no caminho certo! 🎓

🎓 Para saber mais: