Functional programming
-
Upload
openagile-romania -
Category
Documents
-
view
589 -
download
0
description
Transcript of Functional programming
![Page 1: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/1.jpg)
Functional Programming
Ionut G. Stan - OpenAgile 2010
![Page 2: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/2.jpg)
Functional Programming
whatwhyhow
![Page 3: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/3.jpg)
Functional Programming
whatwhyhow
![Page 4: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/4.jpg)
What is FP
a programming style
![Page 5: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/5.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s)
![Page 6: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/6.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming
![Page 7: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/7.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions
![Page 8: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/8.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions math function: input completely determines the output
![Page 9: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/9.jpg)
Imperative Programming
programming: telling a computer what to do
![Page 10: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/10.jpg)
Imperative Programming
programming: telling a computer what to do imperative languages are leaky abstractions
![Page 11: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/11.jpg)
Imperative Programming
programming: telling a computer what to do imperative languages are leaky abstractions also called von Neumann languages
![Page 12: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/12.jpg)
Imperative Programming
programming: telling a computer what to do imperative languages are leaky abstractions also called von Neumann languages von Neumann architecture is about modifying the state of the computer
![Page 13: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/13.jpg)
von Neumann architecture
![Page 14: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/14.jpg)
Imperative Programming
programming: telling a computer what to do imperative languages are leaky abstractions also called von Neumann languages von Neumann architecture is about modifying the state of the computer computation model in imperative languages reflects von Neumann architecture
![Page 15: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/15.jpg)
Imperative Programming
programming: telling a computer what to do imperative languages are leaky abstractions also called von Neumann languages von Neumann architecture is about modifying the state of the computer computation model in imperative languages reflects von Neumann architecture imperative programming: what and how to do
![Page 16: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/16.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leak
![Page 17: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/17.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not how
![Page 18: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/18.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not howmutations not allowed (no variables, just identifiers)
![Page 19: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/19.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not howmutations not allowed (no variables, just identifiers)no statements, just expressions (if/then/else is expression)
![Page 20: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/20.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not howmutations not allowed (no variables, just identifiers)no statements, just expressions (if/then/else is expression) functions are deterministic and side-effect free
![Page 21: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/21.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not howmutations not allowed (no variables, just identifiers)no statements, just expressions (if/then/else is expression) functions are deterministic and side-effect freefunctions are all we need to model computation
![Page 22: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/22.jpg)
What is FP
a programming styleconceptually derived from lambda calculus (1930s) not procedural programming functions as in mathematical functions trying to plug the abstraction leaktell the computer what to do, not howmutations not allowed (no variables, just identifiers)no statements, just expressions (if/then/else is expression) functions are deterministic and side-effect freefunctions are all we need to model computationexecution order is not guaranteed
![Page 23: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/23.jpg)
Functional Programming
whatwhyhow
![Page 24: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/24.jpg)
Why FP
easier to reason about programs
![Page 25: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/25.jpg)
Why FP
easier to reason about programs
heisenbugs
![Page 26: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/26.jpg)
Why FP
easier to reason about programs
heisenbugs race conditions
![Page 27: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/27.jpg)
Why FP
easier to reason about programs
heisenbugs race conditions off by one errors
![Page 28: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/28.jpg)
Why FP
easier to reason about programs
heisenbugs race conditions off by one errors objects trashing another object's internal state
![Page 29: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/29.jpg)
Why FP
easier to reason about programs
![Page 30: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/30.jpg)
Why FP
easier to reason about programseasier to parallelize
![Page 31: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/31.jpg)
Why FP
easier to reason about programseasier to parallelizeprogram correctness proving
![Page 32: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/32.jpg)
Why FP
easier to reason about programseasier to parallelizeprogram correctness provingcomposability results in greater and easier reuse
![Page 33: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/33.jpg)
Just for fun - reuse in OO languages
"You wanted a banana but what you got was a gorillaholding the banana and the entire jungle." Joe Armstrong, creator of Erlang
![Page 34: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/34.jpg)
Why FP
easier to reason about programseasier to parallelizeprogram correctness provingcomposability results in greater and easier reuse try out new perspectives
![Page 35: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/35.jpg)
Functional Programming
whatwhyhow
![Page 36: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/36.jpg)
Functional Programming
whatwhyhow (even in imperative languages)
![Page 37: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/37.jpg)
How to FP
avoid side-effects/mutation as much as possible
![Page 38: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/38.jpg)
How to FP
avoid side-effects/mutation as much as possibleat least keep them as private as possible in OO
![Page 39: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/39.jpg)
How to FP
avoid side-effects/mutation as much as possibleat least keep them as private as possible in OO treat variables as immutable (constants/final)
![Page 40: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/40.jpg)
How to FP
avoid side-effects/mutation as much as possibleat least keep them as private as possible in OO treat variables as immutable (constants/final) return values (output) based on params (input) only
![Page 41: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/41.jpg)
How to FP
avoid side-effects/mutation as much as possibleat least keep them as private as possible in OO treat variables as immutable (constants/final) return values (output) based on params (input) only play with a functional language
![Page 42: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/42.jpg)
Functional Programming
whatwhyhowexample
![Page 43: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/43.jpg)
Example
![Page 44: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/44.jpg)
Example
![Page 45: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/45.jpg)
Example
![Page 46: Functional programming](https://reader035.fdocuments.us/reader035/viewer/2022081800/54b48a984a7959d6398b46fc/html5/thumbnails/46.jpg)
"Conventional programming languages are growing ever more enormous, but not stronger. Inherent defects at the most basic level cause them to be both fat and weak: their primitive word-at-a-time style of programming inherited from their common ancestor -- the von Neumann computer, their close coupling of semantics to state transitions, their division of programming into a world of expressions and a world of statements, their inability to effectively use powerful combining forms for building new programs from existing ones, and their lack of useful mathematical properties for reasoning about programs."
John Backus, known for Fortran, Algol and BNF