Негізгі айырмашылық – функционалдық бағдарламалау мен императивті бағдарламалау
Функционалды бағдарламалау мен императивті бағдарламалаудың негізгі айырмашылығы мынада: функционалды бағдарламалау есептеулерді математикалық функциялар ретінде қарастырады және күй мен өзгермелі деректерді өзгертуге жол бермейді, ал императивті бағдарламалау бағдарламалар күйін өзгертетін мәлімдемелерді пайдаланады.
Бағдарламалау парадигмасы компьютерлік бағдарламаның құрылымы мен элементтерін құру стилін қамтамасыз етеді. Бағдарламалау парадигмалары бағдарламалау тілдерін ерекшеліктеріне қарай жіктеуге көмектеседі. Бағдарламалау тілі көбірек парадигмаларға әсер етуі мүмкін. Объектіге-бағытталған парадигмада бағдарлама объектілерді қолдану арқылы құрылымдалады, ал объектілер әдістер арқылы хабарламаларды береді. Логикалық бағдарламалау есептеуді тек математикалық логика тұрғысынан көрсете алады. Бағдарламалаудың тағы екі парадигмасы – функционалды бағдарламалау және императивті бағдарламалау. Функционалды бағдарламалау есептеулерді математикалық функцияларды бағалау ретінде көрсетуге мүмкіндік береді. Императивті бағдарламалау жадтың күйін анық өзгертетін мәлімдемелерді береді. Бұл мақалада функционалды бағдарламалау мен императивті бағдарламалау арасындағы айырмашылық қарастырылады.
Функционалды бағдарламалау дегеніміз не?
Функционалды бағдарламалау математикаға негізделген. Функционалды бағдарламалаудың негізгі принципі барлық есептеулер жеке математикалық функциялардың жиынтығы ретінде қарастырылады. Математикалық функция кірістерді шығыстарға салыстырады. f(x)=xx деп аталатын функция бар деп есептейік. 1 x мәні 1 шығысымен салыстырылады. x мәні 2 4 шығысымен салыстырылады.x мәні 3 9 шығысымен салыстырылады және т.б.
01-сурет: Функционалды бағдарламалау тілінің мысалы – Хаскелл
Функционалды бағдарламалауда үлгілер қарастырылады. Функционалды бағдарламалау тілдері Haskell, сандардың қосындысын табу үшін төмендегі әдісті пайдаланады.
Қосынды функциясының бүтін мәндері бар және нәтиже де бүтін сан болады. Оны қосынды түрінде жазуға болады: [int] -> int. Қосындыны төмендегі үлгілерді орындау арқылы жасауға болады.
sum[n]=n, бір санның қосындысы санның өзі.
Егер сандар тізімі болса, оны келесідей жазуға болады. n бірінші санды, ал ns басқа сандарды білдіреді
қосынды (n, ns)=n + қосынды нс.
Үш санның қосындысын табу үшін жоғарыдағы үлгілерді қолдануға болады, олар 3, 4, 5.
3 + қосынды [4, 5]
3 + (4 + қосынды [5])
3+ 4 + 5=12
Функция немесе өрнек кейбір күйді аумақтан тыс өзгертсе немесе қайтарылатын мәннен басқа шақыру функцияларымен бақыланатын өзара әрекеттесе, жанама әсерлері бар деп айтылады. Функционалды бағдарламалау бұл жанама әсерлерді азайтады. Күй өзгерістері функция кірістеріне байланысты емес. Бұл бағдарламаның әрекетін түсіну кезінде пайдалы. Функционалдық бағдарламалаудың бір кемшілігі императивті бағдарламалаумен салыстырғанда функционалдық бағдарламалауды үйрену қиынырақ.
Императивті бағдарламалау дегеніміз не?
Императивті бағдарламалау – бұл бағдарлама күйін өзгертетін мәлімдемелерді пайдаланатын бағдарламалау парадигмасы. Ол бағдарламаның қалай жұмыс істейтінін сипаттауға бағытталған. Java, C және C сияқты бағдарламалау тілдері императивті бағдарламалау тілдері болып табылады. Ол не істеу керектігі туралы қадамдық процедураны ұсынады. Императивті бағдарламалау тілдерінде if, else, while, for циклдері, сыныптар, нысандар және функциялар сияқты құрылымдар бар.
02-сурет: Императивті бағдарламалау тілінің мысалы – Java
Он санның қосындысын Java тілінде төмендегідей табуға болады. Әрбір итерацияда i мәні қосындыға қосылады және сома айнымалысына тағайындалады. Әрбір итерацияда қосынды мәні бұрын есептелген қосындыға қосуды жалғастырады.
int сомасы=0;
үшін (int i=0; i<=10; i++) {
қосынды=қосынды + i;
}
Императивті бағдарламалауды үйрену, түсіну және жөндеу оңай. Күй айнымалы мәндерін пайдаланудың арқасында бағдарлама күйін табу оңай. Кейбір кемшіліктер: ол кодты ұзартады және масштабтауды азайтады.
Функционалды бағдарламалау мен императивті бағдарламалаудың қандай ұқсастығы бар?
Функционалды бағдарламалау да, императивті бағдарламалау да бағдарламалау парадигмалары
Функционалды бағдарламалау мен императивті бағдарламалаудың айырмашылығы неде?
Функционалды және императивті бағдарламалау |
|
Функционалды бағдарламалау – есептеуді математикалық функцияларды бағалау ретінде қарастыратын және күйді және өзгеретін деректерді өзгертуді болдырмайтын бағдарламалау парадигмасы. | Императивті бағдарламалау – бұл бағдарлама күйін өзгертетін мәлімдемелерді пайдаланатын бағдарламалау парадигмасы. |
Құрылымдар | |
Функционалды бағдарламалау функция шақыруларын және жоғарырақ функцияларды қамтиды. | Императивті бағдарламалау if, else, while, for циклдерін, функцияларын, сыныптарын және нысандарын қамтиды. |
Бағдарламалау тілдері | |
Scala, Haskell және Lisp – функционалды бағдарламалау тілдері. | C, C++, Java – императивті бағдарламалау тілдері. |
Фокус | |
Функционалды бағдарламалау соңғы нәтижеге бағытталған. | Императивті бағдарламалау бағдарламаның қалай жұмыс істейтінін сипаттауға бағытталған. |
Қарапайымдық | |
Функционалды бағдарламалау қиын. | Императивті бағдарламалау оңайырақ. |
Қорытынды – Функционалдық бағдарламалау және Императивті бағдарламалау
Бағдарламалау парадигмасы компьютерлік бағдарламаның құрылымы мен элементтерін құру стилін қамтамасыз етеді. Функционалды бағдарламалау және императивті бағдарламалау - олардың екеуі. Функционалды бағдарламалау мен императивті бағдарламалаудың айырмашылығы мынада: функционалды бағдарламалау есептеулерді математикалық функциялар ретінде қарастырады және күйді және өзгермелі деректерді өзгертуді болдырмайды, ал императивті бағдарламалау бағдарламалар күйін өзгертетін мәлімдемелерді пайдаланады.