Kuigi tänapäevastes arenduskeskkondades on kõige levinumaks tarkvaraarenduse paradigmaks object oriented programming (OOP), siis tasuks arendajatel julgemalt tutvust teha ka funktsionaalse programmeerimisega, lausus Uptime’i arendaja/arhitekt Tanel Hiob. Kuigi funktsionaalne lähenemine ei sobi igasse lahendusse, siis aitab selle juurpõhimõtete mõistmine iga paradigma puhul puhtamat ning efektiivsemat koodi kirjutada.
“Funktsionaalne programmeerimine on lähenemine koodile läbi protsessi. Kui OOP puhul defineerime objekte – on objekt auto ja see teeb neid asju – siis funktsionaalse programmeerimise puhul kirjeldame protsessi – sõitmine, mida selleks tegevuseks vaja on ja mis sõitmise tulemusena juhtub,” selgitas Hiob. “See on filosoofiliselt märksa teistsugune lähenemine ning nõuab harjumist, kuid sellegi poolest tasuks sellele veidi aega pühendada.”
Funktsionaalse programmeerimise võimalused pakuvad OOP ees mitmeid eelised, samas jäädes osades valdkondades alla. Hiob sõnas, et üldjuhul on funktsionaalse lähenemise puhul lõplik kood kordades lühem, see valmib kiiremini ning lõpptootest leiab oluliselt vähem vigu, kuna paradigma karistab nende eest juba enne kui need avaldatud saavad.
Teisalt suudab OOP osades valdkondades funktsionaalsest lähenemisest endiselt peajagu üle olla. Kuna funktsionaalse programmeerimise puhul on rõhk pandud loetavusele ning loogilisemale ülesehitusele, ohverdatakse selle arvelt jõudlust ning kiirust. See on põhjus, miks Hiob soovitab funktsionaalset lähenemist pigem ärirakenduste ning teiste vähemintensiivsete rakenduste puhul, eelistades OOP-d jätkuvalt high performance lahenduste puhul nagu näiteks kasutajaliidesed.
Kuldne kesktee
Kui minevikus olid OOP ning funktsionaalne programmeerimine justkui kaks eraldiseisvat lähenemist, siis on järjest enam näha märke, kuidas üks on mõjutamas teist. Hiob märkis, et juba täna võib paljude arendajate töös näha funktsionaalsest programmeerimisest välja kasvanud lähenemisi, näiteks konstantsete muutujate, lambdade ning pure funktsioonide kasutamine.
“Hetkel on funktsionaalsed programmeerimiskeeled ning OOP-keeled üsnagi selgelt eristatavad, aga mida aega edasi, seda rohkem on ühe mõjud jõudmas teise ning seda paremini suudavad need koos mängida,” selgitas ta. “Näiteks on mitmed funktsionaalse programmeerimise alustalad jõudnud JavaScripti map ja filter funktsioonide või lausa Reacti funktsionaalsete komponentide näol, samas kui uus .NET tõi C#-i non-nullable’i, tuple ning record’i.”
Niisamuti saavad arendajad soovi korral ühe projekti juures kasutada nii OOP kui ka funktsionaalse programmeerimise paradigmasid. Hiob märkis, et kergem on funktsionaalne lähenemine võtta nullist asju üles ehitades, kuid pole ka mingiks probleemiks ehitada teenus tervikuna OOP põhimõtetest lähtuvalt ning mõne kõrvalteenuse puhul kasutada funktsionaalset lähenemist – eriti lihtne on seda teha .NET arenduse puhul, kus saab hõlpsalt kõrvuti kasutada C#-i ja F#-i. Juba olemasolevatesse rakendustesse saab arenduse käigus lisada aina rohkem funktsionaalse programmeerimise kilde.
“Tasub meeles pidada, et kuigi mitmed OOP keeled on vaikselt üle võtmas funktsionaalse programmeerimise võimalusi, siis pakuvad selgelt selle lähenemise jaoks loodud keeled nagu F#, Clojure või Haskell ohtralt võimalusi, mida mujalt ei leia,” selgitas ta. “Näiteks suudab F# juba koodi kirjutamise ajal andmebaasist tabeleid või infot võtta ning autocomplete’i pakkuda. Samuti on oluliseks müügiargumendiks option tüübid, funktsioonide partial application ja isegi dependency injection kompileerimise hetkel.”
Mugavusfunktsioonide kõrval on aga funktsionaalse programmeerimise suurimateks argumentideks parem loetavus, vähem potentsiaalseid vigu, kiirem arendustempo ning üleüldiselt paranenud koodi kvaliteet.
Üks ei asenda teist
Hiob märkis, et tänapäevastes arenduskeskkondades on OOP kuningas ning ilmselt on see nii veel mõnda aega. See aga ei tähenda, et arendajad ei võiks üritada funktsionaalse lähenemisega tuttavaks saada ning võimalusel seda mõnes projektis rakendada.
“Noored arendajad võiks kindlasti hakata esmalt õppima OOP-d, leida endale töö, saada praktikat ning hakata siis kõrvale funktsionaalse programmeerimise alustalasid õppima,” selgitas ta. “Kogenud arendajad võiks aga selle lähenemise põhimõtetega põgusalt tutvuda ning üritada neid siin-seal rakendada, kuniks lõpuks avaneb võimalus mõni suurem tükk eksklusiivselt funktsionaalse programmeerimise põhimõtetel luua.”
Ta rõhutab, et isegi kui igapäevatöös selgelt funktsionaalse programmeerimise paradigmat jälgida ei saa, siis aitab selle põhimõtete tundmine ka OOP-põhimõtteid järgides luua paremaid rakendusi. “See paneb sind teistmoodi mõtlema ja veidi teistele asjadele tähelepanu pöörama. Selle tulemuseks on ükskõik mis paradigma puhul puhtam ning säravam kood – sa lihtsalt tead, mis on alternatiivid ja millele võiks veel tähelepanu pöörata.”
Tutvu vabade töökohtadega
Kas Uptime kõlab nagu sinu sorti ettevõte? Kui nii, siis heida pilk vabadele töökohtadele ning loodame, et võtad meiega ühendust – räägime sinuga hea meelega!