Books
Dan Mantyla

Functional Programming in JavaScript

This is a fast-paced guide that will help you to write real-world applications by utilizing a wide range of functional techniques and styles.
The book first explores the core concepts of functional programming common to all functional languages, with examples of their use in JavaScript. It's followed by a comprehensive roundup of functional programming libraries for JavaScript that minimizes the burden of digging deep into JavaScript to expose a set of tools that makes functional programming not just possible but highly convenient. The book then rounds off with an overview of methods to effectively use and mix functional programming with object-oriented programming.
163 printed pages

Impressions

    👍
    👎
    💧
    🐼
    💤
    💩
    💀
    🙈
    🔮
    💡
    🎯
    💞
    🌴
    🚀
    😄

    How did you like the book?

    Sign in or Register

Quotes

    Ingrid Belanhas quoted3 years ago
    While imperative code tells the machine, step-by-step, what it needs to do to solve the problem, functional programming instead seeks to describe the problem mathematically so that the machine can do the rest
    .has quoted3 years ago
    Lazy evaluation, also known as non-strict evaluation, call-by-need and deffered execution, is an evaluation strategy that waits until the value is needed to compute the result of a function and is particularly useful for functional programming. It's clear that a line of code that states x = func() is calling for x to be assigned to the returned value by func(). But what x actually equates to does not matter until it is needed. Waiting to call func() until x is needed is known as lazy evaluation.
    .has quoted3 years ago
    Pure functions

    Pure functions return a value computed using only the inputs passed to it. Outside variables and global states may not be used and there may be no side effects. In other words, it must not mutate the variables passed to it for input. Therefore, pure functions are only used for their returned value.
    A simple example of this is a math function. The Math.sqrt(4) function will always return 2, does not use any hidden information such as settings or state, and will never inflict any side effects.
    Pure functions are the true interpretation of the mathematical term for 'function', a relation between inputs and an output. They are simple to think about and are readily re-usable. Because they are totally independent, pure functions are more capable of being used again and again.
    To illustrate this, compare the following non-pure function to the pure one.
    // function that prints a message to the center of the screen
    var printCenter = function(str) {
    var elem = document.createElement("div");
    elem.textContent = str;
    elem.style.position = 'absolute';
    elem.style.top = window.innerHeight/2+"px";
    elem.style.left = window.innerWidth/2+"px";
    document.body.appendChild(elem);
    };
    printCenter('hello world');
    // pure function that accomplishes the same thing
    var printSomewhere = function(str, height, width) {
    var elem = document.createElement("div");
    elem.textContent = str;
    elem.style.position = 'absolute';
    elem.style.top = height;
    elem.style.left = width;
    return elem;
    };
    document.body.appendChild(printSomewhere('hello world', window.innerHeight/2)+10+"px",window.innerWidth/2)+10+"px")
    );
    While the non-pure function relies on the state of the window object to compute the height and width, the pure, self-sufficient function instead asks that those values be passed in. What this actually does is allow the message to be printed anywhere, and this makes the function much more versatile.
    And while the non-pure function may seem like the easier option because it performs the appending itself instead of returning an element, the pure function printSomewhere() and its returned value play better with other functional programming design techniques.
    var messages = ['Hi', 'Hello', 'Sup', 'Hey', 'Hola'];
    messages.map(function(s,i){
    return printSomewhere(s, 100*i*10, 100*i*10);
    }).forEach(function(element) {
    document.body.appendChild(element);
    });

On the bookshelves

    Kristina
    Learn programming
    • 119
    • 63
    Liudmila Vasnetsova
    JavaScript
    • 13
    • 22
    Per Nielsen
    Programmering
    • 51
    • 8
    miodragjokic
    Programiranje
    • 3
    • 2
    Vitaly Popov
    ItBooks
    • 10
    • 1
fb2epub
Drag & drop your files (not more than 5 at once)