Slide 1

Slide 1 text

Collections, uma solução?! por Gabriel Caruso

Slide 2

Slide 2 text

$totalVendas = 0; $minimoVendas = 10000; foreach ($funcionarios as $funcionario) { $setorFuncionario = $funcionario->setor; if ($setorFuncionario === 'Vendas') { $clientes = $funcionario->clientes; foreach ($clientes as $cliente) { $clienteTotalGasto = 0; foreach ($cliente->pedidos as $pedido) { $clienteTotalGasto += $pedido->total; } if ($clienteTotalGasto >= $minimoVendas) { $totalVendas += $clienteTotalGasto; } } } } return $totalVendas;

Slide 3

Slide 3 text

Higher-order Functions

Slide 4

Slide 4 text

Route::get('/', function () { return view('bem-vindo'); });

Slide 5

Slide 5 text

Schema::create('artigos', function (Blueprint $table) { $table->increments('id'); $table->string('titulo'); $table->text('texto'); $table->timestamps(); });

Slide 6

Slide 6 text

DB::transaction(function () use ($user) { $user->subscription()->delete(); $user->update([ 'cancelado' => now() ]); });

Slide 7

Slide 7 text

$('p').on('click', function () { alert('O parágrafo foi clicado.'); });

Slide 8

Slide 8 text

Qual o poder das Higher-order Functions?

Slide 9

Slide 9 text

$emailsClientes = []; foreach ($clientes as $cliente) { $emailsClientes[] = $cliente->email; } return $emailsClientes;

Slide 10

Slide 10 text

