// статья
Чистые функции: принципы написания читаемого кода
Практические правила написания функций, которые легко читать, тестировать и поддерживать. Примеры на JavaScript и TypeScript.
Принцип единственной ответственности
Каждая функция должна делать одну вещь и делать её хорошо:
// Плохо: функция делает слишком много
function processUser(userData: unknown) {
// валидация
// сохранение в БД
// отправка email
// логирование
}
// Хорошо: разделение ответственности
function validateUser(data: unknown): User { /* ... */ }
function saveUser(user: User): Promise<void> { /* ... */ }
function sendWelcomeEmail(user: User): Promise<void> { /* ... */ }
Чистые функции
Функция считается чистой, если:
- При одинаковых аргументах всегда возвращает одинаковый результат
- Не имеет побочных эффектов
// Чистая функция
function calculateTotal(prices: number[]): number {
return prices.reduce((sum, price) => sum + price, 0);
}
// Нечистая функция (зависит от внешнего состояния)
let taxRate = 0.2;
function calculateWithTax(price: number): number {
return price * (1 + taxRate);
}
Именование
Имя функции должно описывать что она делает:
// Плохо
function process(data: string[]): string[] { /* ... */ }
// Хорошо
function removeDuplicates(items: string[]): string[] { /* ... */ }
Количество аргументов
Идеально — 0-2 аргумента. Если нужно больше — используйте объект:
// Вместо этого
function createUser(name: string, email: string, age: number, role: string) {}
// Лучше так
interface CreateUserOptions {
name: string;
email: string;
age: number;
role: string;
}
function createUser(options: CreateUserOptions) {}