مراجعة الكود في C#: ما يجب التحقق منه وكيفية تقديم ملاحظات للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مراجعة الكود في C#: ما يجب التحقق منه وكيفية تقديم الملاحظات

\n

مراجعة الكود هي واحدة من أقوى أدوات تحسين جودة الكود. بالنسبة لمطوري C# المبتدئين، غالبًا ما تبدو مرهقة: الخوف من انتقاد كودك، أو عدم الوضوح بشأن ما يجب البحث عنه في كود الآخرين. في الواقع، مراجعة الكود الجيدة هي حوار وليست امتحانًا. في هذه المقالة، سنشرح ما يجب الانتباه إليه عند مراجعة كود C# (خاصة في نظام .NET البيئي) وكيفية صياغة الملاحظات بحيث تكون مفيدة وليست مسيئة.

\n\n

1. ما يجب التحقق منه في كود C#: قائمة مراجعة للمراجع

\n

عندما تفتح طلب سحب (PR) لزميل، تتشتت عيناك. لتجنب الغرق في التفاصيل، استخدم نهجًا منهجيًا. إليك المجالات الرئيسية التي يجب التحقق منها في أي مشروع C#.

\n\n

1.1. البنية وقابلية القراءة

\n

أولاً، قم بتقييم الصورة العامة. أجب على الأسئلة:

\n
    \n
  • هل يحل هذا الكود المهمة المطلوبة؟
  • \n
  • هل يكرر منطقًا موجودًا (مبدأ DRY)؟
  • \n
  • هل أسماء الفئات والطرق والمتغيرات واضحة؟
  • \n
\n

سيء:

\n
public void DoStuff(int a, int b)\n{\n    var x = a + b;\n    // ... 50 سطرًا آخر
\n

جيد:

\n
public int CalculateTotalPrice(int basePrice, int taxAmount)\n{\n    return basePrice + taxAmount;\n}
\n

اسم الطريقة والمعاملات يوضحان الغرض منها على الفور. هذا يقلل من العبء المعرفي على القارئ.

\n\n

1.2. معالجة الأخطاء وأمان القيم الخالية

\n

C# هي لغة ذات نظام أنواع متطور، لكن NullReferenceException مشكلة شائعة. تحقق من:

\n
    \n
  • هل يتم استخدام فحوصات null (?. , ??, ??=)؟
  • \n
  • هل هناك معالجة للاستثناءات (try-catch) عند الضرورة؟
  • \n
  • هل تم ابتلاع الاستثناءات في catch فارغ؟
  • \n
\n

مثال على كود خطير:

\n
var user = GetUserById(id);\nConsole.WriteLine(user.Name); // خطأ إذا كان user == null
\n

البديل الآمن:

\n
var user = GetUserById(id);\nConsole.WriteLine(user?.Name ?? "ضيف");
\n\n

1.3. الأداء و LINQ

\n

LINQ مناسب لكنه قد يكون غير فعال. تحقق من:

\n
    \n
  • هل يتم عمل تمريرات متعددة على المجموعة (مثل .Where().Select().ToList() على IQueryable)؟
  • \n
  • هل يتم استخدام Any() بدلاً من Count() > 0 للتحقق من وجود عناصر؟
  • \n
  • هل هناك تحويلات غير ضرورية (.ToList(), .ToArray()) في منتصف السلسلة؟
  • \n
\n

سيء:

\n
var list = items.Where(x => x.IsActive).ToList();\nvar first = list.FirstOrDefault();
\n

أفضل:

\n
var first = items.FirstOrDefault(x => x.IsActive);
\n\n

1.4. التزامن غير المتزامن و Task

\n

في .NET، التزامن غير المتزامن هو المعيار. انظر إلى:

\n
    \n
  • هل تم نسيان await قبل الاستدعاء غير المتزامن؟
  • \n
  • هل هناك استدعاءات حظر (.Result, .Wait()) في سياق متزامن؟
  • \n
  • هل يتم اتباع الاتفاقية: تنتهي الطرق غير المتزامنة بـ Async؟
  • \n
\n

نمط معاكس:

\n
var data = GetDataAsync().Result; // قد يسبب deadlock
\n

صحيح:

\n
var data = await GetDataAsync();
\n\n

2. كيفية تقديم الملاحظات: بلطف ولكن بشكل بناء

\n

حتى قائمة المراجعة المثالية غير مجدية إذا كانت تعليقاتك تبدو كنقد. إليك بعض القواعد التي ستساعد في جعل مراجعة الكود مفيدة للجميع.

\n\n

2.1. استخدم "رسائل الأنا" والأسئلة

\n

بدلاً من "لقد كتبت كودًا سيئًا" قل "أعتقد أن هذه الطريقة يمكن تبسيطها. ما رأيك؟".

\n

أمثلة على الصياغات:

\n
    \n
  • "أنا لست متأكدًا من

المدونات

توصيات الكتب