Crossing the gap from imperative to functional programming through refactoring
Crossing the gap from imperative to functional programming through refactoring
复制标题
DOI:
10.1145/2491411.2491461
复制
发表时间:
2013-08
期刊:
影响因子:
--
通讯作者:
A. Gyori;Lyle Franklin;Danny Dig;J. Lahoda
中科院分区:
文献类型:
--
作者:
A. Gyori;Lyle Franklin;Danny Dig;J. Lahoda
Java 8 introduces two functional features: lambda expressions and functional operations like map or filter that apply a lambda expression over the elements of a Collection. Refactoring existing code to use these new features enables explicit but unobtrusive parallelism and makes the code more succinct. However, refactoring is tedious: it requires changing many lines of code. It is also error-prone: the programmer must reason about the control-, data-flow, and side-effects. Fortunately, refactorings can be automated. We designed and implemented LambdaFicator, a tool which automates two refactorings. The first refactoring converts anonymous inner classes to lambda expressions. The second refactoring converts for loops that iterate over Collections to functional operations that use lambda expressions. Using 9 open-source projects, we have applied these two refactorings 1263 and 1709 times, respectively. The results show that LambdaFicator is useful: (i) it is widely applicable, (ii) it reduces the code bloat, (iii) it increases programmer productivity, and (iv) it is accurate.