é impressão minha ou tanto java quanto c# estão em um caminho de se tornarem linguagens
funcionais por adicionarem Clousures, lambda calculus, (C# com linq) e várias outras features do mundo funcional ?
e será que essa mistura de paradigmas(OO e Funcional) no mesmo projeto não podem fazer os sistemas se tornarem mais díficeis de se fazer manutenção,
sendo mais complicado criar documentações, e facilitando a inserção de erros arquiteturais no projeto ?
[quote=johnny quest]é impressão minha ou tanto java quanto c# estão em um caminho de se tornarem linguagens
funcionais por adicionarem Clousures, lambda calculus, (C# com linq) e várias outras features do mundo funcional?[/quote]
Tomara, mas acho pouco provável. Linguagens funcionais não são exatamente uma tecnologia nova.
Na verdade, surgiram até mesmo antes das linguagens estruturadas.
[quote=johnny quest]e será que essa mistura de paradigmas(OO e Funcional) no mesmo projeto não podem fazer os sistemas se tornarem mais díficeis de se fazer manutenção,
sendo mais complicado criar documentações, e facilitando a inserção de erros arquiteturais no projeto ?[/quote]
Acho que sim. Misturas de paradigmas sempre causam algum tipo de estresse. Mas é um risco que geralmente vale a pena correr.
Sei lá. Acho que esses trecos de porgramação funcional dificultam até a legibilidade do código. Eu mesmo fiz um código em C# dia desses e coloquei uma expressão lambda no meio. Pensando na manuntenção eu estou considerando tirar isso e implementar a mesma solução de uma forma mais tradicional. Mas pode ser a minha falta de conhecimento em paradigmas funcionais.
Um dos problemas é que geralmente quem não conhece usa um lambda como uma espécie de “inner class anônima fácil de digitar”. Isso é tão verdade que parte da propaganda do lambda no Java (e no C++ também) é baseada exclusivamente nisso. E isso não é exatamente usar o paradigma funcional.
Já vi alguns códigos em LINQ que fazem um uso sério de lambda. Mas realmente, é muito legível para quem entende, mas pouco legível para quem não entende (a grande maioria dos programadores).
[quote=ViniGodoy]Um dos problemas é que geralmente quem não conhece usa um lambda como uma espécie de “inner class anônima fácil de digitar”. Isso é tão verdade que parte da propaganda do lambda no Java (e no C++ também) é baseada exclusivamente nisso. E isso não é exatamente usar o paradigma funcional.
Já vi alguns códigos em LINQ que fazem um uso sério de lambda. Mas realmente, é muito legível para quem entende, mas pouco legível para quem não entende (a grande maioria dos programadores).
[/quote]
Engraçado, eu estava lendo sobre isso ontem a noite. Eu imagino que essas linguagens modernas serão um misto entre as duas, mas somente funcional creio que não.
A lâmbda simplifica por demais um bloco de código. A primeira vista pode parecer estranho mas é questão de costume.
Fiquei impressionado com o que dá para fazer com esse linq. Até comecei a estudar o Entity Framework.
[quote]
Engraçado, eu estava lendo sobre isso ontem a noite. Eu imagino que essas linguagens modernas serão um misto entre as duas, mas somente funcional creio que não.
A lâmbda simplifica por demais um bloco de código. A primeira vista pode parecer estranho mas é questão de costume.
Fiquei impressionado com o que dá para fazer com esse linq. Até comecei a estudar o Entity Framework.[/quote]
Pelo grande avanço do conhecimento do paradigma OO, e por causa de muito código legado, pelo jeito as linguagens mais modernas serão hibridas mesmo.
Mas o que mais me impressinou no paradigma funcional, foi a forma elegante que foi resolvida o problema da execução de softwares em ambiente multithreads, sem precisar de Locks e jamais gerando dead locks ou race conditions. Com toda certeza essa seria uma feature que gostaria de ver no java.
[quote=johnny quest][quote]
Engraçado, eu estava lendo sobre isso ontem a noite. Eu imagino que essas linguagens modernas serão um misto entre as duas, mas somente funcional creio que não.
A lâmbda simplifica por demais um bloco de código. A primeira vista pode parecer estranho mas é questão de costume.
Fiquei impressionado com o que dá para fazer com esse linq. Até comecei a estudar o Entity Framework.[/quote]
Pelo grande avanço do conhecimento do paradigma OO, e por causa de muito código legado, pelo jeito as linguagens mais modernas serão hibridas mesmo.
Mas o que mais me impressinou no paradigma funcional, foi a forma elegante que foi resolvida o problema da execução de softwares em ambiente multithreads, sem precisar de Locks e jamais gerando dead locks ou race conditions. Com toda certeza essa seria uma feature que gostaria de ver no java.[/quote]
Eles também precisam levar em questão a qualidade do compilador. Não creio que seja possível criar um bom compilador para assembly com uma linguagem inteiramente funcional. Seria talvez preciso uma gramatica muito extensa. Posso estar enganado.
[quote=juliocbq]
Eles também precisam levar em questão a qualidade do compilador. Não creio que seja possível criar um bom compilador para assembly com uma linguagem inteiramente funcional. Seria talvez preciso uma gramatica muito extensa. Posso estar enganado.[/quote]
Se não estou enganado Haskell pode ser chamado de puramente funcional e possui aparentemente um ótimo compilador.
Geralmente dizem que a performance é próxima a C++.
(Apesar da maioria das linguagens se dizerem próximas de C++).
[quote=AbelBueno][quote=juliocbq]
Eles também precisam levar em questão a qualidade do compilador. Não creio que seja possível criar um bom compilador para assembly com uma linguagem inteiramente funcional. Seria talvez preciso uma gramatica muito extensa. Posso estar enganado.[/quote]
Se não estou enganado Haskell pode ser chamado de puramente funcional e possui aparentemente um ótimo compilador.
Geralmente dizem que a performance é próxima a C++.
(Apesar da maioria das linguagens se dizerem próximas de C++).
[/quote]
Comparando o ghc(gnu haskell) com o gcc(gnu c), o código gerado pelo primeiro ainda está atrás do segundo.
Imagino que o g++ ainda consiga bater esses dois.
[quote=ViniGodoy]Um dos problemas é que geralmente quem não conhece usa um lambda como uma espécie de “inner class anônima fácil de digitar”. Isso é tão verdade que parte da propaganda do lambda no Java (e no C++ também) é baseada exclusivamente nisso. E isso não é exatamente usar o paradigma funcional.
Já vi alguns códigos em LINQ que fazem um uso sério de lambda. Mas realmente, é muito legível para quem entende, mas pouco legível para quem não entende (a grande maioria dos programadores).
[/quote]
Essa dificuldade de leitura é mais do que natural. É fácil para quem não conhece inglês ler um texto em inglês? Com linguagens de programação não é diferente.
[quote=josenaldo]Essa dificuldade de leitura é mais do que natural. É fácil para quem não conhece inglês ler um texto em inglês? Com linguagens de programação não é diferente.
Com o tempo, as pessoas acostumam.[/quote]
O problema é que temos poucas escolas ensinando o pessoal a falar inglês.
[quote=ViniGodoy][quote=josenaldo]Essa dificuldade de leitura é mais do que natural. É fácil para quem não conhece inglês ler um texto em inglês? Com linguagens de programação não é diferente.
Com o tempo, as pessoas acostumam.[/quote]
O problema é que temos poucas escolas ensinando o pessoal a falar inglês. ;)[/quote]
Realmente… Estamos aprendendo inglês comprando livro e vendo o povo “falar” no Google. rs
Engraçado. Muito tem se falado à respeito de inserir elementos de programação funcional em linguagens OO. Mas e a programação orientada à aspectos? Por que não se tem tanto interesse nela? Pelo que eu andei vendo na internet sobre o assunto, me pareceu um paradigma legal.
O Microsoft MVC usa uma abordagem similar a de aspectos para tratamento de requisições. Você pode fazer algo como:
[code]public class UsuarioController {
[MySecurityPolicy]
public void CadastrarUsuario(int id) {
//Código para cadastrar usuário
}
}[/code]
Onde MySecurityPolicy é uma classe, implementada por você, que contém a política de acesso do usuário ao sistema. Se a requisição não sobreviver a essa política, o método CadastrarUsuario do controller nem sequer roda.
O Microsoft MVC usa uma abordagem similar a de aspectos para tratamento de requisições. Você pode fazer algo como:
[code]public class UsuarioController {
[MySecurityPolicy]
public void CadastrarUsuario(int id) {
//Código para cadastrar usuário
}
}[/code]
Onde MySecurityPolicy é uma classe, implementada por você, que contém a política de acesso do usuário ao sistema. Se a requisição não sobreviver a essa política, o método CadastrarUsuario do controller nem sequer roda.[/quote]
Hum, interessante. Mas bem que a POA poderia ser usada em mais linguagens.
O Microsoft MVC usa uma abordagem similar a de aspectos para tratamento de requisições. Você pode fazer algo como:
[code]public class UsuarioController {
[MySecurityPolicy]
public void CadastrarUsuario(int id) {
//Código para cadastrar usuário
}
}[/code]
Onde MySecurityPolicy é uma classe, implementada por você, que contém a política de acesso do usuário ao sistema. Se a requisição não sobreviver a essa política, o método CadastrarUsuario do controller nem sequer roda.[/quote]
Hum, interessante. Mas bem que a POA poderia ser usada em mais linguagens. [/quote]
Mas não será, enquanto a POE (Programação Orientada a Estagiário) e a POG (Precisa explicar?) dominarem o mercado.