I’ve got a fairly large set of booleans I’m checking in javascript, and then using them to alter the state of a layout in my React app. The whole thing is unwieldy, difficult to read, inelegant, and feels terribly amateurish. I was wondering if there was a better pattern for handling something like this.
Example code snippet (in coffeescript). Replaced object variables with ints for brevity:
setNeeded = _.contains(sessionInitialStates, codingSession.state)
sessionUpdating = codingSession.state is 'UPDATING'
sessionFailed = codingSession.state is 'FAILED'
setExtended = _.contains extStates, codingSession.state
setInReview = _.contains(reviewStates, controlSet.state) or
_.contains(controlSetSyncStates, controlSet.state)
sessionIsTagging = _.contains tagStates, codingSession.state
sessionComplete = codingSession.state is 'COMPLETE'
sessionIsNew = _.isEmpty(codingSession.state) or
codingSession.state is 'CREATED'
commError = controlSet.state is 'COMMUNICATION_ERROR'
if setNeeded and @props.creds
someVar = 1
else if _.contains(sessionInitialStates, codingSession.state) and
controlSet.state is 'PROCESSING_FAILED'
someVar = 2
else if codingSession.state is 'CONTROL_SET_GENERATION' and
controlSet.state is 'SELECTION_FAILED' and @props.creds
someVar = 3
else if !sessionIsTagging or !sessionComplete
if _.isEmpty @props.connector
someVar = 4
else if [email protected]
someVar = 5
else if sessionFailed
someVar = 6
else if sessionIsNew
someVar = 7
else if sessionUpdating
someVar = 8
else if setInReview and !setExtended
someVar = 9
1
When you notice large blocks of if
/else
, it usually means that your class or method is doing too much.
Instead of trying to rewrite the logic inside the method:
-
Ensure the method does one and one only thing.
-
Replace the class by multiple classes which inherit from a common one.
For practical examples, if you have an actual working piece of code but contains too much if
/else
statements, you may post it on CodeReview.SE.