قرائة جيدة لكم dev.to هذه المقالة مترجمة مصدرها هو
بداية المقال
فن كتابة الكود النظيف: دليل عملي لكتابة جافا سكريبت قابلة للصيانة.
المقدمة:
إن كتابة الكود النظيف أكثر من مجرد خيار جمالي، بل إنها ممارسة أساسية تقلل من الأخطاء، وتعزز التعاون، وتضمن إمكانية صيانة مشاريع البرمجيات على المدى الطويل. يستكشف هذا الدليل المبادئ والممارسات والأساليب العملية لكتابة كود جافا سكريبت نظيف.
المبادئ الأساسية
- القابلية للقراءة أولاً
يتم قراءة الكود أكثر بكثير من كتابته. يروي الكود الجيد قصة يمكن للمطورين الآخرين (بما في ذلك نفسك في المستقبل) فهمها بسهولة.
السيء:
const x = y + z / 3.14;
الجيد:
const radius = circle / Math.PI;
- أهمية قابلية الصيانة
الكود القابل للصيانة معياري، ويتبع مبادئ SOLID، ويقلل من التبعيات.
السيء:
function calculateArea(radius) {
// …lots of nested logic…
// …complex accounts…
// …multiple responsibilities…
return result;
}
جيد:
function calculateArea(radius) {
return Math.PI * radius * radius;
}
- قابلية الاختبار
إن الكود النظيف قابل للاختبار بطبيعته. قم بتقسيم العمليات المعقدة إلى وحدات أصغر يمكن التحقق منها.
سيء:
function getRandomNumber() {
return Math.random();
}
جيد:
function getRandomNumber(randomGenerator = Math.random) {
return randomGenerator();
}
- قابلية التوسع
ينمو الكود النظيف بسلاسة مع مشروعك.
سيئ:
function handleUserData(data) {
if (data.type === ‘admin’) {
// 50 lines of admin logic
} else if (data.type === ‘user’) {
// 50 lines of user logic
} else if (data.type === ‘guest’) {
// 50 lines of guest logic
}
}
جيد:
const userHandlers = {
admin: handleAdminData,
user: handleUserData,
guest: handleGuestData
};
function handleUserData(data) {
return userHandlersdata.type;
}
المزالق الشائعة والحلول:
- معضلة التسمية
يجب أن تكشف الأسماء عن النية والسياق.
سيئ:
function calc(a, b) {
return a * b + TAX;
}
جيد:
دالة calculatePriceWithTax(basePrice, taxRate) {
const TAX_MULTIPLIER = 1;
return basePrice * taxRate + TAX_MULTIPLIER;
}
- تجنب جحيم الاستدعاء
استبدل الاستدعاءات المتداخلة بأنماط غير متزامنة حديثة.
سيء:
getUserData(userId, function(user) {
getOrders(user.id, function(orders) {
processOrders(orders, function(result) {
// المزيد من التعشيش…
});
});
});
جيد:
دالة غير متزامنة processUserOrders(userId) {
try {
const user = await getUserData(userId);
const orders = await getOrders(user.id);
return await processOrders(orders);
} catch (error) {
handleError(error);
}
}
- إدارة التكوين
إنشاء مصدر واحد للحقيقة لقيم التكوين.
سيء:
// متناثر عبر ملفات متعددة
const API_KEY = ‘abc123’;
const API_ENDPOINT = ‘https://api.example.com’;
جيد:
// config.js
export const config = {
api: {
key: process.env.API_KEY,
endpoint: process.env.API_ENDPOINT
}
};
التنازلات العملية:
الأداء مقابل القابلية للقراءة
موازنة القابلية للقراءة مع احتياجات الأداء:
// أكثر قابلية للقراءة، وأقل أداءً قليلاً
const doubledNumbers = numbers.map(n => n * 2);
// أقل قابلية للقراءة، وأكثر أداءً (عندما يكون الأداء بالغ الأهمية)
for (let i = 0; i < numbers.length; i++) numbers[i] *= 2;
الدوال النقية مقابل الآثار الجانبية
في حين أن الدوال النقية مثالية، فإن التطبيقات الحقيقية تحتاج إلى آثار جانبية. قم بعزلها وإدارتها بعناية:
// دالة نقية
function calculateTotal(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}
// الآثار الجانبية الضرورية، معزولة بوضوح
async function saveOrderToDatabase(order) {
await database.orders.save(order);
logOrderCreation(order);
}
أفضل الممارسات:
- استخدام أسماء ذات معنى
يجب أن تشير المتغيرات إلى غرضها
يجب أن تصف الوظائف عملها
يجب أن تمثل الفئات كيانها
- الحفاظ على حجم الوظائف صغيرًا
يجب أن تقوم كل وظيفة بشيء واحد جيدًا
لا تهدف إلى أكثر من 20 سطرًا لكل وظيفة
استخراج المنطق المعقد في وظائف منفصلة
- تجنب الأرقام السحرية
استخدام الثوابت المسماة لجميع القيم الرقمية
تجميع الثوابت ذات الصلة في كائنات التكوين
- التعامل مع الأخطاء بأناقة
استخدام كتل المحاولة/الالتقاط بشكل مناسب
توفير رسائل خطأ ذات معنى
النظر في استراتيجيات استرداد الأخطاء
الخلاصة:
يعتبر الكود النظيف رحلة، وليس وجهة. في حين أن النظافة المثالية قد تكون غير قابلة للتحقيق، فإن السعي إلى الكود النظيف من خلال الممارسات المتسقة والمقايضات العملية يؤدي إلى قواعد بيانات أكثر قابلية للصيانة وموثوقية وتعاونًا. تذكر أن السياق مهم – ما هو نظيف في موقف ما قد لا يكون كذلك في موقف آخر. والمفتاح هو إيجاد التوازن الصحيح لاحتياجاتك المحددة مع الحفاظ على الكود الذي سيشكرك الآخرون (بما في ذلك نفسك في المستقبل) على كتابته.
رابط المقال الاصلي