نوع قابل للتصفير

تُعدّ الأنواع القابلة للتصفير ميزةً في بعض لغات البرمجة، حيث تسمح بتعيين قيمةٍ ما إلى القيمة الخاصة NULL بدلاً من القيم الممكنة المعتادة لنوع البيانات . في اللغات ذات الكتابة الثابتة، يُعتبر النوع القابل للتصفير نوعًا اختياريًا ، بينما في اللغات ذات الكتابة الديناميكية (حيث تكون للقيم أنواع، ولكن المتغيرات لا تكون لها أنواع)، يتم توفير سلوكٍ مكافئ من خلال وجود قيمة NULL واحدة.

يُستخدم NULL بشكل متكرر لتمثيل قيمة مفقودة أو قيمة غير صالحة، كما هو الحال في دالة لم تُرجع قيمة أو حقل مفقود في قاعدة البيانات، كما في NULL في لغة SQL . بعبارة أخرى، NULL غير مُعرَّف.

لا يمكن عمومًا أن تكون الأنواع الأولية ، مثل الأعداد الصحيحة والقيم المنطقية، فارغة (NULL)، ولكن الأنواع المقابلة القابلة للقيمة الفارغة (العدد الصحيح القابل للقيمة الفارغة والقيمة المنطقية القابلة للقيمة الفارغة، على التوالي) يمكنها أيضًا أن تأخذ القيمة الفارغة (NULL). ويمكن تمثيل ذلك في المنطق الثلاثي كـ FALSE وNULL وTRUE، كما هو الحال في المنطق الثلاثي .

مثال

قد يُمثل متغير عدد صحيح أعدادًا صحيحة، لكن الصفر (0) حالة خاصة، لأن الصفر في العديد من لغات البرمجة قد يعني "خطأ". كما أن هذا لا يُشير إلى أن المتغير فارغ، وهي حاجة تظهر في كثير من الحالات. يُمكن تحقيق هذه الحاجة باستخدام نوع قابل للتصفير. في لغات برمجة مثل C# 2.0، يُمكن تعريف عدد صحيح قابل للتصفير، على سبيل المثال، بعلامة استفهام (int? x). [ 1 ] [ 2 ] : 46 في لغات برمجة مثل C# 1.0، يُمكن تعريف الأنواع القابلة للتصفير بواسطة مكتبة خارجية [ 3 ] كأنواع جديدة (مثل NullableInteger وNullableBoolean). [ 4 ]

يُوضّح المتغير المنطقي التأثير بشكلٍ أكبر. إذ يمكن أن تكون قيمه إما "صحيح" أو "خطأ"، بينما قد يحتوي المتغير المنطقي القابل للتصفير على تمثيل لـ "غير محدد". ومع ذلك، فإن تفسير أو معالجة عملية منطقية تتضمن مثل هذا المتغير يعتمد على لغة البرمجة.

فيما يلي مثال على T?(أو بشكل صريح System.Nullable<T>) في لغة C# .

باستخدام النظام ؛public class Example { static void Main ( string [] args ) { // باستخدام الاختصار int? a = 10 ; double? b = null ;// استخدام Nullable <T> صريح Nullable <int> c = 20 ; Nullable <double> d = 5.5 ;// التحقق مما إذا كانت المتغيرات القابلة للتصفير تحتوي على قيم Console.WriteLine ( a.HasValue ) ; // صحيح Console.WriteLine ( b.HasValue ) ; // خطأ Console.WriteLine ( c.HasValue ) ; // صحيح Console.WriteLine ( d.HasValue ) ; // صحيح// الوصول إلى القيم إذا ( a.HasValue ) { Console.WriteLine ( a.Value ) ; // 10 }if ( b . HasValue ) { Console . WriteLine ( b . Value ); // (لن يتم تنفيذ هذا السطر لأن b يساوي null) } } }

بالمقارنة مع المؤشرات الفارغة

على النقيض من ذلك، يمكن ضبط مؤشرات الكائنات على قيمة NULL افتراضيًا في معظم لغات البرمجة الشائعة، ما يعني أن المؤشر أو المرجع لا يشير إلى أي مكان، أي أنه لم يتم تعيين أي كائن (المتغير لا يشير إلى أي كائن). ابتكر كار هوار المراجع القابلة للتصفير عام 1965 كجزء من لغة Algol W. وصف هوار اختراعه لاحقًا بأنه "خطأ كلف مليار دولار". [ 5 ] وذلك لأن مؤشرات الكائنات التي يمكن أن تكون قيمتها NULL تتطلب من المستخدم التحقق من المؤشر قبل استخدامه، وتتطلب كتابة شيفرة برمجية خاصة للتعامل مع حالة كون مؤشر الكائن NULL.

تحتوي لغة جافا على فئات تُقابل القيم العددية، مثل Integer وBoolean وFloat. وبالاقتران مع خاصية التحويل التلقائي بين الكائن والقيمة (التحويل التلقائي المُعتمد على الاستخدام)، يُتيح ذلك فعليًا استخدام متغيرات قابلة للتصفير للقيم العددية.

بالمقارنة مع أنواع الخيارات

تلتزم تطبيقات الأنواع القابلة للتصفير عادةً بنمط الكائن الفارغ .

هناك مفهوم أكثر عمومية ورسمية يمتد من مفهوم النوع القابل للتصفير: إنه يأتي من أنواع الخيارات ، التي تفرض معالجة صريحة للحالة الاستثنائية.

الدعم اللغوي

تدعم لغات البرمجة التالية الأنواع القابلة للتصفير.

تشمل اللغات ذات الكتابة الثابتة والتي تدعم القيم الفارغة بشكل أصلي ما يلي:

تشمل اللغات ذات الكتابة الثابتة التي تدعم القيم الفارغة في المكتبات ما يلي:

تشمل اللغات ذات الكتابة الديناميكية التي تحتوي على قيمة فارغة ما يلي:

انظر أيضاً

مراجع

  1. "الأنواع القابلة للتصفير (C#)" . Msdn.microsoft.com . تم الاطلاع عليه بتاريخ 19-08-2013 .
  2. 1 2 سكيت، جون (23 مارس 2019). لغة سي شارب بتفصيل . مانينغ. ISBN 978-1617294532.
  3. "(luKa) Developer Zone - NullableTypes" . Nullabletypes.sourceforge.net . تم الاطلاع عليه بتاريخ 19-08-2013 .
  4. "NullableTypes" . Nullabletypes.sourceforge.net . تم الاطلاع عليه بتاريخ 19-08-2013 .
  5. توني هوار (2009). "المراجع الفارغة: خطأ المليار دولار" . مؤتمر كيو كون لندن.
  6. "نوع اختياري - لغة برمجة راقصة الباليه" .
  7. بيل واغنر. "أنواع القيم القابلة للتصفير - مرجع C#" . docs.microsoft.com . تم الاسترجاع في 2021-10-05 .
  8. "Sound null safety | Dart" .
  9. "السلامة من القيم الفارغة - لغة برمجة كوتلين" .
  10. كاثلين دولارد. "أنواع القيم القابلة للتصفير - فيجوال بيسك" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 2021-10-05 .
  11. "أنواع · لغة جوليا" .
  12. "PHP: RFC:nullable_types" .
  13. "الثوابت المضمنة - وثائق بايثون 3.9.5" .