Book Image

Mastering Immutable.js

By : Adam Boduch
Book Image

Mastering Immutable.js

By: Adam Boduch

Overview of this book

Immutable.js is a JavaScript library that will improve the robustness and dependability of your larger JavaScript projects. All aspects of the Immutable.js framework are covered in this book, and common JavaScript situations are examined in a hands-on way so that you gain practical experience using Immutable.js that you can apply across your own JavaScript projects. The key to building robust JavaScript applications using immutability is to control how data flows through your application, and how the side-effects of these flows are managed. Many problems that are difficult to pinpoint in large codebases stem from data that’s been mutated where it shouldn’t have been. With immutable data, you rule out an entire class of bugs. Mastering Immutable.js takes a practical, hands-on approach throughout, and shows you the ins and outs of the Immutable.js framework so that you can confidently build successful and dependable JavaScript projects.
Table of Contents (23 chapters)
Title Page
Credits
About the Author
About the Reviewer
www.PacktPub.com
Customer Feedback
Preface

Parameters and defaults


The preceding example has a couple of limitations. First, there's no way to pass arguments to the behaviors when they're called. Second, if you try to call something that doesn't exist, it blows up. We should be able to address both of these issues.

Providing default behavior

When the caller attempts to call a behavior that doesn't exist by passing a key that doesn't exist in the behavior map, you should be able to recover from this. Thankfully, the get() method accepts a second argument that's returned if the requested key doesn't exist:

const myBehavior = action => Map.of(
  true, () => console.log('thruth'),
  false, () => console.log('lies')
).get(
  action,
  () => console.log('default')
)();

myBehavior(true);
// -> truth
myBehavior(false);
// -> lies
myBehavior();
// -> default
myBehavior(123);
// -> default

The last two calls to myBehavior() result in the default behavior running because neither call is passed a key that exists. This means...