لماذا أسلوب الكود ليس عن "كيف يبدو جميلاً"، بل عن "كيف لا تصاب بالجنون"؟
\n\nتخيل: تفتح كود زميلك، وتجد خليطًا من var و let، ومسافات بادئة غير منتظمة (مرتين مسافتين، ومرة 4 مسافات، ومرة علامة تبويب)، وفواصل منقوطة موجودة تارة ومفقودة تارة أخرى. مألوف؟ إذا كان الأمر كذلك، فأنت تعلم كيف يحول هذا الكود العمل بسرعة إلى جحيم. بمفردك، قد تتمكن من الفهم، ولكن عندما يكون في المشروع 5-10 مطورين على JavaScript، فإن غياب أسلوب كود موحد يقتل الإنتاجية.
أسلوب الكود والاتفاقيات ليست "رغبات" من أداة الفحص. إنها اللغة التي يتواصل بها فريقك. عندما يكتب الجميع بطريقته الخاصة، يصبح الكود "برج بابل". وعندما تتفق على القواعد، تتوقف عن إضاعة ساعات في مراجعة الكود حول المسافات وتبدأ في مناقشة البنية.
\n\nفي هذه المقالة، سأوضح كيفية تطبيق معايير الكود لـ JavaScript في الفريق، وسأقدم أمثلة حقيقية، وسأخبرك عن الأدوات التي تنقذ المواعيد النهائية حقًا. هيا بنا!
\n\nلماذا الاتفاقيات في JavaScript هي الأساس؟
\n\nJavaScript لغة مرنة بشكل مفرط. يمكنك كتابة نفس الدالة بعشر طرق. وهذا رائع طالما كنت تعمل بمفردك. ولكن في الفريق، تتحول المرونة إلى فوضى. إليك ثلاثة أسباب تجعل اتفاقيات js أمرًا لا غنى عنه:
\n\n- \n
- سرعة الانضمام إلى المشروع. مطور جديد يفتح الكود ويفهم المنطق فورًا، لأن كل شيء "كما هو معتاد لدينا". لا حاجة للتخمين ماذا يعني
_thisأو لماذا سمي المتغيرx1. \n - أخطاء أقل. أسلوب الكود الموحد لـ JavaScript يقلل من احتمالية الأخطاء السخيفة: فاصلة منقوطة منسية في مكان، فاصلة زائدة في مكان آخر - أداة الفحص ستلتقطها. \n
- مراجعة الكود تتوقف عن كونها حربًا. بدلاً من "هنا تحتاج علامة تبويب!" تناقش "لنستخرج هذا المنطق إلى خطاف منفصل؟". \n
بالمناسبة، أظهرت دراسة من Google: الفرق التي لديها أسلوب كود موحد تقضي وقتًا أقل بنسبة 30% في المراجعة. رقم مثير للإعجاب، أليس كذلك؟
\n\nأفضل 5 اتفاقيات JavaScript ستنقذ فريقك
\n\nلن أثقل عليك بمئات القواعد. سأذكر خمس قواعد أساسية تغطي 90% من المشاكل. الباقي، قم بتخصيصه حسب احتياجاتك.
\n\n1. التسمية: تحدث بوضوح
\nالاسم السيء للمتغير هو أصل الشر. في JavaScript، اتفاقيات التسمية شبه مستقرة:
\n- \n
- camelCase للمتغيرات والدوال:
userName،getUserData. \n - PascalCase للكلاس ومكونات React:
UserProfile،ApiService. \n - UPPER_SNAKE_CASE للثوابت المعروفة قبل التشغيل:
MAX_RETRY_COUNT. \n
مثال سيء وجيد:
\n// سيء: غير واضح تمامًا\nlet d = new Date();\nlet fn = () => { ... };\n\n// جيد: يُقرأ ككتاب\nlet currentDate = new Date();\nlet fetchUserData = () => { ... };\n\n2. الفواصل المنقوطة: هل نضعها أم لا؟
\nخلاف أقدم من JavaScript نفسه. ولكن في الفريق، من الأفضل اختيار قاعدة واحدة وتثبيت ESLint. أنا أوصي بوضعها. أحيانًا يخذلك الإدراج التلقائي (ASI)، وينكسر الكود في أماكن غير متوقعة.
\n// بدون فاصلة منقوطة - خطأ محتمل\nlet a = 1\n[1, 2, 3].forEach(console.log) // خطأ! المفسر يعتقد أن هذا استمرار للسطر\n\n// مع الفاصلة - كل شيء بخير\nlet a = 1;\n[1, 2, 3].forEach(console.log);\n\n3. الدوال السهمية مقابل function
\nهنا تنصح اتفاقيات JavaScript باستخدام الدوال السهمية للاستدعاءات والدوال القصيرة، و function للإعلانات على المستوى الأعلى (بسبب الرفع).
// جيد: سهم للاستدعاء\nconst numbers = [1, 2, 3];\nconst doubled = numbers.map(n => n * 2);\n\n// جيد: function للإعلان\nfunction calculateTotal(price, tax) {\n return price + pr