[SP-pm] Como testar conexões remotas?

Eden Cardim edencardim at gmail.com
Mon Sep 20 07:32:35 PDT 2010


2010/9/20 Otávio Fernandes <otaviof em gmail.com>:
> Ou seja, para cada elemento informado ao map, ele valida o bloco "{}" (mesmo
> conceito utilizado em closures), e ao final, o resultado do map é outra lista
> porque ele aplicou esta closure em cada elemento.

O bloco do map na verdade não é uma closure, e não precisa ser, já que
o bloco do map está sempre preso no escopo da rotina invocante, então
o compilador otimiza a execução do loop, que seria mais lenta caso
fosse uma closure. Quando você cria funções map-like usando
protótipos, aí sim pode ser que seja uma closure, mas também pode ser
uma referência pruma subrotina comum ou anônima. map não aceita
nenhuma das três, só bloco mesmo, se você quiser executar uma closure
dentro do map você precisa fazer map { $my_closure->($_ ) } @list

> No entanto, o foreach segue uma abordagem imperativa, visto que você incia e
> tem controle total sobre loop.
>
> Na prática os dois tem o mesmo resultado, porem, como o Eden citou antes, o
> "map" pode ser mais eficiente para algumas situações. Particularmente, eu
> gosto de usar os dois, e dou mais prioridade para quem faz mais sentido
> naquele momento, uma abortagem funcional ou imperativa.

Na verdade, map é sempre mais eficiente, mas em algumas situações é
menos legível que um foreach. Inclusive, o fato de o usuário não ter o
controle do loop durante o map é que permite a otimização da execução,
na abordagem imperativa, as possibilidades de alteração do caminho de
execução dos blocos são imprevisíveis então não tem como o compilador
otimizar.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list