Հիմնական տարբերություն – Ֆունկցիոնալ ծրագրավորում ընդդեմ իմպերատիվ ծրագրավորման
Ֆունկցիոնալ ծրագրավորման և հրամայական ծրագրավորման հիմնական տարբերությունն այն է, որ ֆունկցիոնալ ծրագրավորումը հաշվարկները դիտարկում է որպես մաթեմատիկական ֆունկցիաներ և խուսափում է վիճակի և փոփոխական տվյալների փոփոխությունից, մինչդեռ հրամայական ծրագրավորումն օգտագործում է ծրագրերի վիճակը փոխող հայտարարությունները::
Ծրագրավորման պարադիգմը ապահովում է համակարգչային ծրագրի կառուցվածքի և տարրերի կառուցման ոճ: Ծրագրավորման պարադիգմները օգնում են դասակարգել ծրագրավորման լեզուները՝ ելնելով դրանց առանձնահատկություններից: Ծրագրավորման լեզուն կարող է ազդել ավելի շատ պարադիգմների վրա:Օբյեկտ-կողմնորոշված պարադիգմում ծրագիրը կառուցված է օբյեկտների միջոցով, իսկ օբյեկտները հաղորդագրություններ են փոխանցում՝ օգտագործելով մեթոդներ: Տրամաբանական ծրագրավորումը կարող է արտահայտել հաշվարկը բացառապես մաթեմատիկական տրամաբանությամբ: Ծրագրավորման ևս երկու պարադիգմներ են ֆունկցիոնալ ծրագրավորումը և հրամայական ծրագրավորումը: Ֆունկցիոնալ ծրագրավորումը թույլ է տալիս արտահայտել հաշվարկները որպես մաթեմատիկական ֆունկցիաների գնահատում: Իմպերատիվ ծրագրավորումն ապահովում է հայտարարություններ, որոնք բացահայտորեն փոխում են հիշողության վիճակը: Այս հոդվածը քննարկում է ֆունկցիոնալ ծրագրավորման և հրամայական ծրագրավորման միջև եղած տարբերությունը:
Ի՞նչ է ֆունկցիոնալ ծրագրավորումը:
Ֆունկցիոնալ ծրագրավորումը հիմնված է մաթեմատիկայի վրա: Ֆունկցիոնալ ծրագրավորման հիմնական սկզբունքն այն է, որ բոլոր հաշվարկները դիտարկվում են որպես առանձին մաթեմատիկական ֆունկցիաների համակցություն: Մաթեմատիկական ֆունկցիան մուտքագրում է մուտքերը ելքերին: Ենթադրենք, որ կա f(x)=xx անունով ֆունկցիա: X արժեքը 1-ը քարտեզագրված է ելքային 1-ին:x-ի արժեքը 3-ը քարտեզագրվում է 9-րդ արդյունքին և այլն:
Նկար 01. Ֆունկցիոնալ ծրագրավորման լեզվի օրինակ – Haskell
Ֆունկցիոնալ ծրագրավորման մեջ օրինաչափությունները հաշվի են առնվում: Ֆունկցիոնալ ծրագրավորման լեզուները Haskell-ը օգտագործում է ստորև բերված մեթոդը՝ թվերի գումարումը գտնելու համար:
Գումարի ֆունկցիան ունի ամբողջ թվեր, և արդյունքը նույնպես կլինի ամբողջ թիվ: Այն կարելի է գրել որպես գումար՝ [int] -> int. Գումարը կարելի է անել՝ հետևելով ստորև ներկայացված օրինաչափություններին:
sum[n]=n, մեկ թվի գումարը հենց թիվն է։
Եթե կա թվերի ցանկ, այն կարելի է գրել հետևյալ կերպ. n-ը ներկայացնում է առաջին թիվը, իսկ ns-ը ներկայացնում է մյուս թվերը
գումար (n, ns)=n + գումար ns.
Վերևի օրինաչափությունները կարող են կիրառվել երեք թվերի գումարումը գտնելու համար, որոնք 3, 4, 5 են:
3 + գումար [4, 5]
3 + (4 + գումար [5])
3+ 4 + 5=12
Ասում են, որ ֆունկցիան կամ արտահայտությունն ունի կողմնակի ազդեցություններ, եթե այն փոփոխում է իր շրջանակից դուրս գտնվող ինչ-որ վիճակ կամ ունի տեսանելի փոխազդեցություն իր կանչող ֆունկցիաների հետ, բացի վերադարձող արժեքից: Ֆունկցիոնալ ծրագրավորումը նվազագույնի է հասցնում այս կողմնակի ազդեցությունները: Վիճակի փոփոխությունները կախված չեն ֆունկցիայի մուտքերից: Դա օգտակար է ծրագրի վարքագիծը հասկանալու ժամանակ: Ֆունկցիոնալ ծրագրավորման թերությունն այն է, որ ֆունկցիոնալ ծրագրավորում սովորելը ավելի դժվար է, քան հրամայականը:
Ի՞նչ է իմպերատիվ ծրագրավորումը:
Իմպերատիվ ծրագրավորումը ծրագրավորման պարադիգմ է, որն օգտագործում է այն հայտարարությունները, որոնք փոխում են ծրագրի վիճակը: Այն կենտրոնանում է նկարագրելու, թե ինչպես է գործում ծրագիրը: Ծրագրավորման լեզուներ, ինչպիսիք են Java-ն, C-ն և C-ը, հրամայական ծրագրավորման լեզուներ են:Այն ապահովում է քայլ առ քայլ ընթացակարգ, թե ինչ անել: Իմպերատիվ ծրագրավորման լեզուները պարունակում են այնպիսի կառուցվածքներ, ինչպիսիք են՝ if, else, while, օղակների, դասերի, օբյեկտների և ֆունկցիաների համար:
Նկար 02. Իմպերատիվ ծրագրավորման լեզվի օրինակ – Java
Տասը թվերի գումարումը Java-ում կարելի է գտնել հետևյալ կերպ. Յուրաքանչյուր կրկնության ժամանակ i արժեքը ավելացվում է գումարին և վերագրվում գումարի փոփոխականին: Յուրաքանչյուր կրկնության ժամանակ գումարի արժեքը շարունակում է ավելացնել նախկինում հաշվարկված գումարին:
int sum=0;
համար (int i=0; i<=10; i++) {
գումար=գումար + i;
}
Իմպերատիվ ծրագրավորումը հեշտ է սովորել, հասկանալ և կարգաբերել: Հեշտ է գտնել ծրագրի վիճակը, քանի որ օգտագործվում են վիճակի փոփոխականներ: Որոշ թերություններ այն են, որ այն կարող է երկարացնել ծածկագիրը և կարող է նաև նվազեցնել մասշտաբայնությունը:
Ո՞րն է նմանությունը ֆունկցիոնալ ծրագրավորման և իմպերատիվ ծրագրավորման միջև:
Եվ ֆունկցիոնալ ծրագրավորումը և իմպերատիվ ծրագրավորումը ծրագրավորման պարադիգմներ են:
Ո՞րն է տարբերությունը ֆունկցիոնալ ծրագրավորման և իմպերատիվ ծրագրավորման միջև:
Ֆունկցիոնալ ընդդեմ հրամայական ծրագրավորման |
|
Ֆունկցիոնալ ծրագրավորումը ծրագրավորման պարադիգմ է, որը հաշվարկը դիտարկում է որպես մաթեմատիկական ֆունկցիաների գնահատում և խուսափում է վիճակի փոփոխությունից և փոփոխվող տվյալներից: | Իմպերատիվ ծրագրավորումը ծրագրավորման պարադիգմ է, որն օգտագործում է հայտարարություններ, որոնք փոխում են ծրագրի վիճակը: |
Կառուցվածքներ | |
Ֆունկցիոնալ ծրագրավորումը պարունակում է ֆունկցիաների կանչեր և ավելի բարձր կարգի գործառույթներ: | Իմպերատիվ ծրագրավորումը պարունակում է if, else, while օղակների, ֆունկցիաների, դասերի և օբյեկտների համար: |
Ծրագրավորման լեզուներ | |
Scala, Haskell և Lisp ֆունկցիոնալ ծրագրավորման լեզուներ են: | C, C++, Java-ն հրամայական ծրագրավորման լեզուներ են: |
Կենտրոնանալ | |
Ֆունկցիոնալ ծրագրավորումը կենտրոնանում է վերջնական արդյունքի վրա: | Իմպերատիվ ծրագրավորումը կենտրոնանում է ծրագրի գործունեության նկարագրության վրա: |
Պարզություն | |
Ֆունկցիոնալ ծրագրավորումը դժվար է: | Իմպերատիվ ծրագրավորումն ավելի հեշտ է։ |
Ամփոփում – Ֆունկցիոնալ ծրագրավորում ընդդեմ իմպերատիվ ծրագրավորման
Ծրագրավորման պարադիգմը ապահովում է համակարգչային ծրագրի կառուցվածքի և տարրերի կառուցման ոճ: Ֆունկցիոնալ ծրագրավորումը և իմպերատիվ ծրագրավորումը դրանցից երկուսն են: Ֆունկցիոնալ ծրագրավորման և հրամայական ծրագրավորման միջև տարբերությունն այն է, որ ֆունկցիոնալ ծրագրավորումը հաշվարկները դիտարկում է որպես մաթեմատիկական ֆունկցիաներ և խուսափում է վիճակի և փոփոխական տվյալների փոփոխությունից, մինչդեռ հրամայական ծրագրավորումն օգտագործում է ծրագրերի վիճակը փոխող հայտարարությունները::