O que é um bom caso de uso para o scala? [fechadas]

8

Em um projeto atual, configuramos a compilação para podermos misturar Java e Scala. Gostaria de usar mais Scala em nossa base de código para tornar o código mais legível e conciso. No processo, também aprenda o idioma entregando recursos reais.

Então, planejo usar o Scala em algumas aulas para mostrar seus benefícios e convencer outros desenvolvedores a usar o Scala também.

Para um servidor Web baseado em repouso ou um programa em geral, que tipo de estrutura de código se presta ao estilo de programação funcional do Scala.

Usman Ismail
fonte
7
-1: Sou a favor de aprender novos idiomas ( especialmente os mais funcionais hoje em dia) ... mas procurando um motivo para misturar um idioma e um paradigma diferentes no código de produção? Isso é não, não. Vá com um projeto pessoal ou com um aplicativo / utilitário / ferramenta separado que o gerenciamento assine ... no máximo.
Steven Evers
1
O projeto está em fase pré-alfa e temos um mandato para experimentar.
perfil completo de Usman Ismail
2
@SnOrfus: "Isso é não, não.": Eu vejo isso como uma boa maneira de trabalhar com código legado (em vez de esperar pela próxima revisão compatível com versões anteriores do idioma em que o código legado está escrito).
Giorgio
2
Pedir uma lista de coisas (como classes e casos de uso) geralmente não é uma boa opção para este site. Eu acho que você tem uma boa pergunta lá, no entanto. Você pode tentar reformular.
Karl Bielefeldt
1
Se seu aplicativo usa concorrência e comunicação fortemente, que você pode querer olhar para akka.io . Caso contrário, tente escrever um exemplo no qual você faz uso pesado de coleções com transformações complexas, como filtragem, dobragem e mapeamento. Para isso, o Scala pode ser muito mais conciso que o Java.
Giorgio

Respostas:

4

Um exemplo típico, se você quiser ilustrar a concisão do código funcional, pode usar coleções e suas operações. Por exemplo, considere uma classe Customere um método criando uma lista classificada de nomes de clientes a partir de uma lista de clientes.

Aqui está a implementação do Java:

class Customer
{
    String name;

    ... // Other attributes.
}

List<String> sortedCustomerNames(List<Customer> customers)
{
    List<String> names = new ArrayList<String>();

    for (Customer customer : customers)
        names.add(customer.name);

    Collections.sort(names);

    return names;
}

Versão Scala:

class Customer(val name: String, /* ... other attributes */)

def sortedCustomerNames(customers: List[Customer]): List[String] =
  customers.map(c => c.name).sorted

NOTA

A concisão em termos de pressionamentos de teclas nem sempre é uma boa medida da qualidade e manutenção do código.

Além disso, em geral, eu não recomendaria mudar do Java para o Scala apenas porque o Scala é mais recente. Se a maioria dos membros da equipe estiver mais familiarizada com Java, a equipe será muito mais produtiva com Java do que com Scala (ou qualquer outra linguagem de programação que eles não conheçam bem).

Aprendo o Scala no meu tempo livre há cerca de dois anos e apenas recentemente (depois de participar de um curso on-line) tive a sensação de que posso ser mais produtivo no Scala do que em Java. Antes de chegar a esse ponto, eu não consideraria usar o Scala para produção.

Giorgio
fonte
1
Conciseness in terms of keystrokes is not always a good measure of code quality and maintainabilityEspecialmente ao codificar em Perl.
precisa
Este é um bom exemplo do que eu estava procurando, não quero mudar tudo para o scala de uma só vez, mas pequenas classes de utilidade que fazem coisas óbvias seriam um bom lugar para começar. thx
Usman Ismail 14/11
1
@ Usman Ismail: Outra coisa que você pode ver são as coleções Scala. Recentemente, fiquei muito impressionado com o que se pode fazer com Streamo de: você pode executar primeiras pesquisas complexas em um espaço de solução até encontrar uma solução (como encontrar um caminho de um determinado objeto para outro, com certas restrições). Não sei se isso é relevante para você.
Giorgio
3

Para todos, em todos os lugares onde é possível ou para nada, basta usar Java. Dessa forma, isso funcionará corretamente. Eu estava fazendo esses experimentos há muito tempo, mas mais tarde você reescreve tudo em um ou dois idiomas (para você manter algumas coisas, se isso não puder ser feito em outro idioma), apenas para maior clareza.

