Tenho visto muito recentemente sobre programação funcional e Clojure parece particularmente interessante. Embora eu 'entenda' a descrição básica do que é, não consigo descobrir como eu iria usá-lo no dia a dia como um desenvolvedor web, se é que posso. Muito do que li se concentra no lado matemático da programação funcional, em vez de situações de programação típicas encontradas em OO regular.
Eu peguei o lado errado da vara? A programação funcional é totalmente desvinculada do desenvolvimento web? Se não, há exemplos de uso 'para a web'?
clojure
functional-programming
Hates_
fonte
fonte
A programação funcional combina muito bem com os aplicativos da web. O aplicativo da web recebe uma solicitação HTTP e produz um resultado HTML. Isso pode ser considerado uma função das solicitações às páginas.
Compare com os aplicativos de desktop, onde normalmente temos um processo de longa execução, uma IU com estado e fluxo de dados em várias direções. Isso é mais adequado para OO, que se preocupa com objetos com passagem de estado e mensagem.
fonte
Não vejo por que não - contanto que você forneça HTML compatível com os padrões aos navegadores, eles não se importam com o que você usou para produzi-lo, seja uma linguagem funcional, uma linguagem imperativa ou macacos treinados.
fonte
A programação funcional pura pode não ser mapeada muito bem no ambiente de programação da web. Mas o principal impedimento é apenas a falta de infraestrutura (frameworks e APIs). Passará muito tempo (provavelmente nunca, honestamente) antes que uma linguagem funcional tenha um ambiente de programação da Web tão rico como Java, Python ou Ruby.
Dito isso, existem algumas opções.
Não tenho nenhuma experiência com nenhum desses. Talvez os comentaristas possam opinar sobre o que funcionou bem para eles.
fonte
O Twitter reescreveu seu back-end em Scala , uma linguagem JVM que suporta os paradigmas orientado a objeto e funcional.
Além disso, a estrutura da web do Lift é escrita em Scala.
fonte
Para Clojure, há uma inicialização interessante (TheDeadline) que foi desenvolvida usando Clojure e Google App Engine. Eles têm um bom ppt no Slideshare e uma entrevista no InfoQ.
Para uma boa discussão sobre como implantar Clojure com GAE: http://news.ycombinator.com/item?id=1239788
Pelo que eu sei, Clojure tem algumas bibliotecas de desenvolvimento web. Conjure Anel Compojure
Espero que isso responda a algumas de suas perguntas =) (também estou começando ..)
Atenciosamente, Ryan
fonte
Não está totalmente alheio ao desenvolvimento web. O aplicativo no servidor pode muito bem tirar proveito de recursos funcionais como fechamentos, funções de ordem superior, imutabilidade, transparência referencial ... por exemplo, você com certeza tem coleções que precisa transformar ou manipular de qualquer maneira. A programação funcional ajuda aqui, e é por uma razão que seus idiomas estão penetrando nas linguagens convencionais. Os recursos funcionais ajudam na concisão, testabilidade, paralelização e também podem fornecer soluções nativas para problemas que, de outra forma, você resolveria com padrões.
Atualização: existem frameworks para linguagens funcionais também. Weblocks para Common Lisp, Lift para Scala. Esses são os que eu já ouvi, pode haver mais ... no entanto, você não precisa necessariamente ser puramente funcional - por exemplo, Scala não é puro e deve funcionar com qualquer estrutura Java, você ainda será capaz usar programação funcional para a camada de negócios, etc.
fonte
Confira Ur / Web . É muito rápido e seu sistema de tipo estático sabe sobre coisas como HTML e SQL para que possa garantir todos os tipos de coisas boas sobre segurança.
fonte
Erlang parece estar sendo muito utilizado em algumas das infraestruturas para aplicativos da web escaláveis. os bancos de dados CouchDB e Riak são escritos principalmente em Erlang, assim como o servidor de enfileiramento de mensagens RabbitMQ. Uma das chaves para seu sucesso é que ele lida com a simultaneidade por meio da passagem de mensagens, sem nenhum estado mutável compartilhado. É essa maneira de pensar sobre os problemas que é útil, mais do que qualquer linguagem de programação funcional em particular.
Ou, olhe para MapReduce. É uma maneira muito funcional de ver a computação, mesmo que suas funções map e reduza sejam internamente stateful - e por esse motivo, é uma boa opção para consultar grandes conjuntos de dados de forma distribuída e tolerante a falhas.
De qualquer forma, escolha o que parecer mais prático para você. Mas sempre mantenha a programação funcional em mente, porque você nunca sabe quando ela pode ser útil.
fonte
Eles estão fazendo coisas muito legais na Universidade de Edimburgo com programação funcional para a web.
fonte
Linguagem e paradigma não importam para aplicativos da web, eles são todos igualmente bons e ruins. Se você está procurando um motivo para aprender um novo paradigma, mergulhe nele. Meu conselho seria analisar o problema que você está tentando resolver e selecionar o conjunto de ferramentas apropriado.
fonte
Javascript (a linguagem da parte FE da web e cada vez mais o BE também) não é funcional por si só, mas as funções são funcionais de primeira ordem
fonte
Acabamos de lançar uma planilha on-line em que o back-end é escrito inteiramente em Erlang.
http://hypernumbers.com
Por qualquer padrão, este é um dos aplicativos da web mais complexos que você pode construir com uma GUI enorme com complexidade mental.
fonte
Aqui está uma experiência de desenvolvedor web na construção de aplicativos web usando Haskell . Embora as linguagens funcionais sejam muito seguras quanto a tipos e tenham boa concorrência, sempre faltou a melhor API da raça, uma vez que tem sido a queridinha da academia por muito tempo e ainda deve ser fortemente adotada no mundo real. Espero que não esteja muito longe. Erlang já havia entrado nisso.
fonte
A razão pela qual a programação funcional é popular com a programação da web é que ela explicita o estado compartilhado e mutável e permite ao programador expressar as partes puramente funcionais como funções puras. As funções puras têm a vantagem de serem muito simples de executar em paralelo - pois não têm efeitos colaterais.
Pelo menos esse é o meu motivo.
fonte
Outra resposta curta: http://www.mlstate.com - uma plataforma de desenvolvimento web completa, baseada em FP. A semântica limpa da linguagem permite todos os tipos de análises automatizadas de proteção e segurança, otimizações, etc.
Advertência: eu trabalho lá.
fonte
Linguagens funcionais podem não ser diretamente úteis para construir ótimos aplicativos, mas usamos o paradigma de programação funcional fortemente para construir nossos aplicativos. A programação funcional pura impõe a restrição de "sem efeitos colaterais". Isso garante que chamadas funcionais puras produzirão o mesmo resultado em qualquer ordem em que forem chamadas. Isso não é ideal para desenvolvimento web, mas se a programação funcional for combinada com um sistema de mudança de estado, um aplicativo web robusto pode ser construído. Dê uma olhada no meu artigo para mais detalhes: FAST Server Também estes slides .
fonte
Sim, como a programação funcional pode ser feita em qualquer linguagem, você pode usá-la como um desenvolvedor web no dia a dia.
Você deveria? depende do problema que você está resolvendo. A programação funcional é um paradigma de programação e onde você deve usá-la depende do problema que está resolvendo.
Para tornar a decisão mais simples, pense se é mais fácil resolver algum problema usando conceitos de OOPs, onde encapsulamento, polimorfismo, herança como recursos podem tornar sua vida mais fácil?
Se sim, não vá para a programação funcional lá e simplesmente use OOPs. Se seu aplicativo vai realizar cálculos / cálculos / lógicas de negócios complexas e envolver processamento altamente simultâneo, a programação funcional pode oferecer muitas ferramentas e vantagens em tais casos.
Esses são apenas estilos diferentes de construção da estrutura e dos elementos dos programas, portanto, trata-se de usar a ferramenta certa para o trabalho certo. Resto, tudo pode ser feito usando qualquer coisa.
Programação funcional em desenvolvimento web:
JavaScript oferece suporte à programação funcional e é muito favorável quando estamos no contexto de desenvolvimento da web. A estrutura do Reat é fortemente influenciada por princípios de programação funcional e é usada em muitos aplicativos da web por aí.
Além disso, você pode encontrar muitos aplicativos da web criados e em execução com estruturas desenvolvidas em linguagens de programação funcionais listadas abaixo:
• WebSharper (F #)
• Snap (Haskell)
• Elevação (Scala)
• Ocsigen (OCaml)
• Chicago Boss, Zotonic (erLang)
Espero que minha resposta ajude alguém.
fonte
Você provavelmente não vai usar e não deve usá-lo, mas quando disser que alguém sempre encontrará uma exceção à regra (Viaweb, etc.). Basicamente, não existe uma "super linguagem", existem apenas linhas de código de trabalho, geralmente em "Blub". Até mesmo Paul Graham diz que o principal (na verdade, único) benefício de um Lisp é a capacidade de prototipar rapidamente.
Além disso, "super linguagens" geralmente interferem em vez de aumentar a legibilidade do código, significando que o único "gênio" que o escreveu deve mantê-lo para sempre, já que ninguém mais pode entendê-lo, especialmente porque é provável que ele o escreva em seu próprio dialeto modificado. Isso diminui o escopo possível de qualquer projeto, o que significa que, mesmo que coisas novas e inovadoras possam ser feitas, elas não são extensíveis e, portanto, permanecem em uma escala relativamente pequena (como Hacker News in Arc).
Isso não quer dizer que alguém não possa ter uma ideia genial e implementá-la em um estilo incompreensível que então pode ser reescrito em Blub e estendido para que muitas pessoas possam se beneficiar com isso. Na verdade, isso é exatamente o que aconteceu em todas as histórias de sucesso do Lisp, sem mencionar todos os filósofos famosos que já viveram. Mas é claro que, se você for um "gênio", também poderá criar um protótipo de seu produto de outra maneira.
Quanto ao FP na JVM, existem coisas limitadas, mas interessantes, possíveis. Embora eu o usasse pessoalmente apenas para prototipagem, é possível que você tenha um caso de uso (geralmente algo relacionado a multi-threading) em que ele forneça algumas melhorias.
fonte