0Pricing
C# Academy · درس

عوامل Null-Coalescing

القيم الافتراضية ?? و??=

عوامل Null-Coalescing درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

توفير قيمة احتياطية

غالبًا ما ترغبون في استخدام قيمة إذا كانت موجودة، أو قيمة افتراضية إذا كانت null. وهذا بالضبط ما يفعله عامل دمج null ??.

يعني التعبير a ?? b: استخدموا a إذا لم تكن null، وإلا فاستخدموا b.

string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);

كيفية تقييم ‎??‎

يُقيَّم الطرف الأيسر أولًا. فإذا لم تكن قيمته null، فلا يُقيَّم الطرف الأيمن مطلقًا.

يعني هذا التقييم المشروط أن القيمة الاحتياطية المكلفة لا تُحسب إلا عند الحاجة الفعلية إليها.

string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called here

يعمل مع أنواع القيم القابلة لـ null

يفك ?? أيضًا تغليف أنواع القيم القابلة لـ null. يؤدي دمج int? maybe مع ?? 0 إلى إنتاج int عادي غير قابل لـ null.

وهذه طريقة واضحة للتحويل من int? إلى int باستخدام قيمة افتراضية.

int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);

مثال قابل للتشغيل

يقرأ هذا البرنامج إعدادًا قد تكون قيمته null، ثم يستخدم قيمة افتراضية احتياطية. شغّلوه لرؤية القيمة الاحتياطية أثناء العمل.

using System;

class Program
{
    static void Main()
    {
        string theme = null;
        string active = theme ?? "light";
        Console.WriteLine("Theme: " + active);
    }
}

تسلسل عوامل ‎??‎

يمكنكم تسلسل عدة قيم احتياطية. يختار التعبير أول قيمة غير null من اليسار إلى اليمين.

يجرّب a ?? b ?? c القيمة a، ثم b، وأخيرًا c باعتبارها الحل الأخير.

string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);

عامل ‎??=‎

يسند الإسناد بدمج null ??= الطرف الأيمن فقط إذا كان الطرف الأيسر حاليًا null.

يُعد x ??= y صيغة مختصرة لـ if (x == null) x = y;، ويترك x دون تغيير عندما تكون له قيمة بالفعل.

string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);

التهيئة الكسولة باستخدام ‎??=‎

من الاستخدامات الشائعة لـ ??= التهيئة الكسولة: إنشاء كائن عند الحاجة إليه للمرة الأولى فقط.

في الاستدعاءات اللاحقة يكون الحقل قد عُيّنت له قيمة بالفعل، لذلك لا يفعل ??= شيئًا.

System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);

الجمع بين ‎?.‎ و‎??‎

يُستخدم الجمع بين ?. و?? كثيرًا جدًا. إذ يتجنب ?. الاستثناء، ويوفر ?? قيمة عندما تكون السلسلة null.

يقرأ user?.Name ?? "Unknown" الاسم بأمان، ويستخدم "Unknown" كقيمة افتراضية.

string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);

استخدام ‎??‎ في برنامج كامل

يعمل كل من ?. و?? هنا معًا لطباعة طول آمن. شغّلوه باستخدام سلسلة نصية null لرؤية القيمة الاحتياطية.

using System;

class Program
{
    static void Main()
    {
        string username = null;
        string display = username ?? "anonymous";
        Console.WriteLine(display);
        Console.WriteLine(username?.Length ?? 0);
    }
}

استخدام ‎??‎ لطرح استثناء عند null

يمكن أن يكون الطرف الأيمن من ?? أي تعبير، بما في ذلك throw. وهذا يجعل ?? طريقة مختصرة للفشل فورًا عند مواجهة قيمة null غير متوقعة.

يعيد name ?? throw new ArgumentNullException(nameof(name)) الاسم، أو يطرح استثناءً إذا كانت قيمته null.

string Validate(string name) =>
    name ?? throw new System.ArgumentNullException(nameof(name));

السلوك المترابط من اليمين

يتصف ?? بالترابط من اليمين، لذلك تُجمّع a ?? b ?? c بالشكل a ?? (b ?? c).

يعني هذا عمليًا أن «أول قيمة غير null هي الفائزة»، لكن من المفيد معرفة ذلك عند تحليل التعبيرات المعقدة.

int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);

اختبار سريع

اختبروا مدى فهمكم لعوامل دمج null.

مراجعة

يعيد ?? طرفه الأيسر إذا لم يكن null، وإلا فيعيد الطرف الأيمن، ويمكن تسلسله. أما ??= فيُسند قيمة فقط عندما يكون الهدف null، ولذلك فهو مناسب للتهيئة الكسولة.

ادمجوا هذه العوامل مع ?. لمعالجة null بأمان واختصار، ويمكنكم حتى استخدام ?? throw للفشل فورًا.

الأسئلة الشائعة

هل درس «عوامل Null-Coalescing» مجاني؟

نعم — نص درس «عوامل Null-Coalescing» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «عوامل Null-Coalescing»؟

القيم الافتراضية ?? و??= تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «عوامل Null-Coalescing»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أنواع القيم القابلة للقيمة الفارغة
  2. العامل Null-Conditional
  3. عوامل Null-Coalescing
  4. الحماية من القيم الفارغة
← العودة إلى C# Academy