Summary

We discussed that, by being lazy, we can create efficient code. Lazy enumeration is useful when we need to iterate an infinite loop so that it will not overflow since the MoveNext() method in IEnumerator will be run only if asked. Also, lazy evaluation makes our code run faster because the compiler does not need to check all Boolean expressions if one of them has given the result.

In nonstrict evaluation, we treat a function in programming like we treat a mathematical function. Using this evaluation technique, we use the functional approach to solve the function.

We have also become acquainted with the lazy initialization provided by the Lazy<T> class to defer the object's initialization, which means that we can define an object but it won't be initialized if the member of the object has not been accessed yet.

To optimize our code, we discussed caching techniques using precomputation and memoization. In precomputation, we prepare something like a lookup table so we don't need to run the function with the exact argument; instead, we just need to get the result from the table. We also have memoization in order to remember the result of the function with a specific input. Using memoization, every time we call the function with the exact same input argument again, the code doesn't need to run the code; instead, it will get it from the place where it stores the result.

In the next chapter, we will discuss monads and their use in functional programming.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset