Георги Наков, nakov.gl at gmail com
Марин Маринов, marinov.ms+tues at gmail com
Технологично училище "Електронни Системи"
19 Октомври 2016г.
- няма общоприета дефиниция
- програмиране с (неточно математически) функции
- едни и същи аргументи на функция - винаги един и същ резултат
- данните не могат да се мутират
- функциите нямат странични ефекти
- 'променливите' не могат да се променят
- използва се само рекурсия (няма цикли)
- без скрити състояния
- по-малък когнитивен товар
- обосновавате се за поведението на функцията много по-лесно
- софтуерът е комбинируем (compositional)
``` x = 42; someFunction(x); y = x + 1; //каква е стойността на y? ``` ---
- програмите се парарелизират естествено
- тестват се по-лесно
- по-малко бъгове
... но това ли е цялата магия?
- приемат за аргументи или връщат като стойност други функции
- инструмент за слепяне на различните подпроблеми
- основен изграждащ блок на абстракциите в езика
- QuickSort
- резултатите от функции не се изчисляват преди да се необходими
- практически неприложимо при функции със странични ефекти
f x y z = if x>0 then x+y else x+z
> f (5*6) (10-7) (5/0)
-- не се хвърля грешка
33
- средство за структириране
- по-ясно разделение между подпроблемите
- statement - какво извършва кодът
- expression - какво изчислява кодът
- винаги има резултат
- функционалните езици са базирани на expression-и
- 1940 - ламбда смятане на Алонсо Чърч
- 1958 - Lisp
- 1970-1990 - множество функционални езици с мързеливо оценяване
- Miranda
- 1988 - дискусии по mailing lists
- създава се комитет по разработването на нов, обединяващ език
- 01.04.1990 - първа версия на Haskell
- по-стар от Python, Ruby, Java, C#, JavaScript
- само 30к реда код (през 2011 са вече 140к)
- кръстен е на Хаскел Къри - aмерикански математик
- Haskell Committee през 1992
- много от идеите се имплементират в други езици и библиотеки
- анонимни функции в Java 8, LINQ в C#
- много от принципите на ФП се препоръчват, независимо от езика
- разработват се нови ФП езици
- Scala, Clojure, F#
- Big Data индустрията е "вдъхновена" от ФП
- Map Reduce, Hadoop
- Facebook използва Haskell! (магичната мантра)
- John Carmack препоръчва Haskell!
- Животът е по-хубав и вие ще сте по-щастливи!