Nessa aula implementaremos um código utilizando os conceitos de funções anonimas estudadas nas aulas anteriores. |
FUNÇÕES PARA MANIPULAÇÃO DE ARRAYS QUE RECEBEM FUNÇÕES ANÔNIMA
O PHP tem definido algumas funções para manipularmos Arrays que tem definido o envio de uma função anônima como parâmetro. Essa funções, implementão algumas características e funcionalidades encontradas em linguagens funcionais.
Nesse momento, vamos estudar as funções array_map() e array_filter().
IMPLEMENTANDO A OPERAÇÃO EXTERNAMENTE
Um dos grandes benefícios das funções anônimas, é a capacidade que nós temos de implementar externamente ações que irão interferir no processamento interno sem fazer qualquer alteração nessa função.
Vamos supor uma situação onde existe uma lista de valores e é necessário realizar algum processamento sobre os itens. Pra isso, nós utilizarmos um laço de repetição e a cada item realizarmos uma determinada operação. Essa é uma forma estática de percorrer os elemtnos e realizar um determinado tratamento sobre os mesmos.
Agora, nós podemos trabalhar de tal maneira onde não será implementado dentro da função o tratamento que sera dado a cada elemento da lista, o que será feito, é a passagem do elemento através de uma função anônima que será recebida como parâmetro. Dessa forma, nós temos que o processamento irá ocorrer externamente e quem irá implementar o mesmo, não precisa conhecer o funcionamento interno da função e nem ter acesso ao seu código.
Um detalhe das funções anônimas é que a expicação é complexa, enquanto a implementação geralmente é simples.
$quadrado = function($num){
return $num * $num;
};
$cubo = function($num) use ($quadrado){
return $quadrado($num) * $num;
};
$soma = function($num){
return $num + $num;
};
function processa_lista($lista, $func){
foreach($lista as &$item)
$item = $func($item);
return $lista;
}
print_r(processa_lista(range(1, 10), $soma));
FUNÇÕES PHP E FUNÇÕES ANÔNIMAS
O PHP possui algumas funções em que é necessário passar como parâmetro uma função anônima. Por exemplo, existe algumas funções para manipulação de Arrays em que o PHP faz o trabalho pesado e assim, basta implementar uma função anônima e passarmos a mesma como parâmetro para obter algum resultado.
FUNÇÃO array_map()
A função array_map() tem por objetivo executar uma determinada função em todos elementos contidos em nosso Array. Então, a função anônima que nós passarmos como parâmetro será aplicada para cada elemento da nossa estrutura.
DEFINIÇÃO
array array_map(callback $callback, array $arr1)
$arr = [1, 2, 3, 4, 5];
$f = function($x) {
return $x * $x;
}
$var_arr = array_map(f, $arr);
var_dump($var_arr);
FUNÇÃO array_filter()
A função array_filter() proporciona uma maneira fácil para filtrarmos elementos de um Array se baseando na condição implementada na função anônima que é passada como parâmetro. A função anônima, deverá retornar um valor booleano, se o valor for true, o elemento fará parte do novo Array, do contrário, nós temos que o elemento não será adicionado.
DEFINIÇÃO
array array_map(array $arr1, callback $callback)
//$lista = [1,2,3,4,5,6,7,8,9,10];
$lista = [1,2.21,"",9,4];
$f = function ($v) {
return is_int($v);
};
$lista_filtrada = array_filter( $lista, $f );
print_r( $lista_filtrada );
Note que estamos definindo a função com sendo um parâmetro de outra e também, é interessante observar que a implementação da função, ocorre no local onde deve ser passado o parâmetro para outra função.
EXEMPLO FEITO EM AULA
#PRÁTICA - FUNÇÕES ANÔNIMAS
$quadrado = function($item){
return $item * $item;
};
$cubo = function($item)use($quadrado){
return $quadrado($item) * $item;
};
$soma = function($item){
return $item + $item;
};
function processa_lista($lista, $func){
foreach($lista as &$item){
$item = $func($item);
}
return $lista;
}
echo "QUADRADO\n";
print_r(processa_lista(range(1,10), $quadrado));
echo "\nCUBO\n";
print_r(processa_lista(range(1,10), $cubo));
echo "\nSOMA\n";
print_r(processa_lista(range(1,10), $soma));
//print_r(processa_lista(
// range(1,10),
// function($item){
// return $item - 10;
// }
//));
Tags curso, php, função, função anonima, lambda, closures, função lambda, função de primeira ordem, função de ordem superior
Comentários
comments powered by Disqus