ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ്
From Wikipedia, the free encyclopedia
കമ്പ്യൂട്ടർ ശാസ്ത്രത്തിൽ, ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് (functional programming) എന്നത് ഒരു പ്രോഗ്രാമിങ് മാതൃകയാണ് - ഫംഗ്ഷനുകൾ പ്രയോഗിച്ചും കംമ്പോസ് ചെയ്തുമാണ് പ്രോഗ്രാമുകൾ നിർമ്മിക്കുന്നത്. ഇത് ഒരു ഡിക്ലറേറ്റീവ് പ്രോഗ്രാമിംഗ് മാതൃകയാണ്, അതിൽ ഫംഗ്ഷൻ നിർവചനങ്ങൾ പ്രോഗ്രാമിന്റെ പ്രവർത്തന നില അപ്ഡേറ്റ് ചെയ്യുന്ന ഇമ്പറേറ്റീവ് സ്റ്റേറ്റ്മെന്റുകളുടെ ഒരു ശ്രേണിയെക്കാൾ മൂല്യങ്ങളെ മറ്റ് മൂല്യങ്ങളിലേക്ക് മാപ്പ് ചെയ്യുന്ന എക്സ്പ്രഷൻസ് ട്രീകളാണ്. [1]
ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിൽ, ഫംഗ്ഷനുകൾ ഫസ്റ്റ്-ക്ലാസ് സിറ്റിസൺസായി കണക്കാക്കപ്പെടുന്നു, അതായത്, മറ്റേതൊരു ഡാറ്റാ ടൈപ്പിനും കഴിയുന്നതുപോലെ, അവയ്ക്ക് പേരുകൾ (ലോക്കൽ ഐഡന്റിഫയറുകൾ ഉൾപ്പെടെ), ആർഗ്യുമെന്റുകളായി പാസ് ചെയ്യാനും മാത്രമല്ല മറ്റ് ഫംഗ്ഷനുകളിൽ നിന്ന് റിട്ടേൺ ചെയ്യാനും കഴിയും. ചെറിയ ഫംഗ്ഷനുകൾ മോഡുലാർ രീതിയിൽ സംയോജിപ്പിച്ച്, ഡിക്ലറേറ്റീവ്, കമ്പോസബിൾ ശൈലിയിൽ പ്രോഗ്രാമുകൾ എഴുതാൻ ഇത് അനുവദിക്കുന്നു.
ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് ചിലപ്പോൾ പൂർണ്ണമായും ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ പര്യായമായി കണക്കാക്കപ്പെടുന്നു, ഇത് ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ ഒരു ഉപവിഭാഗമാണ്, അത് എല്ലാ പ്രവർത്തനങ്ങളെയും ഡിറ്റർമിനിസ്റ്റിക് മാത്തമാറ്റിക്കൽ ഫംഗ്ഷനുകളായി അല്ലെങ്കിൽ പ്യൂവർ ഫംഗ്ഷനുകളായി കണക്കാക്കുന്നു. നൽകിയിരിക്കുന്ന ചില ആർഗ്യുമെന്റുകൾ ഉപയോഗിച്ച് ഒരു പ്യുവർ ഫംഗ്ഷൻ വിളിക്കുമ്പോൾ, അത് എല്ലായ്പ്പോഴും അതേ റിസൾട്ട് തന്നെ നൽകും, വാല്യൂ മാറ്റാവുന്ന അവസ്ഥയോ മറ്റ് പാർശ്വഫലങ്ങളോ ഇതിനെ ബാധിക്കില്ല. ഇംമ്പറേറ്റീവ് പ്രോഗ്രാമിംഗിൽ പൊതുവായുള്ള ഇംപ്യൂവർ പ്രൊസീജറിൽ നിന്ന് വ്യത്യസ്തമാണ്, അത് പാർശ്വഫലങ്ങൾ ഉണ്ടാക്കാം (പ്രോഗ്രാമിന്റെ സ്റ്റേറ്റ് പരിഷ്ക്കരിക്കുക അല്ലെങ്കിൽ ഒരു ഉപയോക്താവിൽ നിന്ന് ഇൻപുട്ട് എടുക്കുക മുതലയാവ). പ്യൂവറിലി ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ വക്താക്കൾ അവകാശപ്പെടുന്നത്, പാർശ്വഫലങ്ങൾ(side effects) പരിമിതപ്പെടുത്തുന്നതിലൂടെ, പ്രോഗ്രാമുകൾക്ക് കുറച്ച് ബഗുകൾ മാത്രമേ ഉണ്ടാകൂ, ഡീബഗ് ചെയ്യാനും പരിശോധിക്കാനും എളുപ്പമായിരിക്കും, ഫോർമൽ വേരിഫിക്കേഷന് കൂടുതൽ അനുയോജ്യമാകും.[2][3]
ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ റൂട്ട് അക്കഡീമിയിൽ (academia) ഉണ്ട്, ഇത് ഫംഗ്ഷനുകളെ മാത്രം അടിസ്ഥാനമാക്കിയുള്ള ഒഫീഷ്യൽ കമ്പ്യൂട്ടേഷൻ സംവിധാനമായ ലാംഡ കാൽക്കുലസിൽ നിന്ന് വികസിച്ചതാണ്. ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് ചരിത്രപരമായി ഇംപറേറ്റീവ് പ്രോഗ്രാമിംഗിനെ അപേക്ഷിച്ച് ജനപ്രീതി ആർജ്ജിച്ച ഒന്നല്ല, എന്നാൽ പല ഫംഗ്ഷണൽ ഭാഷകളും ഇന്ന് വ്യവസായപരമായും, വിദ്യാഭ്യാസപരമായും ഉപയോഗിക്കുന്നു. എന്നിരുന്നാലും, പ്രധാന പ്രോഗ്രാമിംഗ് ഭാഷകളായ കോമൺ ലിസ്പ്, സ്കീം[4][5][6][7]പോലുള്ള ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിനെ ഇത് പിന്തുണയ്ക്കുന്നു, ക്ലോജർ, വൂൾഫ്രം ലാങ്വേജ്, [8] (മാത്തമാറ്റിക്ക എന്നും അറിയപ്പെടുന്നു), റാക്കറ്റ്, എർലാങ്, ഒകാമൽ (OCAML)[9][10], ഹാസ്കൽ[11][12], എഫ്# [13][14]ഈ ഭാഷകൾ എല്ലാം വൈവിധ്യമാർന്ന നിരവധി സംഘടനകൾ വ്യാവസായിക ആവശ്യങ്ങളക്കായി ഉപയോഗിക്കുന്നു. [15][16]ആർ(R)[17][18] (സ്ഥിതിവിവരക്കണക്കുകൾ) പോലുള്ള, വെബിലുപയോഗിക്കുന്ന ജാവാസ്ക്രിപ്റ്റ് (JavaScript)[19] പോലെയുള്ള നിർദ്ദിഷ്ട ഡൊമെയ്നുകളിൽ വിജയം കണ്ടെത്തിയ ചില ഭാഷകൾക്കും ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് പ്രധാനമാണ്, ജെ, കെ, എക്സ്ക്വറി / എക്സ്എൽടി(XQuery / XSLT) (എക്സ്എംഎൽ)[20][21], ഓപാൽ മുതലയാവ. എസ്ക്യൂഎൽ, ലെക്സ്/യാക്(SQL, Lex / Yacc) പോലുള്ള വ്യാപകമായ ഡൊമെയ്ൻ-സ്പെസിഫിക് സ്റ്റേറ്റ്മെന്റ് ഭാഷകൾ ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങിന്റെ ചില ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു, പ്രത്യേകിച്ച് മ്യൂട്ടബിൾ മൂല്യങ്ങൾ ഒഴിവാക്കുന്നതിൽ[22]. കൂടാതെ, മറ്റ് പല പ്രോഗ്രാമിംഗ് ഭാഷകളും ഒരു ഫങ്ഷണൽ ശൈലിയിലുള്ള പ്രോഗ്രാമിംഗിനെ പിന്തുണയ്ക്കുന്നു അല്ലെങ്കിൽ ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിൽ നിന്നുള്ള ഫീച്ചറുകൾ നടപ്പിലാക്കിയിട്ടുണ്ട്. [23][24]സി++11,സി#[25], കോട്ലിൻ[26],പേൾ[27],പിഎച്ച്പി[28],പൈത്തൺ[29],ഗോ[30],റസ്റ്റ്[31], റാക്കു[32] ,സ്കാല[33], ജാവ (ജാവ 8 മുതൽ)[34].