أساسيات لغة جافا لبرمجة تطبيقات أندرويد ( الجزء الأول )

توجد طرق متعددة لصنع تطبيقات لنظام تشغيل أندرويد ويُفضل المطوَرون كتابة التطبيقات باستخدام اللغة الرسمية وهي جافا لقدرتها على استغلال كافة موارد الهاتف وكفاءتها عند العمل.

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

يعتمد نظام تشغيل أندرويد على أساسيات لغة جافا ومكتباتها القوية بالإضافة إلى مكتبات أندرويد الخاصة، ويتم وضع الشيفرة المكتوبة بلغة جافا بعد أن يتم ترجمتها إلى صيغتها التنفيذية في ملف بامتداد apk جنبًا إلى جنب مع باقي الموارد من صور وملف androidManifest.

البرمجة كائنية التوجه

تتميز لغة جافا بأنها لغة سهلة التعلم وتٌصنف من اللغات عالية المستوى والتي نستطيع فهم أوامرها بسهولة، وهي من لغات البرمجة التي تدعم مفهوم البرمجة كائنية التّوجّه.

والبرمجة كائنية التّوجّه تتكون من مجموعة من المفاهيم.

في عالمنا الحقيقي يمكن التعامل مع أي شيء على أنه كائن، ولكل كائن صفات تميزه ولديه وظائف يستطيع القيام بها، فمثلًا الكاميرا كائن لها صفات مثل اللون والأبعاد والشركة المصنعة لها، ولها وظائف يستطيع القيام بها مثل التصوير أو تخزين وعرض الصورة.

ويوجد أنواع عديدة من الكاميرات لذا يتم وضع التصميم المشترك والتعريف الخاص بهذه الكائنات في البرمجة في صنفClass ومن هذا الصّنف يتم استخراج الكائنات.

لذا يتم تصّنيف الأشياء إلى فئات تشترك في الصفات والوظائف ومنها يتم صنع الكائنات Objects.

المتغيرات

تتعامل لغة جافا مع كافة أنواع البيانات والقيام عليها بالعمليات المختلفة. لذا تستخدم المتغيرات كحاويات لتخزين هذه البيانات لحفظها بشكل مؤقت والقيام عليها بالعمليات المطلوبة ويمكن تغيير هذه القيم في أي وقت ويعتبر تعريف المتغيرات الطريقة لجعل الحاسوب يحتفظ بالمعلومات.

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

ولتعريف متغير جديد يتم على هذا النحو:

DataType variableName;

يتم كتابة نوع البيانات أولًا ثم اسم المتغير، واسم المتغير يمكن أن يكون أي شيء ولكن هناك بعض الأمور التي يجب مراعاتها وهي:

  • يمكنك استخدام الحروف “A-Z” و “a-z” و “0-9”.
  • ألا يبدأ برقم.
  • لا يسمح باستخدام أي حروف خاصة في الاسم مثل @، # وغيرهما عدا _ فقط.
  • لا يسمح باستخدام المسافات في الاسم.
  • ألا يكون الاسم من الكلمات المجوزة لدى اللغة وهي كلمات ذات معنى محدد لدى المترجم.
أنواع البيانات

هناك بعض الأنواع الأساسية لتعريف المتغيرات مثل:

  • الأرقام الصحيحة: يتم تخزين الأرقام الصحيحة في متغير النوع int.

 int number=26;

  • الأرقام الكسرية: لتخزين الأرقام الكسرية نستخدم متغير من النوع float أو double.
double fraction=102.486;
float fraction=842.014f;

لاحظ أن عند تعريف متغير من النوع float يجب وضع الحرف f في نهاية الرقم.

  • الحروف: لتخزين حرف واحد نستخدم متغير من النوع char.
char c=’y’;
char num=’8’;
char s=’&’;

يتم وضع الحرف بين علامتيّ اقتباس فردية.

  • القيم المنطقية: لتخزين متغير يحمل إحدى القيمتين المنطقيين true أو false يتم تعريف متغير من النوع boolean، ويستخدم في المقارنات المنطقية.
