أساسيات الـ Null Reference
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 31 من 66.
في لغة C#، يمثل مرجع null غياب كائن ما. إن فهم كيفية التعامل مع قيم null أمر ضروري لكتابة كود برمجى قوي.
قم بالتصريح عن متغير من نوع مرجعي (مثل string) بدون تعيين قيمة:
string name = null;المتغير 'name' يحمل الآن مرجع null، مما يعني أنه لا يشير إلى أي كائن في الذاكرة.
محاولة استخدام مرجع فارغ (null) دون التحقق منه قد تؤدي إلى حدوث أخطاء وقت التشغيل:
string name = null;
// سيؤدي هذا إلى حدوث NullReferenceException
int length = name.Length;يمكنك التحقق مما إذا كان المرجع فارغاً (null) قبل استخدامه:
string name = null;
if (name != null)
{
// من الآمن استخدام name هنا
int length = name.Length;
}يمكنك أيضاً تعيين قيمة غير فارغة (non-null) للمتغير:
string name = null;
name = "John";
// الآن من الآمن استخدام name
int length = name.Length; // length ستكون 4التحدي
سهلأنشئ دالة (method) تسمى ProcessName تستقبل بارامتر نصي (string) يسمى name. يجب أن تقوم الدالة بما يلي:
- التحقق مما إذا كان الاسم null
- إذا كان الاسم null، اطبع: "Name is null"
- إذا لم يكن الاسم null، اطبع: "Name length is X" (حيث X هو طول الاسم)
ورقة مرجعية
يمثل المرجع الفارغ (null reference) غياب كائن في لغة C#.
قم بالتصريح عن متغير من نوع مرجعي (reference type) بقيمة null:
string name = null;يؤدي استخدام المراجع الفارغة (null references) دون التحقق منها إلى حدوث أخطاء وقت التشغيل (runtime errors):
string name = null;
// سيؤدي هذا إلى رمي NullReferenceException
int length = name.Length;تحقق من القيمة الفارغة (null) قبل الاستخدام:
string name = null;
if (name != null)
{
// من الآمن استخدام name هنا
int length = name.Length;
}قم بتعيين قيمة غير فارغة لجعلها آمنة للاستخدام:
string name = null;
name = "John";
int length = name.Length; // ستكون قيمة length هي 4جرّب بنفسك
using System;
class Program
{
public static void ProcessName(string name)
{
// اكتب الكود الخاص بك هنا
}
static void Main(string[] args)
{
string input = Console.ReadLine();
// تحويل النص "null" إلى قيمة null فعلية
string name = input.ToLower() == "null" ? null : input;
ProcessName(name);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null