👋 با اپراتور Spread خداحافظی کنید: از Composer پیش فرض استفاده کنید

مقاله اصلی: https://aralroca.com/blog/default-composer
هنگام کار با اشیاء در جاوا اسکریپت، معمولاً نیاز به تنظیم مقادیر پیش فرض برای خالی وجود دارد strings
/objects
/arrays
، null
، یا undefined
خواص هنگام برخورد با اشیاء تو در تو، این می تواند حتی پیچیده تر شود و به منطق برنامه نویسی پیچیده نیاز داشته باشد. با این حال، با “آهنگساز پیش فرض“کتابخانه، این کار ساده و آسان می شود.
“پیشفرض آهنگساز” چیست؟
“default-composer” یک کتابخانه جاوا اسکریپت سبک وزن (~300B) است که به شما امکان می دهد مقادیر پیش فرض را برای اشیاء تودرتو تنظیم کنید. این کتابخانه رشته ها/آرایه ها/اشیاء خالی، مقادیر تهی یا تعریف نشده را در یک شی موجود با مقادیر پیش فرض تعریف شده جایگزین می کند، که به ساده سازی منطق برنامه نویسی و کاهش مقدار کد مورد نیاز برای تنظیم مقادیر پیش فرض کمک می کند.
مزایای بیش از Spread Operator و Object.assign
در حالی که ...spread
اپراتور و Object.assign()
همچنین می تواند برای تنظیم مقادیر پیش فرض برای اشیاء استفاده شود، “default-composer
مزایای متعددی نسبت به این روش ها ارائه می دهد.
- کار میکند با اشیاء تو در تو، در حالی که عملگر گسترش و
Object.assign()
فقط با اشیاء کم عمق کار کنید. - مختصرتر و خواندن راحت تر از اپراتور گسترش یا
Object.assign()
. کد مورد نیاز برای تنظیم مقادیر پیشفرض با این روشها میتواند بسیار پرمخاطب و خواندن آن دشوار باشد، بهویژه زمانی که با اشیاء تودرتو سروکار داریم. - دانه بندی تر کنترل که بیش از آن خواص باید باشد روی مقادیر پیش فرض تنظیم کنید. با اپراتور اسپرد و
Object.assign()
.
تصور کنید این شی اصلی را داریم:
const original = {
name: "",
score: null,
address: {
street: "",
city: "",
state: "",
zip: "",
},
emails: [],
hobbies: [],
another: "anotherValue"
};
و اینها پیش فرض ها هستند:
const defaults = {
name: "John Doe",
score: 5,
address: {
street: "123 Main St",
city: "Anytown",
state: "CA",
zip: "12345",
},
emails: ["john.doe@example.com"],
hobbies: ["reading", "traveling"],
};
ما می خواهیم این اشیاء را با مقادیر اصلی که هستند ادغام کنیم ""
، null
، []
، undefined
و {}
به مقدار پیش فرض بنابراین ایده این است که:
console.log(results)
/**
* {
* "name": "John Doe",
* "score": 5,
* "address": {
* "street": "123 Main St",
* "city": "Anytown",
* "state": "CA",
* "zip": "12345"
* },
* "emails": [
* "john.doe@example.com"
* ],
* "hobbies": [
* "reading",
* "traveling"
* ],
* "another": "anotherValue"
**/
احتمالاً با اپراتور spread باید چنین کاری انجام دهیم:
const results = {
...defaults,
...original,
name: original.name || defaults.name,
score: original.score ?? defaults.score, // "??" beacause 0 is valid
address: {
...defaults.address,
...original.address,
street: original.address.street || defaults.address.street,
city: original.address.city || defaults.address.city,
state: original.address.state || defaults.address.state,
zip: original.address.zip || defaults.address.zip,
},
emails: original.emails.length ? original.emails : defaults.emails,
hobbies: original.hobbies.length ? original.hobbies : defaults.hobbies,
};
و با Object.assign
چیزی شبیه به این:
const results = Object.assign({}, defaults, original, {
name: original.name || defaults.name,
score: original.score ?? defaults.score, // "??" beacause 0 is valid
address: Object.assign({}, defaults.address, original.address, {
street: original.address.street || defaults.address.street,
city: original.address.city || defaults.address.city,
state: original.address.state || defaults.address.state,
zip: original.address.zip || defaults.address.zip,
}),
emails: original.emails.length ? original.emails : defaults.emails,
hobbies: original.hobbies.length ? original.hobbies : defaults.hobbies,
});
نگهداری از آن می تواند بسیار خسته کننده باشد، به خصوص در مورد اشیاء بزرگ و به شدت تو در تو.
با defaultComposer
ما فقط می توانیم از این استفاده کنیم:
import defaultComposer from 'default-composer'; // 300B
// ...
const results = defaultComposer(defaults, original);
نگهداری آسان تر است، درست است؟ 😉
چه اتفاقی می افتد اگر در پروژه ما یک ویژگی خاص وجود داشته باشد که متفاوت از سایرین عمل کند و ما منطق جایگزین دیگری بخواهیم؟ خوب، هر چند defaultComposer
به طور پیش فرض دارای پیکربندی برای تشخیص مقادیر قابل حذف است، می توانید آن را به دلخواه پیکربندی کنید.
import { defaultComposer, setConfig } from 'default-composer';
setConfig({
// This function is executed for each value of each key that exists in
// both the original object and the defaults object.
isDefaultableValue: (
// - key: key of original or default object
// - value: value in the original object
// - defaultableValue: pre-calculed boolean, you can use or not,
// depending if all the rules of the default-composer library are correct
// for your project or you need a totally different ones.
{ key, value, defaultableValue }
) => {
if (key === 'rare-key') {
return defaultableValue || value === 'EMPTY'
}
return defaultableValue;
},
});
نتیجه گیری
من کتابخانه “default-composer” را به عنوان راه حلی برای تنظیم معرفی کرده ام مقادیر پیش فرض برای اشیاء تو در تو در جاوا اسکریپت
این کتابخانه سبک وزن است و کد مختصرتر و خواناتری را نسبت به اپراتور spread و ارائه می دهد Object.assign
مواد و روش ها. همچنین کنترل دقیق تری را بر روی اینکه کدام ویژگی ها باید روی مقادیر پیش فرض تنظیم شوند ارائه می دهد.
در این مقاله مثال هایی از نحوه استفاده از کتابخانه و نحوه ساده سازی کد برای نگهداری اشیاء تودرتو ارائه می کنم.
در نهایت نحوه کتابخانه را توضیح می دهم را می توان پیکربندی کرد انجام دادن موارد خاص جایی که یک منطق جایگزین متفاوت مورد نیاز است. به طور کلی، “default-composer” یک کتابخانه مفید برای ساده کردن کار تنظیم مقادیر پیش فرض برای اشیاء تو در تو در جاوا اسکریپت است.