Se você pode declarar a classe menor em 2 linhas de código, isso não é uma vantagem, você não deve usar o idioma para esse "recurso". Por exemplo, também é possível escrever um código funcional bonito em linhas xxx e passar o tempo aaaa e, talvez, ao mesmo tempo, você pode escrevê-lo no estilo OOP em xxx + 150 linhas no período aaa-2 horas com benefício de desempenho (quem sabe). O que quero dizer é que não é possível dizer "esta parte será melhor no Scala" e "esta parte no Java". No desenvolvimento, você não deve descobrir recursos, na minha opinião, você deve apenas desenvolver sem misturar e pensar na lógica geral em vez da implementação na linguagem X ou Y; por isso, na minha opinião, para maior clareza e produtividade, você deve escolher a linguagem para o projeto em vez de para recurso .

cnd
fonte
Eu discordo um pouco ali, porque há agora 150 menos linhas de código para testar e ter potenciais bugs no.
Usman Ismail
2
Linhas de código não fazem nenhum sentido. se o código perl puder ser 5x menor que o python, isso não significa que é mais fácil testar e contém bugs com potencial menor. Sim, existem alguns projetos com perl e python misturados, mas eu realmente não vejo isso como um recurso interessante.
CND
Seu argumento é válido, no entanto, dê uma olhada no Project Lombok, como um exemplo de como você pode reduzir elegantemente a verbosidade do Java. Fiquei me perguntando se havia um benefício semelhante com os recursos funcionais do Scala. O Scala foi projetado para ser misturado ao Java, diferentemente de outras linguagens funcionais, como erlang, que provavelmente seria uma opção melhor se funcionássemos totalmente.
perfil completo de Usman Ismail
1
Eu ainda não entendo essa mistura. Se o Scala for bom para você, basta usá-lo em qualquer lugar que puder no seu projeto. Isso será sensato e eu o entendo, mas usá-lo para alguns recursos em alguns casos é errado na minha opinião. Há motivos para não apenas mudar o projeto para o Scala?
CND
@ Ash: Talvez eles precisam fazer interface com o código legado? Nesse caso, o código principal estará no Scala e o código legado (e possivelmente algumas interfaces ou wrappers) em Java.
Giorgio
2

Suspeito que seja uma questão de quão bons são os programadores da equipe e o quanto estão dispostos a aprender coisas novas.

Scala é muito mais conciso e expressivo, mas igualmente mais complexo. Qualquer programador que possa fazer bom uso das abstrações de alto nível que ele oferece gostará e será mais produtivo e nunca mais voltará ao nível simplificado do Java. Mas um programador que não é bom em abstrações de alto nível ou simplesmente não quer aprender nunca o entenderá.

Também não acho que você deva usar casos adaptados especificamente para o Scala. Comece a escrever o protótipo nele e você verá se é mais produtivo ou não. Deve ser mais produtivo que tudo valha a pena mudar.

E eu definitivamente não misturaria os idiomas, exceto pelo uso de bibliotecas escritas no outro. Inicie a criação de protótipos no Scala, veja como funciona e escolha um ou outro.

Jan Hudec
fonte
-2

Na minha experiência (reconhecidamente limitada), o caso de uso que eu mais vi é usá-lo para obter uma sensação de superioridade e presunção sobre seus colegas que realmente enviam coisas e / ou ocultar suas limitações culpando os "antiquados e deselegantes" idioma que você é "forçado" a usar em vez da nova gostosura;)

ggambett
fonte
1
-1: a programação funcional é muito mais antiga que Java.
Giorgio
2
Ei, esse é mais ou menos o mesmo argumento que eu usei quando o Java apareceu pela primeira vez! Mas eu tinha 17 anos na época ...
yannis
2
BTW, técnicas de programação funcional são sobre enviar coisas (mais rapidamente), não se vangloriar (veja, por exemplo, paulgraham.com/avg.html ).
Giorgio
-3? Vamos lá, você pode fazer melhor. @Giorgio, eu não mencionar Java em tudo, IMO também suga :)
ggambett
@ggambett: Você se referiu a Java indiretamente: A pergunta é sobre a introdução do Scala (e seu estilo funcional) em um ambiente usando Java . Sua resposta compara uma "linguagem antiquada ... que você é forçada a usar" (Java?) Com a "nova moda" (Scala - programação funcional?) Cujo caso de uso mais comum é "obter uma sensação de superioridade ..." sobre seus colegas ". Ou qual foi o significado exato da sua resposta?
Giorgio