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? 🤔
