You are here

Crossing the gap from imperative to functional programming through refactoring

TitleCrossing the gap from imperative to functional programming through refactoring
Publication TypeConference Paper
Year of Publication2013
AuthorsGyori, A., L. Franklin, D. Dig, and J. Lahoda
Conference NameProceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering - ESEC/FSE 2013
Pagination543 - 553
Date Published08/2013
PublisherACM Press
Conference LocationSaint Petersburg, Russia
ISBN Number9781450322379

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.