دورة جافا: الطريق لإحتراف البرمجة من الصفر

 

 

5. أنواع البيانات والمتغيرات : tuto titleVariables And Datatypes

المتغيرات وأنواع البيانات في جافا شيء أساسي لأي لغة برمجة، لهذا فإن كل متعلم مبتدئ لابد وأن يتعرف عليها، بل انها قاعدة مهمة بدونها لا يمكن تعلم البرمجة. في هذه الفقرة سنلقي الضوء عن ماهية أنواع البيانات والمتغيرات، وكذلك كيفية تعريفها والاشتغال بها .

 

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

ذاكرة الحاسوب

RAM

أنواع البيانات الجوهرية ( البدئية ) : Primitive Types

المتغيرات

ما هو المتغير

كيفية إعلان المتغير

تهيئة المتغيرات : Initialization

تطبيق

إسناد القيم للمتغيرات

 

1.5 أنواع البيانات

قبل أن نتناول دراسة أنواع البيانات يجب أن نتكلم عن ذاكرة الحاسوب أولاً، مم تتكون، وماذا ستنفعنا في درسنا.

كما رأينا في درسنا عن السي، فأي برنامج هو سلسلة من الأصفار والوحدات، وحدات التخزين هاته تسمى أيضاً Bits، وهي عبارة عن خلايا في ذاكرة الكمبيوتر ( Memory Cells )، تكون فيها القيم 0 أو 1.

 

1.1.5 ذاكرة الحاسوب

لكي نتكلم عن كيفية تخزين البيانات لابد وأن نعطي نبدة عن ذاكرة الحاسوب، والتي تنقسم إلى :

- سجل الويندوز(Registry) : هو ومنذ أول نسخة من ويندوز Windows NT قاعدة البيانات الهرمية لنظام التشغيل مايكروسوفت وندوز. هنا يتم تخزين معلومات الويندوز والبرامج على حدٍ سواء. كما يقدم إمكانية تعديل الإعدادات للويندوز والبرامج .

 

- ذاكرة التخزين المؤقت (الذاكرة المخبئية) (Cache) : وهي كوسيلة لتوفير المحتوى الموجود مسبقاً فيها مجدداً للوصول السريع. وإذا نظرنا للكلمة بمفهومها الاصطلاحي سنجدها تعني ( مأخودة من الفعل الفرنسي cacher والذي يعني : أخفى ) التخزين السري (المخفي).

 

- ذاكرة الوصول العشوائي ( Random-access memory ) : اختصارها RAM وهذا النوع من الذاكرة مؤقت إذ أن المعلومات يتم تفريغها آلياً منه بمجرد إعادة التشغيل، وأحياناً عند إغلاق البرنامج الذي يستهلك جزء منها، وهذا النوع يحرص المحترفون (خصوصاً من يتركز عملهم على التصميم باستخدام برامج متقدمة كالفوتوشوب وثري دي ماكس وغيرها) على توفير أفضل الأنواع منها ويحرصون أيضاً على زيادتها لأنها المسئولة عن سرعة تنفيذ العمليات والمعالجة(Wikipedia).

 

- القرص الصلب (Hard disk drive) : وهو الذي يتم تخزين الملفات ( أفلام، موسيقى، نصوص، صور ... ) عليه.

 

لمشاهدة فيديو لقرص صلب من الداخل مع بعض العمليات عليه :

 

 

altمن بين كل هاته الأنواع ماهي الذاكرة التي سيتم الاشتغال عليها ؟

 

في الواقع هناك ذاكرتين سيتم الاشتغال عليهما :

 

- ذاكرة الوصول العشوائي : سنحتاجها لتخزين المتغيرات.

- القرص الصلب : لتخزين ملفات البرمجة ( file.java )

 

لكن للتخزين نحتاج فقط لذاكرة الوصول العشوائي ( RAM )، هي التي سوف يتم الاشتغال عليها وتخزين البيانات فيها.

 

RAM(Random-access memory)

2.1.5 على ماذا تحتوي RAM ؟

لشرح محتوى RAM نتخيل أنها عبارة عن كراسي عديدة لمسرح!، كل كرسي يشغله شخص معين. وللمقاربة يمكننا القول أن RAM تحتوي على خلايا عديدة (كراسي)،

كل خلية تشغلها قيمة 1 أو 0 (شخص). كما تستطيع الخلية تخزين 1 أو 0 بواسطة ترنزستور ومكثفة فقط. وهنا وحدات التخزين bits ومقابلاتها :

 