boolean flag=true;
  • النصوص: لتخزين نص يتم استخدام متغير من النوع String.
String str=”Hello,World!!”;

يتم وضع النص بين علامتيّ اقتباس زوجية ولا يوجد حد لطول النص.

والاختلاف بين النوعين char و String أن الأول لتخزين حرف واحد فقط والثاني لنص كامل، ولاحظ أن علامتيَ الاقتباس مختلفة فلا يمكن استخدام “R” لتخزينها في متغير من النوع char لأنها داخل علامتيّ الاقتباس الخاصة بالنص.

كما يمكنك أن تقوم بتعريف المزيد من أنواع البيانات باستخدام الأصناف كما سنرى لاحقًا.

في الأمثلة السابقة قمنا بتعريف المتغير وتخزين قيمة مبدئية بداخله، هناك طريقة أخرى يمكن استخدامها كما في المثال التالي.

int x;
x=100;

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

ملاحظات
  1. تنتهي الجمل في جافا بالفاصلة المنقوطة “;” للتعبير عن انتهاء الجملة، ويمكن اعتبارها مثل النقطة التي تنتهي بها الجملة عند الكتابة.
  2. العلامة “=” تسمى بـ “عامل الإسناد” (Assignment Operator) وتستخدم لتخزين القيم التي تقع يمين العامل في المتغير الذي يقع على يساره.
int x;
x=3;
x=x+5;

في هذا المثال سيتم تخزين 3 في المتغير x ثم بعد ذلك جمع عليه الرقم 5 وتخزينه مرة أخرى في x ليصبح الناتج النهائي المخزن داخل المتغير x يساوي 8.

العمليات الحسابية والمنطقية

العمليات الرياضية

يمكننا القيام بالعمليات الرياضية المعتادة في لغة جافا فمثلًا:

int x = 19;
int y = 4;
int result = x + y;

وهنا يتم جمع قيم المتغيرين وتخزينهما في المتغير result ليصبح الناتج يساوي 23:

int result = x  y;

وإذا قمنا بتغيير السطر الثالث بهذا السطر فيصبح الناتج 15:

int result = x * y;

وناتج ضربهما يساوي 76:

int result = x / y;

وناتج القسمة يساوي 4 ويتم إهمال الكسر لأن في لغات البرمجة عندما نقوم بقسمة رقمين صحيحين فيكون الناتج رقمًا صحيحًا.

int result = x % y;

وتعني هذه العملية بباقي قسمة x على y وتساوي 5.

وهناك العملية:

x++;

وهي تتشابه مع:

x=x+1;

فهي تقوم بزيادة واحد على قيمة المتغير، وبالمثل العملية –x تقوم بطرح واحد من قيمة المتغير.

عمليات المقارنة

وتقارن هذه العمليات بين المعاملات مثل:

int a = 15;
int b = 20;
boolean result = a > b;

وتقوم هذه العملية بالمقارنة بين قيمتيّ a و b وتخزين true أو false في المتغير result وفي المثال السابق سيتم تخزين false لأن b ذات قيمة أكبر من a.

وباقي المقارنات هي > أصغر من، و =< أكبر من أو يساوي، => أصغر من أو يساوي، == يساوي، =! لا يساوي وكلهم يكون ناتجهم إما true أو false.

العمليات المنطقية

تستخدم العمليات المنطقية في ربط ناتج أكثر من عملية مقارنة سويًا.

int a = 15;
int b = 20;
int c = 7;

boolean result = a > b && a > c;

وتستخدم && (كحرف العطف “و”) للتعبير عن وجوب تحقق الشرطين معًا ليكون الناتج true ويكون false غير ذلك.

boolean result = a > b || a > c;

وتستخدم || (كحرف العطف “أو”) للتعبير عن تحقق إحدى الشرطين أو تحققهما معًا ليكون الناتج true ويكون الناتج false عندما يكون الشرطين غير متحققين معًا.

boolean result = !(a>b);

