Variables
في برنامجنا نحن بحاجة لطريقة ما لتخزين القيم في الذاكرة ، هذه الأماكن التي يتم تخزين البيانات فيها تدعى المتغيرات (Variable) .
إذاً المتغيرات لا تمثل سوى الاسم الذي أعطيناه لتخزين المتغير في الذاكرة .
والبيانات لها أنواع مختلفة ، فهناك أرقام صحيحة وأخرى عشرية ، وثالثة فاصلة عائمة ، ورابعة عبارة عن بيانات منطقية .
فتنوع المتغيرات من تنوع القيم ، بمعنى أن المتغيرات متنوعة حتى تقبل أنواع مختلفة من القيم .
فمثلاً : يمكننا حفظ الطعام في الثلاجة والماء في البرادة والغاز في الاسطوانة .
كذلك يمككنا أن نحفظ البنزين في خزان الوقود ، وزيت الفرامل في علبة زيت الفرامل ، والماء في الرديتر .
فيجب أن نضع البيانات في نوع المتغير الخاص بها . باستبعاد مالايتوافق واختيار الخيار الأمثل منها .
فلا يمكن تخزين قيمة عشرية في متغير نوعه عدد صحيح .
عندما نستخدم المتغير نقوم بالإشارة إلى المعلومات المخزنة في هذا المكان , لأن البيانات توضع ضمن المتغيرات.
وبما أن البيانات لها أنواع مختلفة وأحجام مختلفة وتتطلب عمليات مختلفة لمعالجتها لهذا كانت المتغيرات ذات أنواع مختلفة.
والتصريح عن المتغيرات (Declaration ) يأخذ الصيغة التالية /
;<type> <name >
نلاحظ ثلاثة أشياء يجب مراعاتها عند التصريح عن المتغير هي نوع البيانات المخزنة في المتغير data type والشيء الثاني هو اسم المتغير variable name أما الشيء الثالث فهو الفاصلة المنقوطة.
مثلا
;string nameحيث أن الـ string هي عبارة عن نوع المتغير الذي يخزن سلاسل الحروف والـ name اسمه ثم الفاصلة المنقوطة
مثال آخر
;int x
;3=x
حيث أن int عبارة عن نوع متغير يحمل رقم صحيح والـ x هو اسم المتغير ثم الفاصلة المنقوطة ثم تم اسناد قيمة للمتغير وهي 3
ويمكن أن نسند قيمة للمتغير في نفس السطر
;int x=3ويمكن أن نصرح عن أكثر من متغير في نفس السطر فبدلا من
;int x
;int y
نصرح عنها في سطر واحد ونفصل بينها بالفاصل
;int x ,y
مثال : كود لجمع قيمتين صحيحة
static void Main(string[] args)
int x=3, y=2, z;
z = x + y;
Console.WriteLine(z);
}
في هذا المثال ببساطة عرفنا ثلاث متغيرات رقمية صحيحة من نوع int يفصل بين كل متغير والآخر فاصلة ثم أنهيناها بفاصلة منقوطة لنقوم بعملية الجمع حيث جمعنا المتغير x مع المتغير y واسندنا الناتج بعلامة الاسناد(=) إلى المتغير z.
ليكون الناتج هو : 5 والذي تم تخزينة في المتغير z
فعندما نريد تخزين القيم الصريحة الرقمية نستخدم المتغير int للأعداد الصحيحة أي التي لاتحوي على فاصلة عشرية أو كسرية وعندما نريد أن نخزن الأعداد الكسرية والعشرية فنستخدم المتغير double للأعداد العشرية أما القيم المنطقية التي لا تحتمل سوى false أو true فيتم تخزينها في المتغير الرقمي bool فنحن أحيانا بحاجة لمعرفة شيء هل يعمل أم لا هل هو صحيح أم خاطيء , أما سلاسل الحروف يتم تخزينها في المتغير string كما ذكرنا .
وهناك قاعدتين لتسمية المتغيرات :
- يجب أن يكون الرمز الأول من اسم المتغير حرف هجائي أو رمز "_" أو رمز @ فقط.
- يمكن أن تكون الرموز الأخرى بعد الرمز الأول حرف هجائي أو رقم أ رمز +_+ فقط
- لا يمكن استخدام المتغير قبل التصريح عنه
- لايمكن استخدام المتغير قبل أن نسند له قيمة
- اسماء المتغيرات متحسسة لحالة الأحرف (case-sensitive) معنى هذا أن المتغير ذو الأسم Name ليس هو المتغير ذو الاسم name
إذا فحتى نتمكن من استخدام المتغيرات يجب علينا التصريح (declare) عنها كما ذكرنا وهذا يعني أن نحدد :
- اسم المتغير
- نوعه
- Pascal case : يكون الحرف الأول من كل كلمة كبير فمثلا المتغير age يتم كتابته هكذا Age والمتغير ذو الكلمات المتعددة يتم كتابته هكذا LastName
- camel case ويكون الحرف الأول صغير مثل age والكلمات المتعددة تكون وفق firstName و timeOfDeath
- هناك أحد النظم القديمة الذي يقوم بوضع رمز "_"بين الكلمات كفاصل time_of_deth و first_name
والمتغيرات الرقمية يتم تقسيمها لعدة أقسام هي :
- الأعداد الصحيحية Integral
- الأعداد ذات العلامة العائمة Floating-Point
- الأعداد ذات الدقة العاليةDecimal
- القيم المنطقية Boolean
- الأعداد الصحيحة int,uint
- الأعداد القصيرة shot,ushort
- الأعداد الطويلة long,ulong
- البايت byte-sbyt
- والمتغيرات الحرفية char
وكذلك نجد short,ushort والتي يتم تخزينها في 2 بايت من الذاكرة ويتم استخدام ushort للأعداد ذات العلامة الموجبة فقط في مدى اثنين بايت وهي تماما مثل int إلا أنها توفر موارد الذاكرة.
ونجد أيضا long,ulong التي توفر مساحة أكبر في الذاكرة بحيث تخزن في 8 بايت و ulong لتخزين الأعداد ذات العلامة الموجبة فقط في مدى ثمانية بايت .
ونجد أيضا البايت byte,sbyte والذي يخزن في واحد بايت وهناك اصدار منه بعلامة وهو sbyte بخلاف byte الذي لايخزن سوى العلامة الموجبة في مدى واحد بايت فقط.
ونجد المتغير char الذي يقوم بتخزين المتغير في 2بايت قبل أن يتم تحويله إلى حرف وفي char عندما نضع الحرف نضعه بين علامتي اقتباس مثلا "a"وهو يخزن حرف واحد فقط.
2- الأعداد ذات العلامة العائمة :
وبما أن الأعداد ليست كلها صحيحة نجد أننا بحاجة لتخزين الأعداد ذات العلامة العشرية والأعداد ذات العلامة المزدوجة فمثلا عند حساب المحيط الخارجي للذائرة نجد أن الناتج ليس بعدد صحيح غالبا وسنجده رقم عشري لهذا نستخدم متغيرات عشرية , فنجد أن المتغير Float يقوم بتخزين الأرقام في مساحة 4بايت والمتغير double يقوم بتخزين المتغيرات من هذا النوع في مساحة 8 بايت أي أنه يمكن أن يكون أكبر من float
3- الأعداد ذات الدقة العالية :
يقوم الـ decimal بتخزين البايانات في 16 بايت ويستخدم لتقريب الأعداد العشرية, أي أنها تعتبر أكثر دقة من double,flaot
وعند التحويل من float أو double أو decimal يحدث خطأ التقريب , إذا كان الرقم أكبر من أن يتناسب مع المتغير وهذا يؤدي لحدوث خطأ .
فعند التحويل من double إلى float أكبر بكثير أو أصغر بكثير فإن القيمة ستمثل في رقم لانهائي أو صفر بالترتيب
عند التحويل من float أو double أو decimal فإن القيمة يتم تقريبها ويحدث التقريب بعد 28 خانة عشرية
إذا كانت القيمة المراد تقريبها صغيرة جدا لكي تتمثل في decimal فحينها تصبح القيمة الجديدة صفر
أما إذا كانت القيمة كبيرة جدا التي يراد تخزينها في decimal حينها سيحدث خطأ
وعندما نحول من decimal إلى double أو float فإن القيمة يتم تقريبها لأقرب قيمة لمكن للنوع flaot أو double حملها, ولكن يتم فقدان دقة الـ decimal عند التحويل إلى float أو double>
4-القيم المنطقية :
وإذا أردنا تخزين الأعداد المنطقية والتي تنحصر بين قيمتي false أو true مثلا أخبتار شيء ما هل يعمل أم لا فقط , أي تأخذ القيمة واحد أو صفر فنستخدم المتغير bool.
إذا يهمنا الآن أن أنواع البيانات في #c هي :
int,uint,long,ulong,short,ushort,byte,sbyte,char,bool,float,double,decimal
والفرق بين المتغير بعلامة وبدون علامة هو أن المتغير ذو العلامة يحمل الأرقام السالبة أما المتغير بدون علامة فلا يحمل إلا الأرقام الموجبة.
جدول يوضح أنواع المتغيرات في #c
ولنأخذ كود يوضح لنا بعض المتغيرات وسعتها
static void Main(string[] args)
}Console.WriteLine("\na boolean is {0} byte(s)", sizeof(bool ));
Console.WriteLine("\na decimal is {0} byte(s)", sizeof(decimal ));
Console.WriteLine("A double is {0} byte(s)", sizeof(double ));
Console.WriteLine("\na float is {0} byte(s)", sizeof(float ));
Console.WriteLine("an ulong is {0} byte(s)", sizeof(ulong ));
Console.WriteLine("\na long is {0} byte(s)", sizeof(long ));
Console.WriteLine("an uint is {0} byte(s)", sizeof(uint ));
Console.WriteLine("\nan int is {0} byte(s)", sizeof(int ));
Console.WriteLine("an ushort is {0} ushort(s)", sizeof(ushort ));
Console.WriteLine("\na short is {0} byte(s)", sizeof(short ));
Console.WriteLine("a char is {0} byte(s)", sizeof(char ));
Console.WriteLine("an sbyte is {0} byte(s)", sizeof(sbyte ));
Console.WriteLine("\na byte is {0} byte(s)", sizeof(byte
));
{
الناتج :
a byte is 1 byte(s)
an sbyte is 1 byte(s)
a char is 2 byte(s)
a short is 2 byte(s)an ushort is 2 ushort(s)
an int is 4 byte(s)
an uint is 4 byte(s)
a long is 8 byte(s)
an ulong is 8 byte(s)
a float is 4 byte(s)
A double is 8 byte(s)
a decimal is 16 byte(s)
a boolean is 1 byte(s)
- سلاسل الحروف :
- الثوابت :
إرسال تعليق