أنواع البيانات Data Types

-

تستخدم أنواع البيانات Data Type لتحديد أنواع وأحجام المتغيرات variable  والتي يمكن للمتغير تخزينها مثل الأعداد الصحيحة  integer و floatingو character  وما إلى ذلك.

من المهم استخدام نوع البيانات data type الصحيح للمتغير variable؛ لتجنب الأخطاء، ولتوفير الوقت والذاكرة، وبالتالي استخدام النوع الصحيح يجعل الأكواد البرمجية الخاصة بك أكثر قابلية للصيانة والقراءة.

تحتوي لفة C# على 3 أنواع من أنواع البيانات (الجدول التالي يوضح هذه الأنواع)


Data Types
Types
short, int, char, float, double etc

Value Data Type

نوع البيانات بالقيمة

String, Class, Object and Interface

Reference Data Type

نوع البيانات بالمرجع


Pointer Data Type

نوع البيانات بالمؤشر

تمام نحكي هن هذه الأنواع بالتفصيل. 

Value Data Type

أنواع البيانات بالقيمة هي الأعداد الصحيحة integer والفاصلة العائمة floating. تدعم لغة C# كلا من الأحرف الموقعة وغير الموقعة signed and unsigned literals.

وهذا النوع يحتوي على نوعين هما

  •  أنواع البيانات المحددة مسبقًا Predefined Data Types - مثل عدد صحيح Integer، ومنطقي Boolean، وعائم Float ... الخ.
  •  أنواع البيانات التي يحددها المستخدم User defined Data Types- مثل البنية Structure والتعدادات Enumerations وما إلى ذلك.
قد يتغير حجم ذاكرة memory size أنواع البيانات data types حسب نظام التشغيل 32 أو 64 بت.
الجدول التالي يوضح انواع البيانات المحددة مسبقا



أكثر هذه الأنواع استخداما وشيوعا 


تمام نشوف امثلة على هذه الأنواع 

الاعداد Numbers

ينقسم هذا النوع الى مجموعتين:

  • الأعداد الصحيحة Integer types
يستخدم لتخزين الأعداد الصحيحة numbers، سواء كانت موجبة أو سالبة (مثل 123 أو -456)، بدون أرقام عشرية. وهذه الأنواع: 
int ,long. 
واكيد طريقة الاستخدام تعتمد على القيمة الرقمية.

  • الأنواع العائمة Floating
يستخدم لتخزين الأرقام الكسرية، بحيث تحتوي على رقم عشري واحد أو أكثر decimals. وهذه الأنواع هي:
float , double

الأنواع الأكثر استخدامًا للأرقام هي int (للأرقام الصحيحة) وdouble (للأرقام الفاصلة العائمة). 

أمثلة 

الأعداد الصحيحة من نوع  Integer Types
حكينا في هذا النوع int يمكن تخزين أرقام صحيحة من -2147483648 إلى 2147483647. بشكل عام، 
اضف الكود التالي الى مشروعنا 

namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            int intNumberStart = -2147483647;
            int intNumberEnd = 2147483647;
            Console.WriteLine(intNumberStart);
            Console.WriteLine(intNumberEnd);
        }
    }
}
شوف النتيجة هي طباعة اصغر واكبر قيمه مسموحه في هذا النوع  
تمام جرب الان غير القيمة الأصغر او الأكبر 

namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            int intNumberStart = -21474836475;
            int intNumberEnd = 21474836470;
            Console.WriteLine(intNumberStart);
            Console.WriteLine(intNumberEnd);
        }
    }
}
شغل البرنامج وشوف النتيجة. 
اكيد بتكون النتيجة خطأ 




الخطأ هو :

Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists (are you missing a cast?)

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

الأعداد الصحيحة من نوع  Long Types

في هذا النوع يمكن تخزين أرقام صحيحة من -9223372036854775808 إلى 9223372036854775807. يُستخدم هذا النوع عندما تكون القيم كبيره بحيث لا يمكن تخزينها في النوع int.

 لاحظ أنه يجب عليك إنهاء القيمة بـ "L":

using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            long LongNumberStart = -9223372036854775808L;
            long LongNumberEnd = 9223372036854775807L;
            Console.WriteLine(LongNumberStart);
            Console.WriteLine(LongNumberEnd);
        }
    }
}

النوع  Floating Point
يستخدم هذا النوع عند الحاجه إلى رقم به علامة عشرية decimal، مثل 9.99 أو 3.14515.

يمكن لأنواع البيانات float وdouble  تخزين الأرقام الكسرية fractional. 

يجب عليك إنهاء القيمة بـ "F" ل floats  و"D" ل doubles

