6.1. A border case: Just applying the function to a null object will throw an error:
const getField = attr => obj => obj[attr];
getField("someField")(null);
// Uncaught TypeError: Cannot read property 'a' of null
Having functions throw exceptions isn't usually good in FP. You may opt to produce undefined instead, or work with monads, just like we did in the last Chapter 12, Building Better Containers – Functional Data Types of this book. A safe version of getField() is as follows:
const getField2 = attr => obj => (attr && obj ? obj[attr] : undefined);
6.2. How many? Let's call calc(n) the number of calls that are needed to evaluate fib(n). Analyzing the tree that shows all the needed calculations, we get the following:
- calc(0)=1
- calc(1)=1
- For n...