FUNCTIONAL PROGRAMMING IN A NUTSHELL Adityo Pratomo (Framework) TiA PDC’17
HELLO, I’M DIDIT Chief Academic Officer Froyo Framework Jakarta-based IT trainer provider CTO & Production Manager Labtek Indie Bandung-based Digital Product R&D Company
HELLO, I’M DIDIT I mainly develop Interactive graphics, game, hardware
OVERVIEW What is functional programming? Functional programming vs imperative programming Building block of functional programming How functional programming will help you?
PROGRAMMING programmer source code computer Co-workers Thoughts into codes Codes into instructions Read code for analysis Programmers are required to instruct machine and communicate to humans WHILE solving problems according to set of rules (languages, frameworks, hardware architecture, and so forth)
TOOLS FOR PROGRAMMERS Software Frameworks Programming Language Programming Paradigm Functional Programming
Functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions or declarations instead of statements. treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data
FUNCTIONAL VS IMPERATIVE: AN ANALOGY
MI REBUS: THE IMPERATIVE WAY 1. Pour water into saucepan 2. Turn on stove to boil the water 3. After the water boils, insert the noodle 4. Add seasonings 5. Cook for 3 minutes 6. Pour noodle from the saucepan along with the soup to a bowl
MI REBUS: THE FUNCTIONAL WAY 1. Mi rebus components: i. Boiling water ii. Cooked noodle and seasonings iii. Served noodle on bowl 2. Compositions of components: i. Serve(cooked(boiled(noodle and seasonings)))
FUNCTIONAL VS IMPERATIVE 1. Pour water into saucepan 2. Turn on stove to boil the water 3. After the water boils, insert the noodle 4. Add seasonings 5. Cook for 3 minutes 6. Pour noodle from the saucepan along with the soup to a bowl 1. Mi rebus components: i. Boiling water ii. Cooked noodle and seasonings iii. Served noodle on bowl 2. Compositions of components: i. Serve(cooked(boiled(noodle and seasonings))) Imperative: 1. Focuses on HOW to do things 2. A set of sequential instructions 3. Depends on state to operate 4. Not necessarily reusable, each new product might require using set of new instructions Functional: 1. Focuses on WHAT is a thing 2. Composing set of functions, each functions has a clear result 3. Not depends on state 4. Each functions can be reused by including in different compositions
FUNCTIONAL VS IMPERATIVE Menghitung nilai terbesar dan rata-rata dari sebuah data
FUNCTIONAL VS IMPERATIVE Menghitung nilai terbesar dan rata-rata dari sebuah data
FUNCTIONAL VS IMPERATIVE • Functions are being used to describe a step- by step instructions of doing things • Relies on for loop • Involves temporary mutable variable to store state • Functions are being used to describe a desired result from an operation • Relies on array method • No mutable variable and no state
FUNCTIONAL VS IMPERATIVE Normalize the numbers by: - Count average - Increase numbers smaller than average - Decrease numbers smaller by average
BUILDING BLOCKS OF FUNCTIONAL PROGRAMMING 1. Immutable data ­ A data whose value(s) can’t be change 2. Pure function ­ A function whose return value is only determined by its input values, without observable side effects ­ Produce the same output when processing the same input const myData = [51, 72, 38, 94]; function isEven (x) { if (x % 2 == 0) { return true; } }
PURE FUNCTIONS AND FUNCTION COMPOSITION Always returns a function or value A reusable building block of a program Several functions can be composed to do data processing, creating a new function f(x) => y g(x) => z f o g (x) = f(g(x)) function compose (f, g) { return function (x) { return f(g(x)); } } function add2(x) { return x + 2; } function multiply4(x) { return x*4; } var add2Multiply4 = compose(add2, multiply4); console.log(add2Multiply4(2));
PURE FUNCTIONS AND FUNCTION COMPOSITION const albumList = [ { artist: "Metallica", title: "Master of Puppets", year: 1986 }, { artist: "Metallica", title: "Black Album", year: 1990 }, { artist: "Megadeth", title: "Rust in Peace", year: 1990 } ] const getMetallica = (arr) => arr.filter((item) => item.artist === 'Metallica'); const getAlbumIn1990 = (arr) => arr.filter((item) => item.year === 1990); const getMetallicaAlbumIn1990 = compose(getMetallica, getAlbumIn1990); console.log(getMetallicaAlbumIn1990(albumList)); //[ { artist: "Metallica", title: "Black Album", year: 1990 }],
HOW FUNCTIONAL PROGRAMMING HELPS? Pure functions Immutable Data Create testable software from the ground up Reduce bugs Create multithread application Create true modular software
WHERE CAN I USE IT? -Back end: - Various data processing and simulation (Scala, Haskell, Clojure, Elixir, Erlang, etc.) -Front end: - One way data rendering (Elm) -Anywhere: - Code in your favourite language using functional programming style (C#, C++, JavaScript, Python)
LAST NOTE Pure functional programming have no side effects ­ Real world application relies on side effects for I/O operation ­ Use functional style to manage the side effects Functional programming doesn’t use state ­ Game programing relies on state to manage the game (level, progressions, health, etc) ­ Use state to manage, but inner operations can still use FP
MAKE SOMETHING AWESOME! Thank You didit@froyo.co.id didit@labtekindie.com @kotakmakan

"Functional Programming in a Nutshell" by Adityo Pratomo (Froyo Framework)

  • 1.
    FUNCTIONAL PROGRAMMING INA NUTSHELL Adityo Pratomo (Framework) TiA PDC’17
  • 2.
    HELLO, I’M DIDIT ChiefAcademic Officer Froyo Framework Jakarta-based IT trainer provider CTO & Production Manager Labtek Indie Bandung-based Digital Product R&D Company
  • 3.
    HELLO, I’M DIDIT Imainly develop Interactive graphics, game, hardware
  • 4.
    OVERVIEW What is functionalprogramming? Functional programming vs imperative programming Building block of functional programming How functional programming will help you?
  • 5.
    PROGRAMMING programmer source codecomputer Co-workers Thoughts into codes Codes into instructions Read code for analysis Programmers are required to instruct machine and communicate to humans WHILE solving problems according to set of rules (languages, frameworks, hardware architecture, and so forth)
  • 6.
    TOOLS FOR PROGRAMMERS Software Frameworks ProgrammingLanguage Programming Paradigm Functional Programming
  • 8.
    Functional programming isa programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions or declarations instead of statements. treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data
  • 9.
  • 10.
    MI REBUS: THEIMPERATIVE WAY 1. Pour water into saucepan 2. Turn on stove to boil the water 3. After the water boils, insert the noodle 4. Add seasonings 5. Cook for 3 minutes 6. Pour noodle from the saucepan along with the soup to a bowl
  • 11.
    MI REBUS: THEFUNCTIONAL WAY 1. Mi rebus components: i. Boiling water ii. Cooked noodle and seasonings iii. Served noodle on bowl 2. Compositions of components: i. Serve(cooked(boiled(noodle and seasonings)))
  • 12.
    FUNCTIONAL VS IMPERATIVE 1.Pour water into saucepan 2. Turn on stove to boil the water 3. After the water boils, insert the noodle 4. Add seasonings 5. Cook for 3 minutes 6. Pour noodle from the saucepan along with the soup to a bowl 1. Mi rebus components: i. Boiling water ii. Cooked noodle and seasonings iii. Served noodle on bowl 2. Compositions of components: i. Serve(cooked(boiled(noodle and seasonings))) Imperative: 1. Focuses on HOW to do things 2. A set of sequential instructions 3. Depends on state to operate 4. Not necessarily reusable, each new product might require using set of new instructions Functional: 1. Focuses on WHAT is a thing 2. Composing set of functions, each functions has a clear result 3. Not depends on state 4. Each functions can be reused by including in different compositions
  • 13.
    FUNCTIONAL VS IMPERATIVE Menghitungnilai terbesar dan rata-rata dari sebuah data
  • 14.
    FUNCTIONAL VS IMPERATIVE Menghitungnilai terbesar dan rata-rata dari sebuah data
  • 15.
    FUNCTIONAL VS IMPERATIVE •Functions are being used to describe a step- by step instructions of doing things • Relies on for loop • Involves temporary mutable variable to store state • Functions are being used to describe a desired result from an operation • Relies on array method • No mutable variable and no state
  • 16.
    FUNCTIONAL VS IMPERATIVE Normalizethe numbers by: - Count average - Increase numbers smaller than average - Decrease numbers smaller by average
  • 17.
    BUILDING BLOCKS OFFUNCTIONAL PROGRAMMING 1. Immutable data ­ A data whose value(s) can’t be change 2. Pure function ­ A function whose return value is only determined by its input values, without observable side effects ­ Produce the same output when processing the same input const myData = [51, 72, 38, 94]; function isEven (x) { if (x % 2 == 0) { return true; } }
  • 18.
    PURE FUNCTIONS ANDFUNCTION COMPOSITION Always returns a function or value A reusable building block of a program Several functions can be composed to do data processing, creating a new function f(x) => y g(x) => z f o g (x) = f(g(x)) function compose (f, g) { return function (x) { return f(g(x)); } } function add2(x) { return x + 2; } function multiply4(x) { return x*4; } var add2Multiply4 = compose(add2, multiply4); console.log(add2Multiply4(2));
  • 19.
    PURE FUNCTIONS ANDFUNCTION COMPOSITION const albumList = [ { artist: "Metallica", title: "Master of Puppets", year: 1986 }, { artist: "Metallica", title: "Black Album", year: 1990 }, { artist: "Megadeth", title: "Rust in Peace", year: 1990 } ] const getMetallica = (arr) => arr.filter((item) => item.artist === 'Metallica'); const getAlbumIn1990 = (arr) => arr.filter((item) => item.year === 1990); const getMetallicaAlbumIn1990 = compose(getMetallica, getAlbumIn1990); console.log(getMetallicaAlbumIn1990(albumList)); //[ { artist: "Metallica", title: "Black Album", year: 1990 }],
  • 21.
    HOW FUNCTIONAL PROGRAMMINGHELPS? Pure functions Immutable Data Create testable software from the ground up Reduce bugs Create multithread application Create true modular software
  • 22.
    WHERE CAN IUSE IT? -Back end: - Various data processing and simulation (Scala, Haskell, Clojure, Elixir, Erlang, etc.) -Front end: - One way data rendering (Elm) -Anywhere: - Code in your favourite language using functional programming style (C#, C++, JavaScript, Python)
  • 23.
    LAST NOTE Pure functionalprogramming have no side effects ­ Real world application relies on side effects for I/O operation ­ Use functional style to manage the side effects Functional programming doesn’t use state ­ Game programing relies on state to manage the game (level, progressions, health, etc) ­ Use state to manage, but inner operations can still use FP
  • 24.
    MAKE SOMETHING AWESOME! ThankYou didit@froyo.co.id didit@labtekindie.com @kotakmakan