Software Craftsmanship

Stop Writing If-Else Chains: 6 Better Alternatives

Stop Writing If-Else Chains: 6 Better Alternatives

Your if-else chains are unreadable. Here are better ways. 🔗

The Problem:

if (status === 'pending') {
  return 'Processing...'
} else if (status === 'completed') {
  return 'Done!'
} else if (status === 'failed') {
  return 'Error occurred'
} else if (status === 'cancelled') {
  return 'Cancelled by user'
} else {
  return 'Unknown status'
}

Better Alternatives:

1. Object Lookup

const statusMessages = {
  pending: 'Processing...',
  completed: 'Done!',
  failed: 'Error occurred',
  cancelled: 'Cancelled by user'
}
return statusMessages[status] || 'Unknown status'

2. Map for Complex Logic

const statusMap = new Map([
  ['pending', () => processStatus()],
  ['completed', () => showSuccess()],
  ['failed', () => handleError()]
])
return statusMap.get(status)?.()

3. Switch Statement (for complex cases)

switch (status) {
  case 'pending': return 'Processing...'
  case 'completed': return 'Done!'
  default: return 'Unknown status'
}

4. Polymorphism (OOP)

class StatusHandler {
  pending() { return 'Processing...' }
  completed() { return 'Done!' }
}

5. Strategy Pattern

const strategies = {
  pending: new PendingStrategy(),
  completed: new CompletedStrategy()
}

6. Early Returns

if (status === 'pending') return 'Processing...'
if (status === 'completed') return 'Done!'
return 'Unknown status'

When to Use What: • Object lookup: Simple value mapping • Map: Complex logic with functions • Switch: Multiple conditions, better performance • Polymorphism: Object-oriented design • Strategy: Swappable algorithms • Early returns: Guard clauses

Result: More readable, maintainable, and testable code.

Which pattern do you prefer? 🤔

#CleanCode#JavasScript#SoftwareDevelopment#CodeQuality#RefactoringTip