Javascript functional programming

579 views

Published on

Talk di Francesco Agati sulla programmazione funzionale, durante il TalkLab di AppsterdamMilan del 11 Aprile 2013. https://speakerdeck.com/francescoagati/javascript-functional-programming

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
579
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Javascript functional programming

  1. 1. JavascriptFunctionalProgramming
  2. 2. Programmazione proceduralemodificazione dello stato del programma(valori mutabili)sequenzialità dei comandiutilizza controlli condizionali e iterativi (if e for)
  3. 3. Programmazione proceduralevar newList= [];for (var cnt = 0; cnt <= 10; cnt++) { if (cnt < 6) newList.push(cnt)}
  4. 4. Programmazione Funzionaleassenza di stati(valori immutabili, funzioni pure, niente variabili)Funzioni come dato(passabili come argomenti o generate da altrefunzioni HOF)utilizzo di ricorsione, pattern matching ecomposizione di funzioni
  5. 5. Programmazione Funzionalefunction fib(n){ return n<2?n:fib(n-1)+fib(n-2);}http://en.literateprograms.org/Fibonacci_numbers_(JavaScript)
  6. 6. Programmazione Funzionalevar select = function(el) { return el < 6};filter(select, range(1,10));
  7. 7. First Class Functions Funzioni manipolabili come dati
  8. 8. First Class FunctionsPassabili come parametri$("div.players").each(function() { console.log($(this).attr(id));});
  9. 9. First Class FunctionsPossono generare altre funzionivar sum = function (a) { return function(b) { return a+b; };};sum(1)(2); // -> 3
  10. 10. High Order FunctionsLe HOF nella programmazione funzionale, sono funzioniche possono manipolare altre funzioni, accettarle comeparametri, crearle, o trasformarle in altre funzioni
  11. 11. High Order Functionsvar generateAccumulator=function(start) { var acc = start; return function(n) { acc=acc+n; console.log(acc); return acc; }};fnAcc=generateAccumulator(10);fnAcc(1);fnAcc(2);fnAcc(3);otteniamo 11,13 e 16
  12. 12. ClosureBecause Common Lisp is lexically scoped, when we define a function containingfree variables, the system must save copies of the bindings of those variables atthe time the function was defined. Such a combination of a function and a setof variable bindings is called a closure. Closures turn out to be useful in a widevariety of applications.(Paul Graham, On Lisp, cap 2.6)
  13. 13. Closure var generateAccumulator=function(start) { var acc = start; return function(n) { acc=acc+n; console.log(acc); return acc; } Definizione della closure }; Variabile locale visibile nello scopo delle funzioni figlie della HOFFunzione ritornata dalla HOF
  14. 14. High Order FunctionEsempi Esempi di HOF estrapolate dalla libreria functional.js di Oliver Steele http://osteele.com/sources/javascript/functional/
  15. 15. High Order FunctionMaptrasforma una lista in un’altra lista (fa un mapping)var lst=[1,2,3,4,5,6,7,8,9,10];var ret=map(function(el) { return el + 100; },lst);
  16. 16. High Order FunctionFilterapplica un filtro a una lista e ne ritorna una filtratavar lst=[1,2,3,4,5,6,7,8,9,10];var ret=filter(function(el) { return el < 6; },lst);
  17. 17. High Order FunctionReduceaccetta tre parametri (una funzione di trasformazione, unvalore o oggetto iniziale e la lista), applica una riduzionedella listavar lst=[1,2,3,4,5,6,7,8,9,10];var ret=reduce(function(x,y) { return x+y; },0,lst);// -> 55
  18. 18. High Order FunctionReduceaccetta tre parametri (una funzione di trasformazione, unvalore o oggetto iniziale e la lista), applica una riduzionedella listavar lst=[1,2,3,4,5,6,7,8,9,10];var ret=reduce(function(x,y) { return x+y; },0,lst);// -> 55
  19. 19. Function compositionS’intende la combinazione di funzioni semplici all’interno di una funzione più complessa.Questo composizione, permette di creare una funzione che è il risultato di una concatenazione di funzioni. Unica condizione è che queste funzioni accettino come parametro di input e di return un unico parametro.
  20. 20. Function compositionvar sum1 = function(x) { return x + 1;};var sum2 = function(x) { return x + 2;};var sum3 = function(x) { return x + 3;};var fnSum = sequence(sum1,sum2,sum3);fnSum(10); //-> 16// equivale a sum3(sum2(sum1(10)))
  21. 21. Function compositioncon HOFvar genSum = function(n) { return function (x) { return x+ n };}var sum1 = genSum(1);var sum2 = genSum(2);var sum3 = genSum(3);var fnSum = sequence(sum1,sum2,sum3);fnSum(10); //-> 16
  22. 22. Currying Per Currying si intende la trasformazione di una una funzione che accetta più parametri in una funzione cherestituisce una catena di funzioni, fino all’esaurirsi della lista di parametri. Dopo di che viene eseguito il corpo vero è proprio della funzione.
  23. 23. Curryingvar sum=function(a,b,c,d) { return a+b+c+d;};var sum3=sum.curry(1,2);//sum3 è un parziale della funzione sum con i primi 2 parametri a,b già valorizzati con1 e 2.//sum3 diventa una funzione che accetta 2 parametri c e d.sum3(3,4);-> ritorna 10var sum6=sum3.curry(3);//sum6 è a sua volta una parzializzaione di sum3 che accetta un unico parametro d a cuiviene aggiunto il valore 6.sum6(4);-> ritorna 10
  24. 24. PartialE lo stesso identico meccanisco del currying, solo che non si rispetta un ordine sequenziale di definizione dei parametri, ma un ordine casuale
  25. 25. Partialvar sum5=sum.partial(1,_,_,4);sum5(2,3);-> ritorna 10oppurevar sum8=sum.partial(1,_,3,4);sum8(2);-> ritorna 10;
  26. 26. ApprofondimentiOn Lisp di Paul GrahamLibrerie per functional programmingunderscore.jsasync.jsbacon.js (Functional reactive Programming)

×