On the usage of functional programming concepts in JavaScript
Programação Funcional. JavaScript. Mineração de Dados.
Constructos de linguagem de programação inspirados no paradigma funcional chegaram à maioria das linguagens convencionais. Muitos pesquisadores e desenvolvedores consideram que esses constructos levam a programas mais concisos, reutilizáveis e mais fáceis de entender. No entanto, poucos estudos investigam a prevalência dessas estruturas e as implicações de usá-las em linguagens de programação convencionais. Este trabalho quantifica a prevalência de quatro conceitos, normalmente associados à programação funcional, em JavaScript: recursão, imutabilidade, avaliação preguiçosa e funções como valores. Dividimos o último em dois grupos, funções de ordem superior e callbacks & promises. Focamos em programas JavaScript devido à disponibilidade de alguns desses conceitos na linguagem desde seu início, sua inspiração em linguagens de programação funcionais e a popularidade da linguagem. Mineramos 91 repositórios GitHub (mais de 22 milhões de linhas de código (LOC)) escritos principalmente em JavaScript (mais de 50% do código), medindo o uso desses conceitos de perspectivas estáticas e temporais. Também medimos a probabilidade de commits de correção de bugs removendo usos desses conceitos (o que sugeriria propensão a bugs) e sua associação com a presença de comentários de código (o que sugeriria um código difícil de entender). Descobrimos que esses conceitos estão em uso generalizado (478,605 ocorrências, 1 para cada 46.65 linhas de código, 43.59% de LOC). Além disso, o uso de funções de ordem superior, imutabilidade e estruturas relacionadas à avaliação preguiçosa vêm crescendo ao longo dos anos para os projetos analisados, enquanto o uso de recursão e callbacks & promises diminuiu. Também encontramos evidências estatísticas de que a remoção dessas estruturas, com exceção das associadas à imutabilidade, é menos comum em commits de correção de bugs do que em outros commits. Além disso, sua presença não está correlacionada com o tamanho do comentário associado. Nossas descobertas sugerem que os conceitos de programação funcional são importantes para desenvolvedores que usam uma linguagem multiparadigma, como JavaScript, e seu uso não torna os programas mais difíceis de entender.