- خلية واحدة مخزنة فيها قيمة (و ليس عدد) 1 أو 0 تسمى Bit ( وحدة التخزين bit ) .

- Byte تتكون من 8 Bits .

- Word تتكون من 16، 32 أو 64 Bits .

 

عرفنا الأن مم تتكون RAM ( معرفة سطحية لتبسيط الشرح )، لكن ما علاقتها بأنواع البيانات ؟

سبق وأن ذكرنا أن تخزين البيانات سوف يتم في ذاكرة الحاسوب RAM، وعند تخزين هذه البيانات يجب تحديد ما نوعها لكي يتم التخزين بشكل دقيق ولتوفير المكان المراد

للتخزين فقط. نعاين المثال التالي :

لدينا الذخيرة التالية من الذاكرة، هنا نلاحظ كل Memory Adress ومقابله في الذاكرة ( يجب الانتباه أن أي عدد أو حرف له تركيبة من 1 و-0 في الذاكرة ) :

 

Memory Adress

00011001                  1024

00111111                  1032

11001001                  1040

01010101                  1048

 

كيف يمكننا إذاً ملاحظة وتحليل هذه السلسلة من ال-Bits (خلايا ذاكرة الكمبيوتر ) ؟ أو بصيغة أخرى كيف يمكننا معرفة أنواع هذه القيم لتقييمها ؟ لتحقيق ذلك لابد وأن

نعرف نوع القيم الممثلة في هذه السلسلة (اهي عبارة عن أعداد أم حروف ). ومن أجل معرفة هاته الأنواع يتم إستعمال أنواع البيانات Datatypes .

 

ولأن من أفضل الطرق لتعلم أي شيء جديد هو مقارنته بشيء معروف لدينا لكي نرى الاختلافات، فقد اخترت لكم هذا المثال :

لدينا العناصر التالية :

 

- أحمد

- iphone

- 5

- 1900

- A

 

نعلم أن :

 

أحمد هو إنسان .

iphone عبارة عن هاتف .

5 هو رقم بين 1 و 10.

1900 رقم بين 1 و 2000.

A عبارة عن حرف.

 

نلاحظ على أن كل عنصر ينتمي إلى نوع معين فمثلاً Iphone ينتمي للنوع  : هاتف وأحمد ينتمي للنوع : إنسان وهكذا، كما لا يمكن القول بأن العنصر 5 ينتمي للنوع حرف!

لماذا ؟ لأن 5 ليس حرفاً، إذاً فكل عنصر له نوعه الخاص.

كذلك أنواع البيانات في جافا! فكل ماتقوم به هو تعريف أي نوع من البيانات يجب تعريفه( هل هو حرف، عدد صحيح، عدد عشري... ) .

 

تعرف لغة جافا 8 أنواع بيانات أساسية، يرمز لها بأنواع البيانات الجوهرية. بجانب هاته الأنواع هناك أنواع بيانات مرجعية.

 

هناك نوعين اساسيين من أنواع البيانات في الجافا لتمثيل البيانات، جوهرية (بدئية) وأخرى مرجعية.

 

- الجوهرية هي التي تأتي مسبقاً مركبة في جافا، ولتخصيصها تكفي كتابة القيمة (سنتعرف على كل هذا لاحقاً ).

- المرجعية هي البيانات ك Objects أو Arrays والتي يجب أن تحدد ديناميكياً بكلمة "new" ( المزيد لاحقاً ).

سنتعرف أولاً فقط على أنواع البيانات الجوهرية وذلك لأنها سهلة المعرفة ولا تحتاج لأي خبرة أو معارف قبلية عن جافا عكس المرجعية التي يجب على متعلمها الالمام ب

دروس متقدمة.

 

3.1.5 أنواع البيانات الجوهرية ( البدئية ) : Primitive Types

 

| أنواع الأعداد الصحيحة : The integer Types

لغة جافا تتيح 4 أنواع بيانات لتعريف الأعداد الصحيحة هي : byte، short، int، long. كل نوع متخصص في تخزين أعداد بطول معين. سنبدأ بالنوع الذي يقوم بتخزين أصغر

الاعداد إنتهاءً بالذي يخزن أطولهم. هذه الأنواع تستطيع تخزين الأعداد الموجبة وكذلك الأعداد السالبة.

 

byte : وهو يمثل في جافا Byte واحدة ( 8 bits )، يستطيع تخزين من 128- إلى 127.

