كود نظيف في TypeScript: المبادئ والأمثلة للمبتدئين
\nالكود النظيف (Clean Code) ليس مجرد مصطلح عصري، بل هو فلسفة تطوير تساعد في كتابة برامج يفهمها المطورون الآخرون (وحتى أنت بعد ستة أشهر). بالنسبة للمبرمجين المبتدئين في TypeScript، فإن إتقان مبادئ الكود النظيف هو خطوة أساسية نحو النمو المهني. في هذه المقالة، سنشرح القواعد الأساسية، ونقدم أمثلة توضيحية، ونوضح كيف تجعل كود TypeScript الخاص بك أنيقًا وقابلًا للصيانة.
\n\nلماذا الكود النظيف مهم؟
\nتخيل أنك تقرأ كتابًا لا يحتوي على فقرات أو علامات ترقيم، وكل الكلمات مكتوبة متصلة. هذا تقريبًا ما يبدو عليه الكود غير النظيف لمطور آخر. الكود النظيف يوفر الوقت في التصحيح، ويبسط إضافة وظائف جديدة، ويقلل من عدد الأخطاء. TypeScript بفضل كتابته الصارمة للأنواع يساعد بالفعل في كتابة كود أكثر موثوقية، ولكن بدون الالتزام بمبادئ النظافة، حتى الكود المكتوب بأنواع قد يصبح غير قابل للقراءة.
\n\n// سيء: غير قابل للقراءة\nfunction d(a:any,b:any){if(a>b){return a}else{return b}}\n\n// جيد: نظيف وواضح\nfunction findMaxValue(firstNumber: number, secondNumber: number): number {\n if (firstNumber > secondNumber) {\n return firstNumber;\n }\n return secondNumber;\n}\n\nالمبادئ الأساسية للكود النظيف في TypeScript
\n\n1. أسماء ذات معنى للمتغيرات والدوال
\nيجب أن يجيب الاسم على سؤالي "ماذا؟" و"لماذا؟". تجنب الاختصارات المكونة من حرف واحد (باستثناء مؤشرات الحلقات) والأسماء المجردة. استخدم camelCase للمتغيرات و PascalCase للفئات.
// سيء\nconst d = new Date();\nconst arr = [1, 2, 3];\nfunction p(x: number) { return x * 2; }\n\n// جيد\nconst currentDate = new Date();\nconst numbersList: number[] = [1, 2, 3];\nfunction doubleValue(value: number): number {\n return value * 2;\n}\n\n2. يجب أن تقوم الدوال بشيء واحد فقط
\nيجب أن تحل كل دالة مهمة واحدة. إذا كانت الدالة تقوم بأكثر من إجراء واحد - قم بتقسيمها إلى عدة دوال صغيرة. هذا يحسن قابلية القراءة والاختبار.
\n\n// سيء: الدالة تفعل كل شيء دفعة واحدة\nfunction processUserData(userData: string): void {\n const parsed = JSON.parse(userData);\n const isValid = parsed.name && parsed.email;\n if (isValid) {\n console.log(`User ${parsed.name} registered`);\n saveToDatabase(parsed);\n }\n}\n\n// جيد: كل دالة مسؤولة عن شيء واحد\nfunction parseUserData(rawData: string): User {\n return JSON.parse(rawData);\n}\n\nfunction validateUserData(user: User): boolean {\n return !!user.name && !!user.email;\n}\n\nfunction registerUser(userData: string): void {\n const user = parseUserData(userData);\n if (validateUserData(user)) {\n console.log(`User ${user.name} registered`);\n saveToDatabase(user);\n }\n}\n\n3. تجنب الأرقام والنصوص السحرية
\nالأرقام السحرية هي قيم حرفية لا يُفهم معناها بدون سياق. قم بإخراجها إلى ثوابت بأسماء واضحة.
\n\n// سيء\nif (user.age > 18) {\n // ...\n}\nconst discount = price * 0.1;\n\n// جيد\nconst ADULT_AGE = 18;\nconst STANDARD_DISCOUNT_RATE = 0.1;\n\nif (user.age > ADULT_AGE) {\n // ...\n}\nconst discount = price * STANDARD_DISCOUNT_RATE;\n\n4. استخدم الأنواع والواجهات بشكل صحيح
\nTypeScript يوفر أدوات قوية لوصف البيانات. لا تفرط في استخدام any، وفضل الأنواع المحددة. أنشئ واجهات للكائنات المعقدة.
// سيء\nfunction createUser(name: any, age: any) {\n return { name, age, createdAt: new Date() };\n}\n\n// جيد\ninterface User {\n name: string;\n age: number;\n createdAt: Date;\n}\n\nfunction createUser(name: string, age: number): User {\n return {\n name,\n age,\n createdAt: new Date()\n };\n}