مقدمة: لماذا الكود النظيف ليس مسألة جمالية بل مسألة مالية
تخيل أنك تبدأ في وظيفة جديدة، وتفتح مشروعًا بلغة C#، وترى دالة بطول 500 سطر، ومتغيرات مثل a و b و temp، والتعليقات مكتوبة بمزيج من الروسية والإنجليزية. هل هذا مألوف؟ على الأرجح نعم. هذا الكود يعمل، لكن صيانته تتحول إلى جحيم. الكود النظيف بلغة C# ليس نزوة من شخص مثالي، بل هو أداة توفر ساعات وأعصابًا وأموال الفريق.
في هذه المقالة، لن نلقي المواعظ. بدلاً من ذلك، سنستعرض تقنيات محددة ستساعدك على الكتابة بلغة C# بحيث يكون الكود مفهومًا للمبتدئين ومرضيًا للمطورين ذوي الخبرة. هيا بنا!
1. الأسماء لها أهمية: كيفية تسمية المتغيرات والدوال والكلاسات
أسهل طريقة لجعل الكود أنظف هي إعطاء أسماء ذات معنى. لغة C# صارمة تجاه حالة الأحرف، لكن هذا ليس عذرًا لاستخدام int x أو string d.
المتغيرات: قل ما تخزنه
سيء:
int d; // ما هذا؟ تاريخ؟ مسافة؟ مال؟string n; // اسم؟ رقم؟ كمبيوتر محمول؟جيد:
int daysUntilDeadline;string userName;القاعدة بسيطة: إذا لم تستطع بعد شهر فهم ما يخزنه المتغير بدون تعليق، فالاسم سيء. تجنب الاختصارات مثل usr أو cnt - فهي توفر ثانية عند الكتابة، لكنها تستهلك دقائق عند القراءة.
الدوال: فعل + اسم
الدالة هي إجراء. سمها بحيث يكون واضحًا ما تفعله:
CalculateTotalPrice()- تحسب السعر الإجمالي؛SendEmailNotification()- ترسل إشعارًا؛ValidateUserInput()- تتحقق من إدخال المستخدم.
مثال سيء: ProcessData() - مجردة جدًا. ماذا يعني "معالجة"؟ حذف؟ تحويل؟ حفظ؟
الكلاسات: أسماء بصيغة المفرد أو الجمع
الكلاس هو كيان. User، Order، PaymentProcessor. تجنب اللواحق مثل Manager أو Helper إذا لم تكن مبررة بالهندسة المعمارية. غالبًا ما تصبح هذه الكلاسات "مزبلة" لكل شيء.
2. يجب أن تكون الدوال صغيرة وتقوم بشيء واحد
القاعدة الذهبية للكود النظيف: يجب أن تحل الدالة مشكلة واحدة وتحلها بشكل جيد. إذا كانت الدالة أطول من 20-30 سطرًا، فغالبًا ما تحتاج إلى تقسيم.
مثال: إعادة هيكلة وحش
تخيل دالة تسجل مستخدمًا:
public void RegisterUser(string name, string email){ // التحقق if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException(); if (!email.Contains("@")) throw new ArgumentException(); // الحفظ في قاعدة البيانات using var db = new AppDbContext(); var user = new User { Name = name, Email = email }; db.Users.Add(user); db.SaveChanges(); // إرسال البريد الإلكتروني var smtp = new SmtpClient(); smtp.Send("admin@site.com", email, "Welcome", "Hello!");}ما المشكلة هنا؟ ثلاث مسؤوليات: التحقق، العمل مع قاعدة البيانات، إرسال البريد الإلكتروني. إذا تغير منطق الإرسال، سيتعين تعديل دالة التسجيل. لنقسمها:
public void RegisterUser(string name, string email){ ValidateUser(name, email); var user = CreateUser(name, email); SaveUser(user); SendWelcomeEmail(email);}
private void ValidateUser(string name, string email){ if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException("Name is required", nameof(name)); if (!email.Contains("@")) throw new ArgumentException("Invalid email", nameof(email));}
private User CreateUser(string name, string email){ return new User { Name = name, Email = email };}
private void SaveUser(User user){ using var db = new AppDbContext(); db.Users.Add(user); db.SaveCh