Коротка відповідь
middleЧейнінг функцій — це послідовне викликання методів одного об’єкта, де кожен повертає сам об’єкт. Це дозволяє писати компактний код без проміжних змінних. Приклад: const result = obj.method1().method2().method3();
Повне пояснення
Що це і навіщо
Чейнінг функцій (method chaining) — патерн, що дозволяє викликати кілька методів послідовно, кожен з яких повертає об’єкт, що дозволяє продовжувати ланцюг. Це зменшує кількість проміжних змінних і робить код більш читабельним.
Ключові принципи
- Кожен метод повертає
this(або інший об’єкт), що дозволяє продовжувати виклик. - Підходить для API, які модифікують стан об’єкта або збирають результати.
Як це працює
- Викликається перший метод на об’єкті.
- Метод повертає сам об’єкт (або новий), що дозволяє викликати наступний.
- Процес повторюється, доки не завершиться ланцюг.
Практика і реалізація (JavaScript/TypeScript)
class Builder {
private value = 0;
add(n: number) { this.value += n; return this; }
mul(n: number) { this.value *= n; return this; }
getResult() { return this.value; }
}
const result = new Builder().add(5).mul(3).getResult(); // 15
Тестування
import { describe, it, expect } from 'vitest';
describe('Builder', () => {
it('chains correctly', () => {
const res = new Builder().add(2).mul(4).getResult();
expect(res).toBe(8);
});
});
Оптимізація та edge cases
- Переконайтеся, що методи не повертають
undefinedабо інший тип. - Якщо потрібен новий об’єкт, поверніть його замість
this.
Часті помилки
- Забуваєте повернути
this→ ланцюг розривається. - Метод змінює стан, але повертає новий об’єкт → неочікувані результати.
- Використання асинхронних методів без
await→ ланцюг не працює.
Cheatsheet
return this;→ продовжити ланцюг.getResult()або інший «getter» → завершити ланцюг і отримати результат.- Для асинхронних операцій використовуйте
async/awaitу кожному методі.