مثال : كان عمر الرسول صلى الله عليه وسلام عندما توفي 63 سنة، الرقم 63 ينتمي لمجال الأعداد في byte :

byte age = 63;

short : يمثل 2 Bytes، يستطيع تخزين الأعداد الصحيحة من 32768- إلى 32767.

مثال : عدد عظام انسان بالغ هو 206 عظم، هذا العدد ينتمي ل-short لكنه لا ينتمي ل-byte :

short bones = 206;

int : ويمثل 4 Bytes يعني أنه يستطيع تخزين من 2147483648- إلى 2147483647 :

مثال : مساحة الكرة الأرضية : 510066000 كم مريع، هذا العدد ينتمي ل-int لكنه لاينتمي ل-short أو byte :

int EarSurface = 510066000;

 

long : وهو نوع أخر من أنواع الأعداد الصحيحة يمكن تخزين الأعداد من 9223372036854775808- إلى 9223372036854775807 :

مثال : حجم الكون المرئي هو : 15000000000000 سنة ضوئية :


long UniVolume = 15000000000000L;
//  int وذلك لأن جافا تعرف هذا العدد الصحيح على أنه  L يجب إضافة حرف

 

يمكن أن يلاحظ أحدكم أن وعلى سبيل المثال الرقم 206 ؛ عدد عظام الانسان، يوجد بداخل int و-long، فلا بأس إذاً بتمثيل هذا العدد داخل هذه الأنواع.

لكن يستحسن أيضاً تمثيل أي رقم في مجاله المخصص له وذلك لتمكين المترجم ( Compiler ) من ترجمة الكود بطريقة سريعة. لكن وكما قلت فإنه لا بأس بتعريفه داخل

مجالات أخرى.

altنوع البيانات المحبب والمستعمل بكثرة لتعريف الأعداد الصحيحة هو int، وذلك لأنه مناسب وكافي لأغلب الأعداد المستعملة .

| أنواع الأعداد العشرية

تحتوي على نوعين من أنواع البيانات للأعداد العشرية. وهي : float و-double.

 

float : يحوي الأعداد العشرية السالبة والموجبة في المجال : 1,4E-45 ... +/-3,4E+38 +/-

مثال : العدد Pi يساوي : 3.14159.

float Pi = 3.14159F;
أو
float Pi = (float) 3.14159;
// المشكل هو أن في لغة البرمجة جافا، إفتراضياً تعرف عدد برقم عشري على أنه دوبل لهذا يجب إضافة ما تم اضافته

double : هذا النوع يحوي الأعداد العشرية في المجال : 4,9E-324 ... +/-1,7E+308 +/-

مثال : العدد 66.123456 :

double Nr = 66.123456;

 

| نوع الحروف : Char

نوع الحروف في جافا هو char، ويتكون من 2 Bytes، يستطيع هذا النوع من البيانات تخزين حروف-Unicode جميعها، هذا التمثيل للحروف يسمى "UTF-16" وذلك لأنه

يتكون من 2 Bytes أي 16 bits .

مثال : أول حرف من حروف اللغة الانجليزية هو A، واخرها هو Z :

char FirstLetter = 'A';
char LastLetter = 'Z';

 

| النوع المنطقي : Boolean

نوع البيانات المنطقي هو نوع يقوم بتخزين قيمتين لا ثالث لهما : true أو false، يعني إما أن يكون هذا النوع صحيحاً أو خاطئاً. وهو لا يقبل أي قيم أخرى غير هاتين الكلمتين؛

فلا يمكن مثلاً اعطاؤه قمة 1 أو 0 بدعوى أن هذين الرقمان يعنيان صحيح أو خطأ. كما يجب الانتباه للكتابة ( الكتابة الصحيحة هي بحروف صغيرة ).

مثال :

boolean a = true;
boolean b = false;

 

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

 

2.5 المتغيرات

موضوع المتغيرات في لغة الجافا له علاقة وطيدة بأنواع البيانات، فمهما كبر تعقيد البرنامج لابد من تعريف وتخزين لبياناته كي يتم الاشتغال بها فيه .

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

