functional programming for fun and profit
DESCRIPTION
Rather than continually instructing a computer on how to get the job done, wouldn't it be so much easier if we simply had to explain what we wanted, and have the computer fill in the blanks for us? Functional programming gives us this ability through its focus and priority on functions, rather than variables and classes, which allows us to reduce coupling and complexity, giving us a more repeatable program. In this talk I'll explain my journey to understand, appreciate and leverage the power given to me by functional programming. See more at https://github.com/jamesottaway/decksTRANSCRIPT
![Page 1: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/1.jpg)
FUNCTIONALPROGRAMMING
function() { return [‘fun’,‘profit’];}
Monday, 28 October 13
![Page 2: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/2.jpg)
James Ottaway
@jms_
Monday, 28 October 13
![Page 3: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/3.jpg)
elevator pitch
Monday, 28 October 13
![Page 4: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/4.jpg)
teaser examples
Monday, 28 October 13
![Page 5: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/5.jpg)
(take 25 (squares-of (integers)))
Monday, 28 October 13
![Page 6: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/6.jpg)
[‘1’,’2’,’3’,’4’].map(&:to_i).reduce(&:+)
Monday, 28 October 13
![Page 7: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/7.jpg)
[1,2,3,4,5].filter(function(i) { return i % 2 == 0;});
Monday, 28 October 13
![Page 8: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/8.jpg)
history
Monday, 28 October 13
![Page 9: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/9.jpg)
lambda calculus
Monday, 28 October 13
![Page 10: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/10.jpg)
declarative programming
Monday, 28 October 13
![Page 11: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/11.jpg)
> how
Monday, 28 October 13
![Page 12: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/12.jpg)
nested paradigmsMonday, 28 October 13
![Page 13: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/13.jpg)
regex
Monday, 28 October 13
![Page 14: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/14.jpg)
reactive programming
Monday, 28 October 13
![Page 15: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/15.jpg)
domain specific languages
Monday, 28 October 13
![Page 16: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/16.jpg)
functional programming
Monday, 28 October 13
![Page 17: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/17.jpg)
languages
Monday, 28 October 13
![Page 18: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/18.jpg)
concepts
Monday, 28 October 13
![Page 19: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/19.jpg)
function() { }
Monday, 28 October 13
![Page 20: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/20.jpg)
function counter() { var x = 0;
function increment(y) { x += y; console.log(x); }
return increment;}
closures
Monday, 28 October 13
![Page 21: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/21.jpg)
first_counter = counter();second_counter = counter();
first_counter(1) // returns 1first_counter(2) // returns 3first_counter(3) // returns 6
second_counter(5) // returns 5second_counter(5) // returns 10second_counter(5) // returns 15
closures
Monday, 28 October 13
![Page 22: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/22.jpg)
no side effects
Monday, 28 October 13
![Page 23: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/23.jpg)
insanity
Monday, 28 October 13
![Page 24: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/24.jpg)
ONE = 1;
add = lambda { |x, y| x + y}
addOne = lambda { |x| add[x, ONE]}
referential transparency
Monday, 28 October 13
![Page 25: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/25.jpg)
require 'date'
opaque_millis = lambda { DateTime.now.strftime('%Q').to_i}
transparent_millis = lambda { |datetime| datetime.strftime('%Q').to_i}
referential transparency
Monday, 28 October 13
![Page 26: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/26.jpg)
memoisation
Monday, 28 October 13
![Page 27: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/27.jpg)
deforestationMonday, 28 October 13
![Page 28: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/28.jpg)
state is inevitable
Monday, 28 October 13
![Page 29: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/29.jpg)
recursion
Monday, 28 October 13
![Page 30: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/30.jpg)
structure and interpretation of computer programs
Monday, 28 October 13
![Page 31: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/31.jpg)
examples
Monday, 28 October 13
![Page 32: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/32.jpg)
list comprehension
Monday, 28 October 13
![Page 33: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/33.jpg)
source = [1,2,3,4,5]destination = []
for i in 0..source.length-1 do destination << source[i]*2end
return destination
Monday, 28 October 13
![Page 34: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/34.jpg)
[1,2,3,4,5].map { |i| i * 2 }
Monday, 28 October 13
![Page 35: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/35.jpg)
numbers = [1,2,3,4,5]x = 0
for i in 1..numbers.length-1 do x += numbers[i]end
return x
Monday, 28 October 13
![Page 36: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/36.jpg)
[1,2,3,4,5].reduce { |acc, x| acc + x }
Monday, 28 October 13
![Page 37: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/37.jpg)
[1,2,3,4,5].reduce(&:+)
Monday, 28 October 13
![Page 38: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/38.jpg)
mobile app frameworks
Monday, 28 October 13
![Page 39: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/39.jpg)
Monday, 28 October 13
![Page 40: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/40.jpg)
programming with nothing
Monday, 28 October 13
![Page 41: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/41.jpg)
reactive extensions
Monday, 28 October 13
![Page 42: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/42.jpg)
github desktop clients
Monday, 28 October 13
![Page 43: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/43.jpg)
go forth and prosper!
Monday, 28 October 13
![Page 44: Functional Programming for Fun and Profit](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54907a38b47959b23e8b4640/html5/thumbnails/44.jpg)
thanks
Monday, 28 October 13