Перейти до основного вмісту

Патерн «Об'єкт параметрів»

Якщо функція приймає більше двох-трьох аргументів, дуже просто заплутатись, в якій послідовності і що передавати. В результаті виходить дуже неочевидний код в місці її виклику.

function doStuffWithBook(title, numberOfPages, downloads, rating, public) {
// Робимо щось з параметрами
console.log(title);
console.log(numberOfPages);
// І так далі

// ❌ Що таке 736? Що таке 10283? Що таке true?
doStuffWithBook("The Last Kingdom", 736, 10283, 8.38, true);

Патерн «Об'єкт параметрів» допомагає вирішити цю проблему, замінюючи набір параметрів всього одним об'єктом з іменованими властивостями.

function doStuffWithBook(book) {
// Робимо щось з властивостями об'єкта
console.log(book.title);
console.log(book.numberOfPages);
// І так далі
}

У такому випадку, під час її виклику передаємо один об'єкт з необхідними властивостями.

// ✅ Все зрозуміло
doStuffWithBook({
title: "The Last Kingdom",
numberOfPages: 736,
downloads: 10283,
rating: 8.38,
isPublic: true,
});

Ще один плюс у тому, що можна деструктуризувати об'єкт в параметрі book. Це можна зробити в тілі функції.

function doStuffWithBook(book) {
const { title, numberOfPages, downloads, rating, isPublic } = book;
console.log(title);
console.log(numberOfPages);
// І так далі
}

Або відразу в сигнатурі (підписі) функції - немає різниці.

function doStuffWithBook({
title,
numberOfPages,
downloads,
rating,
isPublic,
}) {
console.log(title);
console.log(numberOfPages);
// І так далі
}