$repositorios = []; foreach ($githubRepositorios as $repo) { $repositorios[] = [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; } return $repositorios;

Slide 11

Slide 11 text

$emailsClientes = []; foreach ($clientes as $cliente) { $emailsClientes[] = $cliente->email; } return $emailsClientes;

Slide 12

Slide 12 text

$emailsClientes = []; foreach ($clientes as $cliente) { $email = $cliente->email; $emailsClientes[] = $email; } return $emailsClientes;

Slide 13

Slide 13 text

$repositorios = []; foreach ($githubRepositorios as $repo) { $repositorios[] = [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; } return $repositorios;

Slide 14

Slide 14 text

$repositorios = []; foreach ($githubRepositorios as $repo) { $repositorio = [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; $repositorios[] = $repositorio; } return $repositorios;

Slide 15

Slide 15 text

$repositorios = []; foreach ($githubRepositorios as $repo) { $repositorio = [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; $repositorios[] = $repositorio; } return $repositorios;

Slide 16

Slide 16 text

$resultados = []; foreach ($itens as $item) { $resultado = [ 'nome' => $item->name, 'contribuicoes' => $item->forks + $item->pull_requests, ]; $resultados[] = $resultado; } return $resultados;

Slide 17

Slide 17 text

$resultados = []; foreach ($itens as $item) { $resultado = $item->email; $resultados[] = $resultado; } return $resultados;

Slide 18

Slide 18 text

$callback = function ($item) { return $item->email; }; $resultados = []; foreach ($itens as $item) { $resultado = $callback($item); $resultados[] = $resultado; } return $resultados;

Slide 19

Slide 19 text

$resultados = []; foreach ($itens as $item) { $resultado = [ 'nome' => $item->name, 'contribuicoes' => $item->forks + $item->pull_requests, ]; $resultados[] = $resultado; } return $resultados;

Slide 20

Slide 20 text

$callback = function ($item) { return [ 'nome' => $item->name, 'contribuicoes' => $item->forks + $item->pull_requests, ]; }; $resultados = []; foreach ($itens as $item) { $resultado = $callback($item); $resultados[] = $resultado; } return $resultados;

Slide 21

Slide 21 text

$callback = function ($item) { return [ 'nome' => $item->name, 'contribuicoes' => $item->forks + $item->pull_requests, ]; }; $resultados = []; foreach ($itens as $item) { $resultado = $callback($item); $resultados[] = $resultado; } return $resultados;

Slide 22

Slide 22 text

$callback = function ($item) { return $item->email; }; $resultados = []; foreach ($itens as $item) { $resultado = $callback($item); $resultados[] = $resultado; } return $resultados;

Slide 23

Slide 23 text

$resultados = []; foreach ($itens as $item) { $resultado = $callback($item); $resultados[] = $resultado; } return $resultados; } function array_map($callback, array $itens): array {

Slide 24

Slide 24 text

$emailsClientes = []; foreach ($clientes as $cliente) { $emailsClientes[] = $cliente->email; } return $emailsClientes;

Slide 25

Slide 25 text

$emailsClientes = array_map(function ($cliente) { return $cliente->email; }, $clientes);

Slide 26

Slide 26 text

$repositorios = []; foreach ($githubRepositorios as $repo) { $repositorios[] = [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; } return $repositorios;

Slide 27

Slide 27 text

$repositorios = array_map(function ($repo) { return [ 'nome' => $repo->name, 'contribuicoes' => $repo->forks + $repo->pull_requests, ]; }, $githubRepositorios);

Slide 28

Slide 28 text

Mais uma...

Slide 29

Slide 29 text

$repositoriosPublicos = []; foreach ($githubRepositorios as $repo) { if ($repo->isPublic()) { $repositoriosPublicos[] = $repo; } } return $repositoriosPublicos;

Slide 30

Slide 30 text

$repositoriosPopulares = []; foreach ($githubRepositorios as $repo) { if ($repo->stars >= 1000) { $repositoriosPopulares[] = $repo; } } return $repositoriosPopulares;

Slide 31

Slide 31 text

$resultados = []; foreach ($itens as $item) { if ($item->stars >= 1000) { $resultados[] = $item; } } return $resultados;

Slide 32

Slide 32 text

$repositoriosPublicos = []; foreach ($githubRepositorios as $repo) { if ($repo->isPublic()) { $repositoriosPublicos[] = $repo; } } return $repositoriosPublicos;

Slide 33

Slide 33 text

$resultados = []; foreach ($itens as $item) { if ($item->isPublic()) { $resultados[] = $item; } } return $resultados;

Slide 34

Slide 34 text

$resultados = []; foreach ($itens as $item) { if ($item->isPublic()) { $resultados[] = $item; } } return $resultados;

Slide 35

Slide 35 text

$resultados = []; foreach ($itens as $item) { if ($item->stars >= 1000) { $resultados[] = $item; } } return $resultados;

Slide 36

Slide 36 text

$callback = function ($item) { return $item->stars >= 1000; }; $resultados = []; foreach ($itens as $item) { if ($callback($item)) { $resultados[] = $item; } } return $resultados;

Slide 37

Slide 37 text

$resultados = []; foreach ($itens as $item) { if ($item->isPublic()) { $resultados[] = $item; } } return $resultados;

Slide 38

Slide 38 text

$callback = function ($item) { return $item->isPublic(); }; $resultados = []; foreach ($itens as $item) { if ($callback($item)) { $resultados[] = $item; } } return $resultados;

Slide 39

Slide 39 text

$callback = function ($item) { return $item->isPublic(); }; $resultados = []; foreach ($itens as $item) { if ($callback($item)) { $resultados[] = $item; } } return $resultados;

Slide 40

Slide 40 text

$callback = function ($item) { return $item->stars >= 1000; }; $resultados = []; foreach ($itens as $item) { if ($callback($item)) { $resultados[] = $item; } } return $resultados;

Slide 41

Slide 41 text

$resultados = []; foreach ($itens as $item) { if ($callback($item)) { $resultados[] = $item; } } return $resultados; function array_filter(array $itens, $callback): array { }

Slide 42

Slide 42 text

$repositoriosPublicos = []; foreach ($githubRepositorios as $repo) { if ($repo->isPublic()) { $repositoriosPublicos[] = $repo; } } return $repositoriosPublicos;

Slide 43

Slide 43 text

$repositoriosPublicos = array_filter($githubRepositorios, function ($repo) { return $repo->isPublic(); });

Slide 44

Slide 44 text

$repositoriosPopulares = []; foreach ($githubRepositorios as $repo) { if ($repo->stars >= 1000) { $repositoriosPopulares[] = $repo; } } return $repositoriosPopulares;

Slide 45

Slide 45 text

$repositoriosPopulares = array_filter($githubRepositorios, function ($repo) { return $repo->stars >= 1000; });

Slide 46

Slide 46 text

Vamos tornar as coisas mais interessantes!

Slide 47

Slide 47 text

function getTIEmails($funcionarios) { $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 48

Slide 48 text

function getTIEmails($funcionarios) { $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; } array_map

Slide 49

Slide 49 text

function getTIEmails($funcionarios) { $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; } array_filter

Slide 50

Slide 50 text

function getTIEmails($funcionarios) { $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 51

Slide 51 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 52

Slide 52 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 53

Slide 53 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 54

Slide 54 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 55

Slide 55 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 56

Slide 56 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { $emails[] = $funcionario->email; } return $emails; }

Slide 57

Slide 57 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { $emails[] = $funcionario->email; } return $emails; }

Slide 58

Slide 58 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { $emails[] = $funcionario->email; } return $emails; }

Slide 59

Slide 59 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = []; foreach ($funcionariosTI as $funcionario) { $emails[] = $funcionario->email; } return $emails; }

Slide 60

Slide 60 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 61

Slide 61 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 62

Slide 62 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 63

Slide 63 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 64

Slide 64 text

Inline Temp

Slide 65

Slide 65 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 66

Slide 66 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); return array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); }