من أجل معالجة المعلومات في البرامج، فيجب عليها ( البرامج ) أن تكون قادرة على تخزين هذه المعلومات. ولتخزينها؛ على سبيل المثال رقم معين يتم ادخاله من قبل المستخدم، يجب أن يكون شيء كوعاء في الحاسوب يرمى فيه هذا الرقم. وإن كانت لدينا معلومات كثيرة، مثال : رقم، حرف ... فيجب توفر أوعية كثيرة لهذه المعلومات، كل وعاء يحوي معلومة واحدة، كما يجب توفر أوعية مختلفة يمكنها استيعاب قيم أيضاً مختلفة ( رقم، حرف... ) هذا الاختلاف يعبر عنه بأنواع البيانات، فإن الوعاء الذي يستوعب الحروف ليس هو الوعاء الذي يستوعب الأرقام،

هذه الأوعية هي المتغيرات، وهي مختلفة على حسب نوع البيانات، وفي كل متغير -وعاء- توجد معلومة واحدة فقط. إن أردت تخزين رقم معين فأنت تحتاج لوعاء له. وإن أردت تخزين رقم ثاني فسوف تحتاج وعاء ثاني له...

هدف المتغيرات هو تخزين بيانات برنامج ما في ذاكرة التخزين وذلك من أجل قراءتها وتغييرها.

هذا فقط مثال توضيحي بسيط لما هو المتغير، تعال لنتعمق أكثر .

 

1.2.5 ما هو المتغير

في البرمجة متغير بالمعنى العام ما هو إلا عبارة عن حاوية للقيم. فيها يتم تخزين أي قيمة( معلومة ) يتم ادخالها من قبل المستخدم. وكما يدل الإسم ( متغير ) والذي يأتي من فعل تغير فهناك تغيير يتم في قيم المتغيرات في البرنامج، يعني أنه(المتغير) يمثل قيمة معينة تتغير خلال تنفيذ البرنامج، وكمثال لهذا التغيير : لدينا 4 تفاحات، إذا أكلنا التفاحة الاولى، يبقى لدينا 3 تفاحات، بعد أكل التفاحة الثالثة، يتبقى لنا تفاحتين وهكذا، أي أن المتغير يمكنه أن يتغير لقيم متعددة حسب بنية البرنامج :

 

apples=4;
...
apples=3;
...
apples=2;
...<br style="text-align: left;" dir="ltr" />

 

وكما قلنا قبل قليل فهذه المتغيرات يتم تعريفها بنوع البيانات (الذي تم شرحه في الفقرة السابقة ).

مثلاً : هنا قمنا بتعريف age ( عمر الرسول صلى الله عليه وسلم عندما توفي ) بنوع البيانات byte، إذاً age ما هو إلا متغير اعطيناه القيمة 63.

دعنا إذاً نرى أنواع المتغيرات والتي تنقسم إلى ثلاث أنواع :

 

| Instance Variables : وهي التي يتم تعريفها كجزء من تعريف الكلاس، كما يتم تحديدها مع الكائن : Object .

| Class Variables : يتم تعريفها أيضاً ضمن تعريف الكلاس، لكن وجودها يكون مستقل عن الكائن : Object .

| Local Variables : هذا النوع من المتغيرات يتم تعريفه داخل Methode أو Block، كما يوجد فقط هناك .

 

2.2.5 إعلان المتغير

في هذه الفقرة سوف نرى كيفية إعلان المتغيرات. إعلان المتغيرات يمكننا من تخزينها وذلك لاستدعائها عند الحاجة لذلك. ففقط عند إعلانها، يمكن استخدامها في البرنامج، فلا يمكن مثلاً العمل بمتغير إسمه age في البرنامج دون تخزينه .

لإعلان متغير في جافا نستعمل الصيغة التالية :

Typname VariableName;
// نوع البيانات متبوع بإسم المتغير
//مثال
int age;<br style="text-align: left;" dir="ltr" />

بهذا الاعلان نكون قد قمنا بتخزين متغير إسمه variablename من النوع typname، وهو (النوع typname) يمثل نوع بيانات معين كالمذكورة في الفقرة السابقة. كما يمكن لهذا الاعلان أن يتم في أي موضع في كود البرنامج.

 

أسماء المتغيرات :

كما يمكن أن يأتي لكم على البال، فأي إسم قمنا بإختياره سيكون مقبول من قبل جافا. وهذا خطأ فإختيار إسم للمتغير يجب أن يكون وفق شروط وهي :

 

  1. متغير في جافا يمكن أن يبتدئ ب : $ أو _ أو بحرف، ولا يجب أن يبتدئ برقم .
  2. بعد كتابة الحرف الأول من المتغير، يمكنه أن يحتوي على أي حرف وأي رقم .
  3. % ، * ، @ هي عبارة عن رموز محجوزة لجافا ومن الأحسن تفاديها .
  4. لغة جافا تفرق ما بين الكتابة بحروف كبيرة وحروف صغيرة لهذا يرجى الإنتباه عند استخدمها .
  5. من الأحسن أن يكون للمتغير معنى وذلك لتوضيح الأمور بالنسبة للزبون .
  6. لا يجب على المتغير أن يكون أحد هذه الأسماء :

 

 

