أنماط الحواجز والتحقق
تحقق من المدخلات مبكرًا باستخدام عبارات الحراسة، وارمِ الاستثناءات المناسبة، واستخدم فحوصات بأسلوب TryParse لبيانات المستخدم.
أنماط الحواجز والتحقق درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
لماذا نستخدم عبارات الحماية
الهدف: الحفاظ على أمان الدوال وسهولة قراءتها.
- استخدم عبارات الحماية في البداية
- ارمِ استثناءات محددة (ArgumentNullException, ArgumentOutOfRangeException)
- استخدم TryParse لإدخال المستخدم
- افشل بسرعة، وتجنّب التداخل العميق
عرض توضيحي للحماية المبكرة
أضف فحوصات صغيرة في البداية للتحقق من الوسائط؛ وارمِ استثناءات محددة حتى يعرف المستدعون ما الذي حدث.
using System;
// Demo: validate inputs at the top; keep main logic flat.
public class Program
{
// Compute price with simple rules; guard early.
public static decimal ComputePrice(string sku, int qty, decimal unitPrice)
{
if (sku == null) throw new ArgumentNullException("sku");
if (sku.Length == 0) throw new ArgumentException("sku must not be empty", "sku");
if (qty <= 0) throw new ArgumentOutOfRangeException("qty", "qty must be > 0");
if (unitPrice < 0m) throw new ArgumentOutOfRangeException("unitPrice", "unitPrice must be >= 0");
// Main logic stays simple
decimal subtotal = qty * unitPrice;
if (qty >= 10) subtotal = subtotal * 0.9m; // small bulk discount
return subtotal;
}
public static void Main(string[] args)
{
Console.WriteLine(ComputePrice("ABC", 2, 5m)); // ok
try { Console.WriteLine(ComputePrice("", 2, 5m)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
فئة المساعد Guard
استخرج الفحوصات الشائعة إلى فئة Guard صغيرة للحفاظ على نظافة أجسام الدوال واتساقها.
using System;
// Minimal static helper for common validations (beginner friendly).
public static class Guard
{
public static void NotNull(object value, string name)
{
if (value == null) throw new ArgumentNullException(name);
}
public static void NotNullOrEmpty(string value, string name)
{
if (value == null) throw new ArgumentNullException(name);
if (value.Length == 0) throw new ArgumentException(name + " must not be empty", name);
}
public static void InRange(int value, int minInclusive, int maxInclusive, string name)
{
if (value < minInclusive || value > maxInclusive)
throw new ArgumentOutOfRangeException(name, "Expected " + minInclusive + ".." + maxInclusive);
}
}
public class Program
{
static int ScoreFor(string userId, int level)
{
Guard.NotNullOrEmpty(userId, "userId");
Guard.InRange(level, 1, 10, "level");
// pretend logic
return level * 100;
}
public static void Main(string[] args)
{
Console.WriteLine(ScoreFor("u42", 3));
try { Console.WriteLine(ScoreFor(null, 3)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
التحقق باستخدام TryParse
بالنسبة إلى الإدخال غير الصالح المعتاد، فضّل الدوال بأسلوب TryParse التي تُعيد false بدلًا من إطلاق الاستثناءات.
using System;
// Use TryParse for user-provided text; avoid throwing for normal invalid input.
public class Program
{
public static bool TryGetPort(string text, out int port)
{
port = 0;
int value;
if (!int.TryParse(text, out value)) return false;
if (value < 1 || value > 65535) return false;
port = value;
return true;
}
public static void Main(string[] args)
{
int p;
Console.WriteLine("8080 -> " + (TryGetPort("8080", out p) ? ("ok " + p) : "invalid"));
Console.WriteLine("abc -> " + (TryGetPort("abc", out p) ? ("ok " + p) : "invalid"));
}
}
Throw مقابل return
- Throw لأخطاء المبرمج، مثل الاستخدام الخاطئ لواجهة برمجة التطبيقات أو القيمة الخالية في موضع غير مسموح أو القيمة خارج النطاق
- Return false/Result لأخطاء المستخدم العادية، مثل النص غير الصالح
- استخدم أنواع استثناءات محددة، وضمّن اسم الوسيط
- تحقّق من الخارج إلى الداخل، وابدأ بالفحوصات السريعة
أفضل الممارسات
نصائح:
- تحقّق عند الحدود، مثل وحدات التحكم وواجهات برمجة التطبيقات العامة
- فضّل دوال حماية صغيرة على التداخل العميق
- اجعل رسائل الخطأ قصيرة وواضحة
- سجّل مرة واحدة عند الحد، وليس في كل عبارة حماية
معنى عبارة الحماية
الخلاصة
الخلاصة: تحقّق مبكرًا باستخدام عبارات الحماية، وأطلق استثناءات محددة لأخطاء المبرمج، واستخدم TryParse لإدخال المستخدم اليومي.
الأسئلة الشائعة
هل درس «أنماط الحواجز والتحقق» مجاني؟
نعم — نص درس «أنماط الحواجز والتحقق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «أنماط الحواجز والتحقق»؟
تحقق من المدخلات مبكرًا باستخدام عبارات الحراسة، وارمِ الاستثناءات المناسبة، واستخدم فحوصات بأسلوب TryParse لبيانات المستخدم. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «أنماط الحواجز والتحقق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجريدات التسجيل وDebug/Trace
- أساسيات تحليل الأداء والتتبعات (مفاهيم)
- أنماط الحواجز والتحقق