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

[Projeto] Lista de Exercícios

void main() {
  ItemEstoque smartphone = ItemEstoque(item: 'Smartphone', quantidade: 100, preco: 199 );
  ItemEstoque notebook = ItemEstoque(item: 'Notebook', quantidade: 50, preco: 199 );
  ItemEstoque geladeira = ItemEstoque(item: 'Geladeira', quantidade: 20, preco: 199 );
  ItemEstoque freezer = ItemEstoque(item: 'Freezer', quantidade: 10, preco: 199 );
  ItemEstoque tv = ItemEstoque(item: 'Tv', quantidade: 12, preco: 199 );

  print('Produto: ${smartphone.item}, Quantidade em estoque: ${smartphone.quantidade}');
  print('Produto: ${notebook.item}, Quantidade em estoque: ${notebook.quantidade}');

  print(smartphone.adicionarAoEstoque(smartphone, 20));
  print(notebook.adicionarAoEstoque(notebook, 10));

  List<ItemEstoque> listaDeEstoque = [smartphone, notebook, geladeira, freezer, tv];

  for (ItemEstoque itemCadastrado in listaDeEstoque) {
    print('Produto: ${itemCadastrado.item}, Quantidade em estoque: ${itemCadastrado.quantidade}');
  }

  print('Alterando preço do produto: ${tv.item} para: ${tv.alterarPreco(tv, 299.99)}');
}

class ItemEstoque {
  String item;
  double quantidade;
  double preco;

  ItemEstoque({required this.item, required this.quantidade, required this.preco});

  adicionarAoEstoque(ItemEstoque item, double quantidade) {
    item.quantidade += quantidade;
    print('Foram adicionadas $quantidade unid. do estoque, estoque atualizado: ${item.quantidade}');
    return item.quantidade;
  }

  removerDoEstoque(ItemEstoque item, double quantidade) {
    item.quantidade -= quantidade;
    print('Foram removidas $quantidade unid. do estoque, estoque atualizado: ${item.quantidade}');
    return item.quantidade;
  }

  alterarPreco(ItemEstoque item, double novoValor) {
    item.preco = novoValor;
    return item.preco;
  }
}

Fiquei com uma dúvida, há alguma maneira de chamar os métodos que estão na classe ItemEstoque sem ser através das variáveis dos itens?
ex: estou usando a variável smartphone para fazer smartphone.adicionarAoEstoque(smartphone, 20);
achei isso meio redundante, faria mais sentido adicionarAoEstoque(smartphone, 20);

3 respostas

Perguntei ao ChatGPT e ele me deu a explicação de que na classe eu já tenho acesso ao objeto atual via this, então não precisa receber o item novamente.
Ficou menos verboso, consequentemente mais legível

Nova solução:

void main() {
  ItemEstoque smartphone = ItemEstoque(item: 'Smartphone', quantidade: 100, preco: 199 );
  ItemEstoque notebook = ItemEstoque(item: 'Notebook', quantidade: 50, preco: 199 );
  ItemEstoque geladeira = ItemEstoque(item: 'Geladeira', quantidade: 20, preco: 199 );
  ItemEstoque freezer = ItemEstoque(item: 'Freezer', quantidade: 10, preco: 199 );
  ItemEstoque tv = ItemEstoque(item: 'Tv', quantidade: 12, preco: 199 );

  print('Produto: ${smartphone.item}, Quantidade em estoque: ${smartphone.quantidade}');
  print('Produto: ${notebook.item}, Quantidade em estoque: ${notebook.quantidade}');

  print(smartphone.adicionarAoEstoque(20));
  print(notebook.adicionarAoEstoque(10));

  List<ItemEstoque> listaDeEstoque = [smartphone, notebook, geladeira, freezer, tv];

  for (ItemEstoque itemCadastrado in listaDeEstoque) {
    print('Produto: ${itemCadastrado.item}, Quantidade em estoque: ${itemCadastrado.quantidade}');
  }

  print('Alterando preço do produto: ${tv.item} para: ${tv.alterarPreco(299.99)}');
}

class ItemEstoque {
  String item;
  double quantidade;
  double preco;

  ItemEstoque({required this.item, required this.quantidade, required this.preco});

  adicionarAoEstoque( double quantidade) {
    this.quantidade += quantidade;
    print('Foram adicionadas $quantidade unid. do estoque, estoque atualizado: ${this.quantidade}');
    return this.quantidade;
  }

  removerDoEstoque( double quantidade) {
    this.quantidade -= quantidade;
    print('Foram removidas $quantidade unid. do estoque, estoque atualizado: ${this.quantidade}');
    return this.quantidade;
  }

  alterarPreco( double novoValor) {
    this.preco = novoValor;
    return this.preco;
  }
}

solução!

Oii, Augusto! Como vai?

Agradeço por compartilhar.

Gostei bastante da sua evolução na solução, notar como você aplicou corretamente o uso do this para acessar o objeto atual, deixando os métodos mais claros, menos verbosos e alinhados com os conceitos de orientação a objetos trabalhados no curso.

Siga explorando esse tipo de refatoração, pois ela melhora muito a legibilidade e a manutenção do código.

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