Por que há tanto burburinho sobre fechamentos? [fechadas]
9
Por que há tanto burburinho sobre fechamentos entre os desenvolvedores? Na minha carreira, nunca os usei intencionalmente, embora não entenda claramente o que são.
UPD: apenas para esclarecer. A questão é por que o conceito de fechamento se tornou tão complicado hoje em dia.
Como você seria capaz de usar intencionalmente algo que não sabe o que é? Então, basicamente, você deve primeiro perguntar (ou pesquisar) o que são fechamentos.
Steven Jeuris
11
Você leu o artigo da wikipedia? O que você deixou de entender sobre isso?
Kevin cline #
2
Em que sua carreira se baseia?
4
Que tipo de pergunta é essa? O que "zumbido"? O que você não entende? Por que você não fez essa pergunta?
Aaronaught
4
Em defesa do OP, o fechamento é um conceito antigo, mas apenas recentemente eles têm sido o assunto da cidade, por assim dizer. E o conceito é realmente muito simples para quem aprendeu um pouco mais de matemática, também não consigo entender por que as pessoas falam sobre eles como se fossem algo muito difícil de entender. Talvez seja apenas uma maneira de parecer mais inteligente: "olha, eu entro em fechamentos que são tão difíceis de entalhar, então eu balanço".
6238 quant_dev
Respostas:
22
Um fechamento é um código que lembra o mundo de onde veio e ainda é utilizável para onde foi trazido.
Um exemplo é definir uma função anônima em Java, que sabe que está dentro do YourObject e pode manipular seus métodos e funções. Esta função é então entregue para, por exemplo, Swing, onde é aprofundada, por exemplo, um Ouvinte, mas ainda tem uma linha de vida de volta às raízes.
Esse é um conceito muito poderoso, pois permite que você entregue um código que - sem o conhecimento do código que o usa - pode alcançar outras partes do código.
Sim. É uma maneira de injetar não apenas o procedimento, mas também o estado, em outro código. Isso permite um alto grau de flexibilidade na criação de algoritmos; você pode criar métodos de modelo que dependem de sub-rotinas com estado, as quais talvez nem saibam em tempo de compilação. A desvantagem é que o link para a fonte original desse método e, portanto, o estado, pode ser quebrado sem que o método consumidor saiba disso; Quando isso acontece, você encontra erros de tempo de execução difíceis de encontrar.
Os fechamentos são apenas algo para resolver uma variedade de problemas de maneira elegante. Na verdade, nas linguagens de programação onde não existem fechamentos, são criadas técnicas para implementar funções semelhantes.
Basta pensar em functores em C ++ ou Runnables em Java. São apenas técnicas que permitem funcionalidades semelhantes aos fechamentos. Algum tipo de "fechamento manual".
Os fechamentos estão ficando mais populares porque são integrados a idiomas populares: o Javascript está crescendo devido a aplicativos online (como o google doc, por exemplo), o C # o implementou, o PHP o implementou desde 5.3 e assim por diante.
Agora que os fechamentos estão disponíveis em mais e mais tecnologias, torna-se bastante claro que mais e mais pessoas estão interessadas neles.
Então agora, o que são fechamentos? Isto é bem simples. Um fechamento é uma função e um contexto para executá-lo. Isso é manipulado como um objeto. Por que isso é útil? Isso é útil para conectar seu próprio código ao código existente.
Aqui estão duas situações comuns que exigem isso: quando as ações são gerenciadas por outro trecho de código, como em multithreading com um pool de encadeamentos, ou quando uma ação deve ser executada em um evento escolhido (geralmente usado em javascript para a interface do usuário).
Eu entendi você claramente? Existem alguns "fechamentos manuais" (não é realmente um fechamento, mas algo que se assemelha ao comportamento deles) e existem alguns "fechamentos VERDADEIROS"?
O fechamento é um recurso de linguagem. Como um idioma não possui esse recurso, você pode fechar manualmente usando as ferramentas fornecidas pelo idioma. Dizer que eles são verdadeiros ou não não é um debate muito interessante IMHO.
deadalnix
2
@gasan, você sempre pode sacar a montagem e executar manualmente o padrão desejado com um balde de instruções GOTO. Da mesma forma, você pode executar manualmente um loop "for" com um loop "while" (em C ++). Os níveis mais avançados e mais altos oferecem uma maneira padronizada de fazer coisas comuns.
6117 Philip
6
Eu vi uma citação divertida outro dia, foi na linha de "classes são dados com funções. Fechamentos são funções com dados".
Sim, é uma simplificação excessiva, mas ajuda a entender o ponto.
Respostas:
Um fechamento é um código que lembra o mundo de onde veio e ainda é utilizável para onde foi trazido.
Um exemplo é definir uma função anônima em Java, que sabe que está dentro do YourObject e pode manipular seus métodos e funções. Esta função é então entregue para, por exemplo, Swing, onde é aprofundada, por exemplo, um Ouvinte, mas ainda tem uma linha de vida de volta às raízes.
Esse é um conceito muito poderoso, pois permite que você entregue um código que - sem o conhecimento do código que o usa - pode alcançar outras partes do código.
fonte
Os fechamentos são apenas algo para resolver uma variedade de problemas de maneira elegante. Na verdade, nas linguagens de programação onde não existem fechamentos, são criadas técnicas para implementar funções semelhantes.
Basta pensar em functores em C ++ ou Runnables em Java. São apenas técnicas que permitem funcionalidades semelhantes aos fechamentos. Algum tipo de "fechamento manual".
Os fechamentos estão ficando mais populares porque são integrados a idiomas populares: o Javascript está crescendo devido a aplicativos online (como o google doc, por exemplo), o C # o implementou, o PHP o implementou desde 5.3 e assim por diante.
Agora que os fechamentos estão disponíveis em mais e mais tecnologias, torna-se bastante claro que mais e mais pessoas estão interessadas neles.
Então agora, o que são fechamentos? Isto é bem simples. Um fechamento é uma função e um contexto para executá-lo. Isso é manipulado como um objeto. Por que isso é útil? Isso é útil para conectar seu próprio código ao código existente.
Aqui estão duas situações comuns que exigem isso: quando as ações são gerenciadas por outro trecho de código, como em multithreading com um pool de encadeamentos, ou quando uma ação deve ser executada em um evento escolhido (geralmente usado em javascript para a interface do usuário).
fonte
Eu vi uma citação divertida outro dia, foi na linha de "classes são dados com funções. Fechamentos são funções com dados".
Sim, é uma simplificação excessiva, mas ajuda a entender o ponto.
fonte