وتعني ! عكس الناتج فإذا كان true يصبح false والعكس صحيح.

التعليقات

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

تعليق السطر الواحد

هذا النوع من التعليق يتم باستخدام علامتيّ //، ويجعل السطر المقابل لها تعليق لا يراه البرنامج.

//This is a single-line comment

int weekDays = 7; //Number of Days in a week

كما ترى يقوم التعليق بتوضيح الأمور للمطوّر.

تعليق الأسطر المتعددة

يمكنك أن تكتب تعليق في عدة أسطر باستخدام /* */ لكتابة التعليق:

/*This is a multi-line comment.

That comment ends when it finds the closing marker. */

يتم حجز عدد من الأسطر بين */  و /* وتكون عبارة عن تعليق. ولن يتم تنفيذها في البرنامج، فوصول المترجم لـ */ تجعله يتجاهل كل ما يقابله حتى يصل لـ /* ثم يقوم بتنفيذ ما بعدها.

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

الجمل الشرطية

وهي الجمل التي تنفذ عند تحقق شرط معين ولتنفيذها يتم استخدام if و if-else و switch، وإذا لم يتحقق هذا الشرط لا يتم تنفيذها.

جملة if

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

if ( Condition ) {

// Do Some Actions if it’s true

}

تُكتب كلمة if ويتم وضع الشرط بين الأقواس و عند تحقق الشرط يتم تنفيذ الأوامر المتواجدة بين القوسين { } وإذا لم يتحقق يتم تجاهل هذه الأوامر واستكمال الشفرة الخاصة بالبرنامج.

مثال على ذلك:

int x = 10;
String result = false”;

if(x > 10){
  result = true”;
}

في المثال السابق يتم التحقق من قيمة المتغير x إذا كانت أكبر من الصفر أم لا، وفي هذه الحالة فالشرط سليم ويتم تخزين النص “true” داخل المتغير result، وإذا تم تغيير قيمة المتغير x إلى -5 مثلًا لن يتحقق الشرط وستظل قيمة النص “false”.

الجملة if-else

وهي تقوم بنفس الوظيفة التي تقوم بها if عدا أنه إذا لم يتحقق الشرط الخاص بـ if تقوم بتنفيذ أوامر أخرى معرّفة لدى الجملة else، وبالتعديل على المثال السابق:

int x = -6;
String result ;

if(x > 10){
  result = true”;
}else{
  result = false”;
}

في المثال لا يتم تم وضع نص مبدئي في المتغير result ويتم التحقق بعد ذلك من الشرط الخاص بـ if إذا كان صحيحًا فسيتم وضع النص “true” داخل المتغير result أما إذا كان خاطئًا فسيتم وضع القيم “false” داخل المتغير result.

ويمكن القيام بالتحقق بأكثر من شرط كما في المثال التالي:

char grade = B’;
String result;

if(grade==’A’){
  result = Excellent”;
}else if(grade==’B’){
  result = Very good”;
}else if(grade==’C’){
  result = good”;
}else if(grade==’D’){
  result = passed”;
}else{
  result = failed”;
}

في هذا المثال تم استخدام أكثر من شرط وجملة واحدة فقط التي تتحقق ويكون الشرط فيها صحيحًا وفي المثال فهي الجملة الثانية ويتم تخزين النص “very good”.

لاحظ أننا لا تستخدم == عند المقارنة بين النصوص من النوع String وتستخدم الدالة equals.

جملة switch

تستخدم هذه الجملة عندما نريد التحقق من قيمة متغير واحد فقط وتعتبر أكثر سهولة من if في هذه الحالة:

switch(variable){

case 1:
  //Do something
  break;

case 2:
  //Do something
  break;

default:
  //Do something
  break; 
}

وبتحويل المثال السابق الخاص بـ if باستخدام switch:

char grade = B’;
String result;

switch(grade){
  case A’:
  result = Excellent”;
  break;

case B’:
  result = Very good”;
  break;
  
case C’:
  result = good”;
  break;

case D’:
  result = passed”;
  break;

default:
  result = failed”;
  break;
}

ملاحظات

  1. يتم كتابة اسم المتغير فقط بين الأقواس الخاصة بـ switch ولا يتم تحديد شرط معين.
  2. تكتب كلمة case وتتبعها قيمة المتغير عند هذه الحالة حتى يتم تنفيذ الأوامر الخاصة بهذه الحالة إذا تساوت قيمة المتغير الخاص بـ switch مع القيمة الخاصة بـ case (في المثال السابق كان المتغير من النوع char لذا تم وضع القيم الخاصة بـ case بين علامتيّ التنصيص المفردة).
  3. في آخر كل حالة يتم وضع الأمر break وهو أمر للخروج من الجملة switch، وإذا لم يتم وضعه سيتم تنفيذ باقي الحالات المتواجدة داخل الجملة switch حتى نصل إلى الأمر break أو تنتهي الجملة switch.
  4. يتم تنفيذ الحالة default عندما يكون قيمة المتغير الخاص بـ switch لا يوجد لها حالة خاصة بها.
  5. جملة switch تتعامل مع المتغيرات من النوع int أو char أو String فقط.
الجمل الشرطية التكرارية

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

تمتلك لغة جافا عدة أنواع من الجمل التكرارية مثل while و do While و for.

الجملة while

وتتشابه تركيبة هذه الجملة مع الجملة if كالتالي:

while (Condition){

//Do some Actions here

}

ويتم تنفيذ الأوامر داخل الجملة while طالما الشرط متحقق ويتم التوقف عندما يصبح الشرط خاطئًا، مثال على ذلك:

int i = 0;
int sum = 0;

while( i < 5 ){
  sum = sum + 1;
  i++;
}

في هذا المثال يكون الشرط صحيحًا فيتم تنفيذ الجمل داخل while ثم يتم التحقق من الشرط مرة أخرى ويكون صحيحًا وهكذا حتى يصبح الشرط خاطئًا ويُلاحظ أن الشرط لن يتحقق في حالة i تساوي 5 وعند الخروج من الجملة التكرارية تكون القيمة 5 مخزنة داخل المتغير sum.

الجملة for

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

for (initialization ; condition ; update){

// Do Some Actions here

}

داخل القوسين الخاصين بالجملة for يتم تقسيمها إلى ثلاث أقسام تفصلهم الفاصلة المنقوطة “;” وأول قسم يتم به تهيئة المتغير إعطائه قيمة ابتدائية، والقسم الثاني الشرط المعتاد، والقسم الأخير خاص بتحديث الشرط.

فمثلًا لاستخدام for في المثال السابق الخاص بـ while:

int sum =0;

for(int i=0;i<5;i++){
  sum = sum + 1;
}

ويقوم المثال السابق بنفس الوظيفة و ُلاحظ أنه تم دمج الجمل الثلاث التي كانت قبل جملة while والشرط الخاص بـ while والتحديث للشرط داخل جملة while في سطر واحد داخل الأقواس الخاصة بـ for.

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

سنواصل في الدرس القادم باقي أساسيات جافا التي تحتاج أن تعرفها قبل أن تشرع في برمجة تطبيقات أندرويد.

 المصدر:أكـــــــاديمية حسوب
صاحب المقال: أحمد الـنـوبـي

عن أنس بوغداد

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

شاهد أيضاً

أفضل المواقع لتصميم شعار (Logo) مجانا%d8%a3%d9%81%d8%b6%d9%84-%d8%a7%d9%84%d9%85%d9%88%d8%a7%d9%82%d8%b9-%d9%84%d8%aa%d8%b5%d9%85%d9%8a%d9%85-%d8%b4%d8%b9%d8%a7%d8%b1-%d9%85%d8%ac%d8%a7%d9%86%d8%a7

أفضل المواقع لتصميم شعار (Logo) مجانا

عند البدأ بأي مشروع جديد، فإن شعار الموقع أو المشروع يمثل إلى حد كبير هوية …

أضف تعليق