Slide 67

Slide 67 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); return array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); }

Slide 68

Slide 68 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); return array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); }

Slide 69

Slide 69 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); return array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); }

Slide 70

Slide 70 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); return array_map(function ($funcionario) { return $funcionario->email; }, array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; })); }

Slide 71

Slide 71 text

function getTIEmails($funcionarios) { return array_map(function ($funcionario) { return $funcionario->email; }, array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; })); }

Slide 72

Slide 72 text

function getTIEmails($funcionarios) { return array_map(function ($funcionario) { return $funcionario->email; }, array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; })); }

Slide 73

Slide 73 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return lcfirst( str_replace(' ', '', ucwords(str_replace('_', ' ', $snakeString)) ) ); } # bemVindosALaraconfbrasil2017

Slide 74

Slide 74 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return $snakeString->str_replace('_', ' ') ->ucwords() ->str_replace(' ', '') ->lcfirst() } # bemVindosALaraconfbrasil2017

Slide 75

Slide 75 text

Pipe-operator

Slide 76

Slide 76 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return $snakeString->str_replace('_', ' ') ->ucwords() ->str_replace(' ', '') ->lcfirst() } # bemVindosALaraconfbrasil2017

Slide 77

Slide 77 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return $snakeString->str_replace('_', ' ') ->ucwords() ->str_replace(' ', '') ->lcfirst() } # bemVindosALaraconfbrasil2017

Slide 78

Slide 78 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return $snakeString|>str_replace('_', ' ') |>ucwords() |>str_replace(' ', '') |>lcfirst() } # bemVindosALaraconfbrasil2017

Slide 79

Slide 79 text

# bem_vindos_a_laraconfbrasil_2017 function toCamelCase($snakeString) { return $snakeString|>str_replace('_', ' ') |>ucwords($$) |>str_replace($$, ' ', '') |>lcfirst($$) } # bemVindosALaraconfbrasil2017

Slide 80

Slide 80 text

Collections

Slide 81

Slide 81 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 82

Slide 82 text

function getTIEmails($funcionarios) { $funcionariosTI = array_filter($funcionarios, function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 83

Slide 83 text

function getTIEmails($funcionarios) { $funcionariosTI = $funcionarios->filter(function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 84

Slide 84 text

function getTIEmails($funcionarios) { $funcionariosTI = $funcionarios->filter(function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = array_map(function ($funcionario) { return $funcionario->email; }, $funcionariosTI); return $emails; }

Slide 85

Slide 85 text

function getTIEmails($funcionarios) { $funcionariosTI = $funcionarios->filter(function ($funcionario) { return $funcionario->departamento === ‘TI’; }); $emails = $funcionariosTI->map(function ($funcionario) { return $funcionario->email; }); return $emails; }

Slide 86

Slide 86 text

function getTIEmails($funcionarios) { return $funcionarios->filter(function ($funcionario) { return $funcionario->departamento === ‘TI’; })->map(function ($funcionario) { return $funcionario->email; }); }

Slide 87

Slide 87 text

function getTIEmails($funcionarios) { $emails = []; foreach ($funcionarios as $funcionario) { if ($funcionario->departamento === ‘TI’) { $emails[] = $funcionario->email; } } return $emails; }

Slide 88

Slide 88 text

Vamos programar

Slide 89

Slide 89 text

tightenco/collect

Slide 90

Slide 90 text

ecrmnn/collect.js

Slide 91

Slide 91 text

Dúvidas?!