Java 8 eftermontering lambda uttryck, en kärna av funktionell programmering, till ett vanligt objektorienterat språk med ett tvingande paradigm. Men vi vet inte hur Java utvecklare har anpassat sig till den funktionella stilen av tänkande, och ännu viktigare, vilka är skälen till att motivera Java utvecklare att anta funktionell programmering. Utan sådan kunskap missar forskare möjligheter att förbättra den senaste tekniken, verktygsbyggare använder orealistiska antaganden, språkdesigners misslyckas med att förbättra sin design, och utvecklare kan inte utforska effektiv och effektiv användning av lambdas. Vi presenterar den första storskaliga, kvantitativa och kvalitativa empiriska studien för att belysa hur viktiga programmerare använder lambdauttryck som en inkörsport till funktionellt tänkande. Särskilt, vi statiskt granska källkoden för 241 open-source-projekt med 19,770 bidragslämnare, för att studera egenskaperna hos 100,540 lambda uttryck. Dessutom undersöker vi de historiska trenderna och adoptionstalen för lambdas i de studerade projekten. För att få ett kompletterande perspektiv, söker vi de bakomliggande orsakerna till varför utvecklare introducera lambda uttryck, genom att kartlägga 97 utvecklare som introducerar lambdas i sina projekt, med hjälp av brandstation intervjumetoden. Bland annat visade våra resultat en ökande trend i antagandet av lambdas i Java: i 2016, andelen lambdas infördes per tillagd rad kod ökade med två gånger jämfört med 2015. Lambdas används av olika skäl, inklusive men inte begränsat till i) att göra befintlig kod mer koncis och läsbar, ii) att undvika dubblering av kod, och iii) att simulera lat utvärdering av funktioner. Intressant nog upptäckte vi att utvecklare använder Java inbyggda funktionella gränssnitt ineffektivt, dvs de föredrar att använda generiska funktionella gränssnitt över de specialiserade, med utsikt över prestanda overheads som kan införas. Dessutom använder utvecklare inte tekniker från funktionell programmering, t.ex. currying. Slutligen presenterar vi konsekvenserna av våra rön för forskare, verktygsbyggare, språkdesigners och utvecklare. Tillstånd att göra digitala eller papperskopior av hela eller delar av detta arbete för personligt bruk eller klassrum beviljas utan avgift, förutsatt att kopiorna inte görs eller distribueras för vinst eller kommersiella fördelar och att kopiorna är försedda med detta meddelande och den fullständiga hänvisningen på första sidan. Upphovsrätt till delar av detta verk som ägs av andra än upphovsmannen måste hedras. Abstraktering med kredit är tillåten. För att kopiera på annat sätt, eller återpublicera, för att posta på servrar eller för att omfördela till listor, krävs tidigare specifik behörighet och/eller avgift. Begär tillstånd från authoritys@acm.org.  Lambdas är kärnan i det funktionella programmeringsparadigmet. Under de senaste åren, flera vanliga objektorienterade språk, såsom Java 8, C# 3 och C++ 11, lagt lambda uttryck för att underlätta den funktionella programmering stil, och parameterisering av beteende. Den ursprungliga avsikten med Java språkdesigners [Oracle 2013] bakom tillägget av lambda uttryck var att ge ett tydligt och koncist sätt att representera en metod gränssnitt med ett uttryck, förbättra samlingar ram genom att ge ett alternativt sätt att iterera genom, filtrera och extrahera data från samlingar med hjälp av strömmar, och förbättra prestanda i multi-core miljöer med nya konvergensfunktioner med hjälp av parallella strömmar. Sedan dess har både forskare och IDE leverantörer [Bull 2014; IntelliJ 2017; Wielenga 2014] utvecklat verktyg för att automatiskt refaktor kod för att dra nytta av lambda uttryck. Antagandet av dessa verktyg underlättar övergången från anonyma klasser till lambdauttryck och från förbättrade slingor till strömmar. Dessutom förbättrade IDE leverantörer avsevärt deras felsökning stöd för lambda uttryck [Gee 2015], genom att göra det möjligt att ställa brytpunkter för och steg i lambda uttryck. Trots det växande verktyget stöd för lambda uttryck i Java IDEs, finns det fortfarande begränsade empiriska bevis om antagandet av lambdas av Java utvecklare, de faktiska orsakerna som motiverar eller avskräcka Java utvecklare från att använda lambdas, och de metoder som tillämpas av Java utvecklare när du använder lambdas. Bristen på denna kunskap påverkar fyra målgrupper negativt:
Å andra sidan fokuserade Mazinana REF på utvecklingstrenden för endast en funktion, undersöka användningen av Lambda i Java.
Understanding the use of lambda expressions in Java
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}