As Collections do Laravel, disponíveis para qualquer aplicação através do pacote `illuminate/collections`, preenchem uma lacuna no PHP ao trazer uma ferramenta poderosa de representar, traversar e processar coleções de dados. Veja como aplicar patterns como map, reduce, filter e where para simplificar e melhorar seu código.
2. Sobre o
palestrante
Aryel Tupinambá
@DfKimera
Co-fundador e CTO da
LQDI Digital
Projetos para empresas como Porto
Seguro, Nestlé, Ticket e American
Express
CTO da
PedeSabores.com.br
E-commerce de frutas, verduras,
legumes e outros produtos
alimentícios
13 anos trabalhando
com PHP
Desde a época que o PHPClasses
era a onda :)
4. O que são as Laravel Collections
Representação OOP
de uma array
Atua como um wrapper de
uma array ou data source
(database, CSV/XLS, etc)
Programação
funcional e method
chaining
Uma centena de
operações de busca,
manipulação e
transformação
20. Por que trocar loops por Collections?
Complexidade inerente ao loop
Loops tornam necessárias variáveis auxiliares, estado compartilhado e múltiplas saídas
Profundidade de identação (object calisthenics)
Loops acabam tornando difícil o exercício calistênico de reduzir a quantidade de identações.
Claridade de código (1-line where vs 6-line search)
Redução drástica da quantidade de código; fica mais claro o que cada pedaço fax e como
Reuso de métodos
Métodos e macros podem ser reutilizadas com mais facilidade.
23. Formatando uma resposta JSON de acordo com permissões de usuário.
Usando foreach()
Dois laços de repetição
3 níveis de identação
Saída intermediária
Pra que serve isso?
Não está claro.
Variáveis intermediárias
25. Formatando uma resposta JSON de acordo com permissões de usuário.
Usando Collection
Único nível de identação.
Única saída lógica
Output claro e flexível
Expressão clara
Injeção clara de
dependência
28. Validando e calculando um carrinho de compras.
Usando foreach()
Nível adicional de identação
Mutação de estado / variável
externa
Variáveis intermediária
Repetição de tratamento
30. Validando e calculando um carrinho de compras.
Usando Collection
Expressão clara indicando
filtragem
Abstração injetável do
storage
Expressão clara, outras
infos disponíveis
Só um nível de identação
Função
reutilizável
37. Lendo e processando um arquivo CSV
Usando Collection
Rotina simples para fazer
o parsing do CSV
Pula a primeira linha
(cabeçalho)
Expressão clara que
combina os valores com o
cabeçalho
Expressão clara e sem
variável intermediária
1 nível de identação
38. Performance
- Baixo impacto de performance: a biblioteca atua apenas como "wrapper"
Sugestão: veja o código-fonte da classe e entenda o que é feito em cada operação:
https://github.com/laravel/framework/blob/5.5/src/Illuminate/Support/Collection.php
- Certas operações (como processar arquivos grandes) podem ter impacto direto em performance
ao tornar necessário a representação dos dados inteiramente em arrays (ao invés de operações
chunk-by-chunk, como o fgetcsv() para CSV)
- Para dados oriundos de banco de dados, as Collections se encaixam bem com o
PDOStatement::fetch(). O ORM do Laravel retorna nativamente collections (uma classe
derivada com operações mais performáticas sobre retornos de queries).
39. Para concluir
- O pattern de Collections te ajuda a deixar o código mais limpo, conciso e claro;
- A biblioteca de Collections do Laravel é uma ferramenta poderosa e flexível, com uma centena de
métodos para todo tipo de operação: não precisa reinventar a roda!
- Vale a pena ficar de olho em oportunidades para refatorar seu código com Collections;
- As Collections não substituem 100% dos usos de loops, mas podem simplificar dezenas de
padrões comuns em aplicações web, APIs e daemons.