3.2.5 تهيئة المتغيرات : Initialization

تهيئة المتغيرات هي الطريقة لحجز قيمة بدئية للمتغير، حيث أن المترجم إذا لم يتعرف على تهيئة في البرنامج فسوف يقوم بها بنفسه؛ سيقوم بحجز false لمتغير من نوع

البيانات boolean، القيمة 0 للأنواع العددية والقيمة null للأنواع الاخرى .

لهذا وقبل إستخدام المتغيرات ينبغي تهيئتها، ما معناه، اعطاؤها قيمة بدئية، وذلك لتفادي أي أخطاء تقع في البرنامج كالتي تحدث في لغة C أو FORTRAN

لتهيئة المتغيرات نستعمل الصيغة التالية :

typName VariableName = initial value;
// مثال
int age = 18;  //  هنا قمنا بتعريف متغير بنوع بيانات ما ثم إسناد قيمة بدئية له وهي 18
// مثال أخر
char letter = 'A';<br style="text-align: left;" dir="ltr" />

 

4.2.5 تطبيق

كتطبيق لكل ماجاء في هذه الفقرة ادعوكم لهذا التطبيق، الذي من خلاله يتعمق الفهم .

 

تعرفنا في فقرة أول الخطوات في جافا على الدالة :


System.out.println("hello world!");

 

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

الاجراء :

- قم بإعلان وتهيئة المتغيرات التالية : a، b، c، d، e

- a من نوع int . له القيمة البدئية 4 .

- b من نوع int . له القيمة البدئية 2 .

- c من نوع byte . له القيمة البدئية 23 .

- d من نوع double . له القيمة البدئية 3.1 .

- e من نوع char . له القيمة البدئية c .

- قم بطباعة جميع المتغيرات بمساعدة الدالة التالية :


System.out.println(هنا إسم المتغير بدون علامات الاقتباس);

 

- قم بطباعة ناتج قسمة a على b و ذلك بالصيغة التالية : a/b مكان كتابة المتغير .

- الشكل الرئيسي لبرنامجك كالتالي، قم بنقله وإستخدامه :


public class Exec1 {
public static void main(String[] args) {
// هنا يتم كتابة البرنامج
}
}

 

أظن الأن لديكم كل ما تحتاجونه لكتابة أول برامجكم. ما عليكم الأن إلا التحرير.

 

الحل :

{slide=تطبيق : إضغط علي لترى الحل }

public class Exec1 {
/**
* @author Ayoub El Hobbi
* @version 27.04.2010
*/
public static void main(String[] args) {
int a = 4;
int b = 2;
byte c = 23;
double d = 3.1;
char e = 'c';
 
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(a/b);
}
}

{/slide}

 

5.2.5 إسناد القيم للمتغيرات

هل تعلم أن التطبيق السابق( جزء ناتج القسمة ) يمكن حله بطريقة أخرى ؟ نعم وهذه الطريقة هي طريقة الاسناد، يمكن أن نسند قيمة a/b لمتغير أخر وطباعة هذا المتغير. وذلك وفق شرط أن يكون المتغيران من نفس نوع البيانات، يمكن عمل ذلك كالتالي :

public class Exec1 {
/**
* @author Ayoub El Hobbi
* @version 27.04.2010
*/
public static void main(String[] args) {
int a = 4;
int b = 2;
 
int c = a/b;  // هنا يتم الاسناد
 
System.out.println(c);//cهنا يتم طباعة ما تم إسناده للمتغير
}
}

 

مثال أخر لطريقة الاسناد :

public class Exec13 {
/**
* @author Ayoub El Hobbi
* @version 27.04.2010
*/
public static void main(String[] args) {
int a = 4;
int b = 2;
 
a = b;   // هنا يتم الاسناد
 
System.out.println(a);   // 2 هنا يتم طباعة
}
}

 

كانت هذه فقرة عن المتغيرات في الجافا، وكما فيها أنواع أخرى، فلا أحبد الوقت لذكرها بتفاصيلها لكن كل تفاصليها ستأتي مع الدروس القادمة بحول الله .