O objetivo desta aplicação é bastante simples. Dado que eu passe uma lista de estudantes com suas notas, ela deve ser capaz de me retornar uma lista dos estudantes com suas médias. Além disso, ela também precisa me informar qual foi a melhor média da classe.
A estrutura de um aluno ficou assim:
%Student{
name: "João Joaquim",
results: [
%Subject{name: "Matemática", result: 9.8},
%Subject{name: "Português", result: 3.9},
%Subject{name: "Geografia", result: 9.8},
%Subject{name: "História", result: 9.8}
]
}
Compilando todos os módulos dentro do diretório do projeto:
$ elixirc calculator.ex student.ex subject.ex
Depois de compilar todos os módulos, alguns arquivos com a extensão .beam serão gerados no diretório. Estes são arquivos de bytecode que a máquina virtual vai executar.
Como todos os módulos estão compilados dentro da mesma pasta, o IEx pode ser chamado dentro desta pasta e ele automaticamente terá acesso a todos eles.
$ iex
Vamos então executar o start principal para vermos o resultado. Faremos Pattern Matching do resultado para uma variável result com o resultado geral, e best para os melhores.
$ iex> {result, best} = Calculator.start()
{[
%{average: 4.78, first_name: "João", last_name: "Joaquim"},
%{average: 6.78, first_name: "Maria", last_name: "Silva"},
%{average: 6.8, first_name: "Pedro", last_name: "Pedrada"},
%{average: 4.48, first_name: "Kauã", last_name: "Camboinhas"}
], [%{average: 6.8, first_name: "Pedro", last_name: "Pedrada"}]}
$ iex> result
[
%{average: 4.78, first_name: "João", last_name: "Joaquim"},
%{average: 6.78, first_name: "Maria", last_name: "Silva"},
%{average: 6.8, first_name: "Pedro", last_name: "Pedrada"},
%{average: 4.48, first_name: "Kauã", last_name: "Camboinhas"}
]
$ iex> best
[%{average: 6.8, first_name: "Pedro", last_name: "Pedrada"}]
Made with ♥ by Maiqui Tomé 😀
Reach out to me 👇