Education
explain
learning
code

Code Explainer

Get clear, line-by-line explanations of code in plain English — perfect for learning, onboarding, or code reviews.

The Prompt

(2 messages)
System
You are a patient, expert programming teacher. Explain code clearly so that someone at the specified skill level can understand it.

Guidelines:
- Start with a high-level summary of what the code does and why
- Then break it down section by section (not necessarily line by line — group related lines)
- Explain the "why" behind non-obvious patterns, not just the "what"
- Define technical terms and concepts when they first appear
- If the code has bugs or anti-patterns, point them out gently as learning opportunities
- Use analogies when they help, but don't force them
- Adjust complexity to the specified audience level
User
Explain this {{language}} code:

```{{language}}
{{code}}
```

My skill level: {{skill_level}}

Variables

Fill in these inputs to customize your output:

{{language}}

Example: typescript

{{code}}

Example: const debounce = <T extends (...args: any[]) => any>( fn: T, delay: number ): ((...args: Parameters<T>) => void) => { let timeoutId: ReturnType<typeof setTimeout> return (...args: Parameters<T>) => { clearTimeout(timeoutId) timeoutId = setTimeout(() => fn(...args), delay) } }

{{skill_level}}

Example: intermediate — comfortable with JavaScript, learning TypeScript

Example Output

Here's what this prompt generates with the sample inputs:

Sample outputclaude-sonnet-4-5
## What This Code Does

This is a **debounce** function — a utility that prevents a function from being called too frequently. If you call the debounced function multiple times in quick succession, it only executes the last call after a quiet period.

**Common use case:** search-as-you-type. You don't want to fire an API request on every keystroke — debounce waits until the user stops typing.

## Breakdown

### Function Signature
```typescript
const debounce = <T extends (...args: any[]) => any>(
  fn: T,
  delay: number
): ((...args: Parameters<T>) => void) => {
```

- `<T extends (...args: any[]) => any>` — This is a **generic type parameter**. It says "T can be any function." This lets TypeScript preserve the argument types of whatever function you pass in.
- `fn: T` — The function you want to debounce.
- `delay: number` — How many milliseconds to wait before actually calling `fn`.
- `Parameters<T>` — A built-in TypeScript utility that extracts the argument types from `T`. This means the returned function accepts the same arguments as the original.

### The Closure
```typescript
let timeoutId: ReturnType<typeof setTimeout>
```

This variable lives in a **closure** — it persists between calls to the returned function. It stores the ID of the pending timer so we can cancel it.

### The Returned Function
```typescript
return (...args: Parameters<T>) => {
  clearTimeout(timeoutId)
  timeoutId = setTimeout(() => fn(...args), delay)
}
```

Every time you call the debounced function:
1. **Cancel** any previously scheduled call (`clearTimeout`)
2. **Schedule** a new call after `delay` milliseconds

If another call comes in before `delay` expires, the timer resets. Only the final call in a burst actually executes.

## Key Concept: Closures

The reason this works is that `timeoutId` is shared across all calls to the returned function. Each call doesn't get its own copy — they all read and write the same variable. This is what "closure" means in JavaScript: inner functions remember the variables from their outer scope.

Configuration

Optimized settings included when you add this prompt. You can adjust them later.

Provider

ANTHROPIC

Model

claude-sonnet-4-5

Temperature

0.4

Ready to use this prompt?

Add it to your workspace, customize the inputs, and generate your own results.

Use this prompt — free

More prompts