Extracting Methods from Conditionals
Consider the code we had in the previous section:
const isAdmin: boolean = user.role === "admin"; const userIsActive: boolean = user.active; const userCanEdit: boolean = user.permissions.some(p => p === "edit"); const activeAdminCanEdit: boolean = isAdmin && userIsActive && userCanEdit; if(activeAdminCanEdit) { // Do stuff. }
In some cases, the above code is fine.
In other cases, sometimes, you just get that feeling... something's not right.
What's Wrong Here?
Let's think through this code.
Is it possible that somewhere else in our application we will need to check whether:
- A user is an admin?
- A user is active?
- A user can edit certain resources?
The answer is... probably... yes.
Right now, is that logic able to be accessed by other parts of your application?
Nope.
Oh, yeah. There's another thing. All of these conditionals are performed...