This function does three distinct jobs: fetches, filters, and formats — a maintenance nightmare.
// dirty — one function, three responsibilities
interface User { name: string; age: number; isActive: boolean; }
function solve(rawUsers: User[]) {
// fetch (simulated here as the input)
const active = rawUsers.filter(u => u.isActive);
const seniors = active.filter(u => u.age >= 60);
return seniors.map(u => u.name.toUpperCase() + ' (' + u.age + ')');
}Refactor into three functions, each with one job:
filterActive(users) — keep only active usersfilterSeniors(users) — keep only users aged 60+format(users) — format as "NAME (age)" stringssolve(users, 'filterActive') dispatches to the right function.
Sample tests