Foi-me pedido que a vantagem ou desvantagem no uso de funções anônimas ou in-line (ou onfly), muito usado em Javascript, e agora com 5,3, também em PHP.
Uma função inline, ou anônimo, porque ele não tem - de fato - um nome, é uma forma rápida de escrever alguns procedimentos, o recuo árvore exemplo de retorno de chamada sequências. Quase todos os idiomas suportam funções deste escrito, para limitar cada um com suas peculiaridades e restrições. Eles também podem ter diferentes nomes e os detalhes de sintaxe, tais como os blocos chamadas em Objective-C.
No entanto, restringir os casos à Javascript e PHP, eles parecem quase idênticas:
1 2 3 4 | / * Com jQuery * / ) . click ( function ( ) { $ ('Div botão #'). Click (function () { 'Clicked' ) ; alert ('clicado'); }); |
1 2 3 4 | / * No WordPress, por exemplo * / , function ( ) { add_filter ('wp_head', function () { ; echo 'teste'; }); |
Os exemplos acima poderia também ser escrito da seguinte forma:
1 2 3 4 5 | / * Com jQuery * / função onClick () { 'Clicked' ) ; alert ('clicado'); } ) . click ( onCLick ) ; $ ('Div botão #') Click (onClick).; |
1 2 3 4 5 | / * No WordPress, por exemplo * / my_wp_head function () { ; echo 'teste'; } , 'my_wp_head' ) ; add_filter ('wp_head', 'my_wp_head'); |
Como é evidente, a implementação de funções, anônimos ou não, permanece a mesma eo ganho na quantidade de código é escrito objetivamente trivial, especialmente em grandes projetos (no fim de excluir o nome da função).
Se fôssemos julgar os dois exemplos acima, sem pedir dúvidas, a comparação será jogar em um nível subjetivo e estilo, alguns gostam de evitar funções anônimas, porque muitas vezes tornam o código difícil de ler ou que prefere porque eles amam o código compacto e com algumas poucas chamadas de função.
No entanto, existem algumas considerações, algumas específicas para determinadas circunstâncias, que - pelo menos para mim pessoalmente - eles tendem a me evitar, ou pelo menos restringir, o uso de funções anônimas.
1. Legibilidade
A experiência direta, especialmente em JavaScript, o uso de funções anônimas, que precisam de uma boa chamada para outro e outro, torna o código claro, o risco de cometer erros é trivial, pois perdeu de vista o encerramento de uma cinta ou não existe a percepção de estar em uma função diferente do que o que precede, etc ..., etc ....
Além disso, o IDE de desenvolvimento, é claro, difícil de visualizar correctamente a lista de funções de um código que usa pesadamente funções anônimas: eles têm que colocar um nome na lista ...
2. Reutilização
Uma função anônima, ou seja, o código que implementa-lo, não pode ser usado mais de uma vez! Parece óbvio, mas isso obviamente não é bom. Em reflexão, é curioso que uma função, que por definição, tem o recurso para ser usado n vezes, sua falta esta propriedade importante no uso da função anônima, mas todos em tudo o que queria em parte.
Usando o exemplo acima do PHP, mas o conceito também é válido para JavaScript, aqui está o que iria acontecer em dois casos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | / * Primeiro filtro * / , function ( ) { add_filter ('wp_head', function () { / / ... / Implementação / Same / / ... }); / * Filtro Outros * / , function ( ) { add_filter ('wp_footer', function () { / / ... / Implementação / Same / / ... }); / * Filtro de ... Mais * / , function ( ) { add_filter ('wp_sub_footer', function () { / / ... / Implementação / Same / / ... }); |
Obviamente, se você encontrar um bug, ou melhora o código em uma função anônima, você deve duplicar essas mudanças em todos os outros casos. A situação seria diferente com um código padrão:
1 2 3 4 5 6 7 | / * Comum * / my_wp_head function () { ; echo 'teste'; } , 'my_wp_head' ) ; add_filter ('wp_head', 'my_wp_head'); , 'my_wp_head' ) ; add_filter ('wp_footer', 'my_wp_head'); , 'my_wp_head' ) ; add_filter ('wp_sub_footer', 'my_wp_head'); |
Neste caso, paradoxalmente, salvou um monte de código escrito.
NOTA: Eu acho que é óbvio que nenhum desenvolvedor deixaria três ou mais blocos idênticos de código. Assim que você perceber que um pedaço de código é repetido mais de uma vez, é natural para transformá-lo a ninguém - na verdade - em operação, com nome e sobrenome, por isso quanto tempo queremos ser chamado.
3. Identificação
Por definição, eles não são identificáveis, pode ser usado onfly mas nenhuma referência ou identificados, tal como mencionado no parágrafo anterior. Isto pode ser um obstáculo em casos especiais tais como:
1 2 3 4 5 6 7 8 | / * Comum * / my_wp_head function () { ; echo 'teste'; } , 'my_wp_head' ) ; add_filter ('wp_head', 'my_wp_head'); ... ... , 'my_wp_head' ) ; remove_filter ('wp_head', 'my_wp_head'); |
Aqui, por exemplo, temos uma função remove_filter () `que pretende completar sua tarefa, o código do filtro (`` wp_head), mas também o nome da função! Este, com a função anônima, seria impossível.
Este último exemplo talvez seja o mais esclarecedor porque, no caso do PHP e do WordPress, há realmente uma grande quantidade de filtros que você definir "on the fly" uma vez e depois bem você se conforma com o uso de funções anônimas. I, por exemplo, é, nestes casos, que muitas vezes abuso. No entanto, como já aconteceu comigo, em projectos subsequentes do código pode acontecer - muitas vezes - de ter de fazer a chamada anônima para um nome de função.
Em conclusão, portanto, a função anônima é uma ferramenta de grande desenvolvimento, proporcionando muitas vezes - durante o primeiro rascunho do código - definitivamente uma velocidade maior do que a abordagem "tudo-em funções '. Como acontece muitas vezes, o abuso não é conveniente, tanto em termos de funcionalidade e legibilidade do código. Além disso, em alguns contextos, em vez de ser desencorajado a sua utilização se torna impraticável.










Não há comentários para este post
Deixe um comentário