استفاده از بندهای محافظ به جای Try-Catch در Async/Await: یک تکنیک کدنویسی تمیز برای کدهای قابل خواندن و نگهداری 🦄🚀

Summarize this content to 400 words in Persian Lang
بند محافظ یک تکنیک برنامه نویسی است که برای بهبود خوانایی و قابلیت نگهداری کد با مدیریت موارد لبه، خطاها یا خروج های اولیه در ابتدای یک تابع استفاده می شود. هنگام استفاده از بندهای محافظ، شما بلافاصله در برابر شرایط خاص “محافظت” می کنید و به عملکرد اجازه می دهید در صورت برآورده شدن آن شرایط، زودتر از آن خارج شود. این امر مسیر منطقی اصلی را تمیز نگه میدارد و نیاز به کدهای تودرتو عمیق و ساختارهای پیچیده if-else را کاهش میدهد.
مزایای کلیدی بندهای نگهبانی
خوانایی بهبود یافته: بندهای محافظ، دیدن شرایطی که ممکن است از اجرای منطق اصلی جلوگیری کند را آسان تر می کند. کد اصلی “مسیر شاد” بدون تودرتو باقی می ماند و به راحتی قابل پیگیری است.
کاهش تودرتو: با کنترل خروجیهای اولیه از جلو، از تودرتوی غیرضروری جلوگیری میکنید، که میتواند خواندن و نگهداری کد را سختتر کند.
جداسازی واضح نگرانی ها: بندهای محافظ بر رسیدگی به موارد لبه و خروج زودهنگام تمرکز دارند، در حالی که بقیه عملکرد بر روی منطق اصلی متمرکز است.
*نمونه ای از بندهای محافظ در جاوا اسکریپت*بدون بندهای محافظ (بلوک های تودرتوی if-else)
function processOrder(order) {
if (order) {
if (order.items && order.items.length > 0) {
if (order.status === ‘pending’) {
// Main logic for processing the order
console.log(‘Processing order…’);
} else {
console.log(‘Order is not in a pending state.’);
}
} else {
console.log(‘Order has no items.’);
}
} else {
console.log(‘Order does not exist.’);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با بند نگهبانی (جریان تمیزتر)در این نسخه، برای خروج زودهنگام از گارد بند استفاده می کنیم که مسیر منطقی اصلی را ساده تر می کند:
function processOrder(order) {
if (!order) {
console.log(‘Order does not exist.’);
return; // Exit early
}
if (!order.items || order.items.length === 0) {
console.log(‘Order has no items.’);
return; // Exit early
}
if (order.status !== ‘pending’) {
console.log(‘Order is not in a pending state.’);
return; // Exit early
}
// Main logic for processing the order
console.log(‘Processing order…’);
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نحوه عملکرد بندهای نگهبانی در عملدر مثال “با بندهای نگهبانی”:بررسی فوری: عملکرد فوراً موارد را بررسی می کند
که از اجرای منطق اصلی جلوگیری می کند.
خروجهای زودهنگام: در صورت برآورده شدن یک شرط، هر چک زودتر خارج میشود، بنابراین بقیه عملکرد فقط در صورتی اجرا میشود که همه شرایط واضح باشند.
مسیر شاد قابل خواندن: کد اولیه برای پردازش سفارش در بلوکهای اگر پیچیده نمیشود، بنابراین واضح و خواندن آن آسان است.
استفاده از بند محافظ در کد ناهمزمانهمانطور که قبلاً نشان داده شد، بندهای محافظ نیز در توابع async/wait برای رسیدگی به خطاها بدون استفاده از بلوکهای try-catch مؤثر هستند. به عنوان مثال:
import { to } from ‘./to’;
const fetchData = async () => {
const [error, data] = await to(apiCall());
if (error) {
console.error(‘Failed to fetch data:’, error);
return; // Exit early if there’s an error
}
console.log(‘Data fetched:’, data);
// Continue with processing the data
};
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
بند محافظ یک تکنیک برنامه نویسی است که برای بهبود خوانایی و قابلیت نگهداری کد با مدیریت موارد لبه، خطاها یا خروج های اولیه در ابتدای یک تابع استفاده می شود. هنگام استفاده از بندهای محافظ، شما بلافاصله در برابر شرایط خاص “محافظت” می کنید و به عملکرد اجازه می دهید در صورت برآورده شدن آن شرایط، زودتر از آن خارج شود. این امر مسیر منطقی اصلی را تمیز نگه میدارد و نیاز به کدهای تودرتو عمیق و ساختارهای پیچیده if-else را کاهش میدهد.
مزایای کلیدی بندهای نگهبانی
- خوانایی بهبود یافته: بندهای محافظ، دیدن شرایطی که ممکن است از اجرای منطق اصلی جلوگیری کند را آسان تر می کند. کد اصلی “مسیر شاد” بدون تودرتو باقی می ماند و به راحتی قابل پیگیری است.
- کاهش تودرتو: با کنترل خروجیهای اولیه از جلو، از تودرتوی غیرضروری جلوگیری میکنید، که میتواند خواندن و نگهداری کد را سختتر کند.
- جداسازی واضح نگرانی ها: بندهای محافظ بر رسیدگی به موارد لبه و خروج زودهنگام تمرکز دارند، در حالی که بقیه عملکرد بر روی منطق اصلی متمرکز است.
*نمونه ای از بندهای محافظ در جاوا اسکریپت
*
بدون بندهای محافظ (بلوک های تودرتوی if-else)
function processOrder(order) {
if (order) {
if (order.items && order.items.length > 0) {
if (order.status === 'pending') {
// Main logic for processing the order
console.log('Processing order...');
} else {
console.log('Order is not in a pending state.');
}
} else {
console.log('Order has no items.');
}
} else {
console.log('Order does not exist.');
}
}
با بند نگهبانی (جریان تمیزتر)
در این نسخه، برای خروج زودهنگام از گارد بند استفاده می کنیم که مسیر منطقی اصلی را ساده تر می کند:
function processOrder(order) {
if (!order) {
console.log('Order does not exist.');
return; // Exit early
}
if (!order.items || order.items.length === 0) {
console.log('Order has no items.');
return; // Exit early
}
if (order.status !== 'pending') {
console.log('Order is not in a pending state.');
return; // Exit early
}
// Main logic for processing the order
console.log('Processing order...');
}
نحوه عملکرد بندهای نگهبانی در عمل
در مثال “با بندهای نگهبانی”:
بررسی فوری: عملکرد فوراً موارد را بررسی می کند
- که از اجرای منطق اصلی جلوگیری می کند.
- خروجهای زودهنگام: در صورت برآورده شدن یک شرط، هر چک زودتر خارج میشود، بنابراین بقیه عملکرد فقط در صورتی اجرا میشود که همه شرایط واضح باشند.
- مسیر شاد قابل خواندن: کد اولیه برای پردازش سفارش در بلوکهای اگر پیچیده نمیشود، بنابراین واضح و خواندن آن آسان است.
استفاده از بند محافظ در کد ناهمزمان
همانطور که قبلاً نشان داده شد، بندهای محافظ نیز در توابع async/wait برای رسیدگی به خطاها بدون استفاده از بلوکهای try-catch مؤثر هستند. به عنوان مثال:
import { to } from './to';
const fetchData = async () => {
const [error, data] = await to(apiCall());
if (error) {
console.error('Failed to fetch data:', error);
return; // Exit early if there's an error
}
console.log('Data fetched:', data);
// Continue with processing the data
};