# Clean Functions

> Use when writing, fixing, editing, or refactoring TypeScript functions. Enforces Clean Code principles—maximum 3 arguments, single responsibility, no flag parameters.

- Skill: `bartoszkwiat/clean-functions` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bartoszkwiat/clean-functions`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bartoszkwiat/clean-functions/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bartoszkwiat (https://skillmd.com/u/bartoszkwiat)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/bartoszkwiat/clean-functions

---


# Clean Functions

## F1: Too Many Arguments (Maximum 3)

```typescript
// Bad - too many parameters
function createUser(
    name: string,
    email: string,
    age: number,
    country: string,
    timezone: string,
    language: string,
    newsletter: boolean
): User {
    // ...
}

// Good - use an interface or type
interface UserData {
    name: string;
    email: string;
    age: number;
    country: string;
    timezone: string;
    language: string;
    newsletter: boolean;
}

const createUser = (data: UserData): User => {
    // ...
};
```

More than 3 arguments means your function is doing too much or needs 
a data structure.

## F2: No Output Arguments

Don't modify arguments as side effects. Return values instead.

```typescript
// Bad - modifies argument
function appendFooter(report: string[]): void {
    report.push("\n---\nGenerated by System");
}

// Good - returns new value
const withFooter = (report: string): string => {
    return report + "\n---\nGenerated by System";
};
```

## F3: No Flag Arguments

Boolean flags mean your function does at least two things.

```typescript
// Bad - function does two different things
function render(isTest: boolean): void {
    if (isTest) {
        renderTestPage();
    } else {
        renderProductionPage();
    }
}

// Good - split into two functions
const renderTestPage = (): void => { /* ... */ };
const renderProductionPage = (): void => { /* ... */ };
```

## F4: Delete Dead Functions

If it's not called, delete it. No "just in case" code. Git preserves history.

