Най- ключова разлика между функционалното програмиране и императивното програмиране е, че функционалното програмиране разглежда изчисленията като математически функции и избягва промяната на състоянието и изменяемите данни, докато императивното програмиране използва операторите, които променят състоянието на програмите.
Парадигмата за програмиране осигурява стил на изграждане на структурата и елементите на компютърна програма. Парадигмите за програмиране помагат за класифицирането на програмните езици въз основа на техните характеристики. Език за програмиране може да повлияе на повече парадигми. В обектно-ориентираната парадигма програмата се структурира с помощта на обекти и обектите предават съобщения чрез методи. Логическото програмиране може да изрази изчисления изключително по отношение на математическата логика. Други две парадигми за програмиране са функционалното програмиране и императивното програмиране. Функционалното програмиране позволява да се изразят изчисленията като оценка на математическите функции. Императивното програмиране предоставя изявления, които изрично променят състоянието на паметта. Тази статия обсъжда разликата между функционалното програмиране и императивното програмиране.
1. Преглед и ключова разлика
2. Какво е функционално програмиране
3. Какво е императивното програмиране
4. Прилики между функционалното програмиране и императивното програмиране
5. Паралелно сравнение - функционално програмиране срещу императивно програмиране в таблична форма
6. Резюме
Функционалното програмиране се основава на математиката. Основният принцип на функционалното програмиране е, че всички изчисления се разглеждат като комбинация от отделни математически функции. Математическа функция картографира входовете към изходите. Да приемем, че има функция, наречена f (x) = x * x. Стойността x 1 е картографирана на изход 1. Стойността x 2 се преобразува на изход 4. Стойността x се преобразува на изход 9 и така нататък.
Фигура 01: Пример за функционален език за програмиране - Haskell
При функционалното програмиране се вземат предвид моделите. Функционалните езици за програмиране Haskell, използва метода по-долу, за да намери сумирането на числата.
Функцията сума има цели стойности и резултатът също ще бъде цяло число. Може да се запише като сума: [int] -> int. Сумирането може да стане, като следвате по-долу моделите.
sum [n] = n, сумата от едно число е самото число.
Ако има списък с числа, той може да бъде написан по следния начин. N представлява първото число, а ns представлява останалите числа
sum (n, ns) = n + сума ns.
Горните модели могат да бъдат приложени, за да се намери сумирането на три числа, които са 3,4,5.
3 + сума [4,5]
3 + (4 + сума [5])
3+ 4 + 5 = 12
Казва се, че дадена функция или израз има странични ефекти, ако модифицира някакво състояние извън обхвата си или има наблюдаемо взаимодействие със своите извикващи функции, освен връщащата се стойност. Функционалното програмиране свежда до минимум тези странични ефекти. Промените в състоянието не зависят от входовете на функциите. Полезно е, когато разбирате поведението на програмата. Един недостатък на функционалното програмиране е, че усвояването на функционалното програмиране е по-трудно в сравнение с императивното програмиране.
Императивното програмиране е парадигма за програмиране, която използва операторите, които променят състоянието на програмата. Той се фокусира върху описанието на работата на дадена програма. Езиците за програмиране като Java, C и C # са задължителни езици за програмиране. Той предоставя стъпка по стъпка процедура за това какво да направите. Императивните езици за програмиране съдържат структури, като if, else, while, for loops, класове, обекти и функции.
Фигура 02: Пример за императивен език за програмиране - Java
Сумата от десет числа може да се намери в Java, както следва. Във всяка итерация стойността i се добавя към сумата и се присвоява на променливата сума. При всяка итерация стойността на сумата продължава да се добавя към изчислената по-рано сума.
int сума = 0;
за (int i = 0; i< =10; i++)
сума = сума + i;
Наложителното програмиране е лесно за научаване, разбиране и отстраняване на грешки. Лесно е да се намери състоянието на програмата поради използването на променливи на състоянието. Някои недостатъци са, че може да направи кода дълъг и може също така да сведе до минимум мащабируемостта.
Функционално срещу императивно програмиране | |
Функционалното програмиране е парадигма за програмиране, която разглежда изчисленията като оценка на математическите функции и избягва промяна на състоянието и изменяемите данни. | Imperative Programming е парадигма за програмиране, която използва оператори, които променят състоянието на програмата. |
структури | |
Функционалното програмиране съдържа функционални обаждания и функции от по-висок ред. | Императивното програмиране съдържа ако, иначе, докато, за контури, функции, класове и обекти. |
Програмни езици | |
Scala, Haskell и Lisp са функционални езици за програмиране. | C, C ++, Java са задължителни езици за програмиране. |
фокус | |
Функционалното програмиране се фокусира върху крайния резултат. | Императивното програмиране се фокусира върху описанието на работата на дадена програма. |
простота | |
Функционалното програмиране е трудно. | Наложителното програмиране е по-лесно. |
Парадигмата за програмиране осигурява стил на изграждане на структурата и елементите на компютърна програма. Функционалното програмиране и императивното програмиране са две от тях. Разликата между функционалното програмиране и императивното програмиране е, че функционалното програмиране разглежда изчисленията като математически функции и избягва промяната на състоянието и изменяемите данни, докато императивното програмиране използва изразите, които променят състоянието на програмите.
1. „Наложително програмиране.“ Уикипедия, Фондация Уикимедия, 28 март 2018 г. Достъпно тук
2. „Функционално програмиране.“ Уикипедия, Фондация Уикимедия, 28 март 2018 г. Достъпно тук
3.Computerphile. YouTube, YouTube, 30 август 2013. Достъпно тук
1.'Haskell Logo'By Haskell1965 - Собствена работа, (CC BY-SA 3.0) през Commons Wikimedia
2.'14485179234 'чрез скрийншоти за Linux (CC BY 2.0) чрез Flickr