مثال doubles: 

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            double doubleNumber =42.5D;
            
            Console.WriteLine(doubleNumber);
            
        }
    }
}
النتيجة هي طباعة الرقم 42.5 على الشاشة

مثال floats  

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            float floatNumber =42.5F;
            
            Console.WriteLine(floatNumber);
            
        }
    }
}

الفرق بين floats   و doubles

الفريق بين النوعين هو في الحجم حيث ان تشير الدقة لكل نوع الى عدد الأرقام التي يمكن أن تحتويها القيمة بعد العلامة العشرية decimal point.
تبلغ دقة النوع float ستة أو سبعة أرقام عشرية فقط decimal digits ، بينما تبلغ دقة المتغيرات من نوع double حوالي 15 رقمًا. ولذلك فمن الأكثر أمانًا استخدام النوع double في معظم العمليات الحسابية.

القيم المنطقية Booleans

يستخدم هذا النوع عند الحاجة الى تعريف متغير يحتوي قيمتين فقط (نعم او لا true or false)
 يتم الإعلان عن هذا النوع باستخدام الكلمة الأساسية bool
يستخدم هذا النوع في الغالب للاختبار الشرطي conditional testing
مثال 
تعريف متغير لتحديد نوع الطالب هل هو دائم او مؤقت. 

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
             
            Boolean IsTemp =true;
            
            Console.WriteLine(IsTemp);
            
        }
    }
}
النتيجة طباعة قيم المتغير IsTemp على الشاشة

استخدام الحرف e مع النوع float

يمكن زيادة حجم النوع float عن طريق إضافة الحرف "e" للإشارة إلى قوة الرقم 10 (power of 10):
مثال:

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
            float floatnumber = 350e1F;
            double doublenumber = 120E1D;
            Console.WriteLine(floatnumber);
            Console.WriteLine(doublenumber);
        }
    }
}
النتيجة هي طباعة الأرقام 3500 و 1200 على الشاشة 
لاحظ السطر الأول:
float floatnumber = 350e1F;
هذا السطر يعني قيمة 350 * 10 
الرقم 10 ناتج من المعامل e1. يعني العدد بعد الحرف e هو المسؤول عن تحديد الرقم 
جرب تغير العدد بعد الحرق e وشوف النتيجة.

نفس الفكرة تماما بالنسبة ل double 

النوع Characters
يستخدم هذا النوع لتخزين حرف واحد. يجب أن يكون الحرف محاطًا بعلامات اقتباس مفردة single quotes، 
مثل 

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
            char FirstCharName = 'H';
            
            Console.WriteLine(FirstCharName);
           
        }
    }
}
نتيجة التنفيذ هي طباعة الحرف H على الشاشة 


النوع Strings
يستخدم هذا النوع لتخزين سلسلة من الأحرف (النص text). يجب أن تكون قيم السلسلة محاطة بعلامات اقتباس مزدوجة:
مثال:

using System;
using static System.Net.Mime.MediaTypeNames;
namespace MyFisrtProgram
{
    public class PrintHelloWorld
    {
        static void Main(string[] args)
        {
            string FullName = "Hatem al-talafha";
            
            Console.WriteLine(FullName);
           
        }
    }
}
النتيجة هي طباعة الاسم Hatem al-talafha على الشاشة.

نوع البيانات المرجعية Reference Data Type
الفكرة من هذا النوع انها لا تحتوي على البيانات الفعلية المخزنة في المتغير، تحتوي فقط على مرجع للمتغيرات reference.
وبالتالي إذا تم تغيير البيانات بواسطة أحد المتغيرات variables، فإن المتغير الآخر يعكس تلقائيًا هذا التغيير في القيمة.

أنواع هذا النوع 

1) الأنواع المحددة مسبقًا - Predefined  مثل الكائنات Objects والسلسلة String.

2) الأنواع التي يحددها المستخدم User defined - مثل الفئات Classes والواجهات Interfaces.

بنحكي عن هذا النوع بالتفصيل في الدروس القادمة. المهم الان تعرف معلومة عامة .

نوع بيانات المؤشر Pointer Data Type
المؤشر pointer هو متغير variable يقوم بتخزين عنوان الذاكرة memory address لمتغير آخر كقيمة له value.
يشير متغير المؤشر pointer variable إلى نوع بيانات (مثل int) من نفس النوع، ويتم إنشاؤه باستخدام عامل التشغيل * operator.
ويعرف أيضًا باسم محدد المواقع locator أو المؤشر indicator الذي يشير إلى عنوان قيمة ما




الرموز المستخدمة 


بنحكي عن هذا النوع بالتفصيل مستقبلا.