برمجة:جافا:أساسيات 3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
الخوارزميات[عدل | عدل المصدر]
عندما نقوم بكتابة برنامج، فإننا نفعل ذلك لأن هنالك مشكلة نريد حلها و نستخدم الحاسوب لإيجاد ذلك الحل. و لكن حتى نستطيع كتابة برنامج بشكل صحيح فإنه من الأساسي أن نقوم بشيئين أولا:
1) أن نفهم المشكلة بشكل كامل، و نفهم كل مداخلاتها. لأنه بدون فهم صحيح للمشكلة فإننا لا نستطيع أن نكوّن حل صحيح يقوم بحل المشكلة.
2) أن نقوم بتطوير خوارزمية واضحة لحل المشكلة. و الخوارزمية ما هي إلا عبارة عن تعريف للأفعال اللازمة لحل المشكلة، و تعريف الترتيب الصحيح لهذه الأفعال.
فمثلا، عندما تستيقظ في الصباح، فإنك تغتسل ثم تغير ملابسك ثم تتناول الفطور و بعدها تذهب للعمل. هذه تعتبر خوارزمية لأنها تعرّف الأفعال اللازمة و ترتيبها الصحيح.
بعد أبحاث كثيرة(Bohm and Jacopini)، تم التوصل إلى أنه يمكنك كتابة ما تريد في لغات البرمجة مستخدما أي من التراكيب البرمجية التالية: التسلسل، و الإختيار، و الدوران. التسلسل هو عبارة عن تنفيذ الأوامر البرمجية بشكل تسلسلي كما هو مكتوب في البرنامج. الإختيار بمكنك من إختيار فعل أو مجموعة أفعال بناء على شرط معين. بينما الدوران يمكنك من تكرار فعل ما عدد محدد من المرات أو بناء على تحقق شرط أو عدمه. في جافا، فإن سير البرنامج الأساسي هو التسلسل ما لم تتوفر جمل معينة تقوم بتغير هذا التسلسل. هذه الجمل تعرف بإسم جمل التحكم، و التي هي مسؤولة عن التحكم بترتيب الأفعال. و جمل التحكم في جافا تقسم إلى قسمين:
1) جمل الإختيار[عدل | عدل المصدر]
و هي جمل تمكنك من إختيار واحد من أكثر من خيار متوفر. و جمل الإختيار في جافا ثلاثة:
1.1) if: جملة if (إذا) تمكنك من القيام بعمل ما إذا تحقق شرط معين و لا تقوم بعمل شيء إذا لم يتحقق الشرط. فمثلا، قد يكون هنالك مقرر دراسي بعلامة نجاح 60، و تريد معرفة ما إذا نجحت في هذا المقرر فإنك تستطيع ذلك باستخدام جملة if
if( grade >= 60 ) System.out.println( "Passed" );
كما يمكنك الملاحظة، فإن جملة if تتكون من كلمة if متبوعة بشرط بين قوسين و تليها جملة الفعل الذي يجب فعله في حالة تحقق الشرط. بخلاف لغة ++C فإن الشرط يجب أن يكون قيمة منطقية تحمل قيمة صح أو خطأ (Boolean of value true or false) و لا يجوز أن يكون قيمة رقمية.
كما يمكن الملاحظة بأننا قمنا بتحريك جملة الفعل إلى اليمين أسفل الشرط، و هذا ليس إجباريا و لكن من المستحسن فعله لأنه يعني أن هذه الجملة تابعة للشرط مما يؤدي إلى سهولة في قراءة البرنامج. (مما يعني أخطاء أقل :) )
جملة System.out.println تأمر الجهاز بأن يقوم بطباعة الجملة الموجودة بين قوسين على الشاشة.
1.2) if ... else: جملة if...else عبارة عن جملة إختيار تمكنك من القيام بعمل ما إذا تحقق شرط معين، و القيام بعمل أخر إذا لم يتحقق الشرط. في مثالنا السابق، يمكننا أن نوسع الفكرة بحيث يقوم الجهاز بطباعة كلمة Passed إذا كان الطالب قد نجح في المقرر و طباعة Fail إذا لم ينجح الطالب.
if( grade >= 60 ) System.out.println( "Passed" ); else System.out.println( "Failed" );
في جمل الإختيار if و if...else فإنه يمكنك من تعريف أكثر من فعل واحد ليحدث عند تحقق الشرط أو عدمه و ذلك بوضع الجمل داخل الأقواس المعقوفة.
if( condition ) { statement1; statement2; statement3; } else { statement4; statement5; }
كما أنه يمكنك أن تضع جمل داخل بعضها البعض و هذا ما يدعى (Nesting)
if( condition1 ) statement1; else if( condition2 ) statement2;
if( grade >= 90 ) System.out.println( "Excellent" ); else if( grade >= 80 ) System.out.println( "Very Good" ); else if( grade >= 70 ) System.out.println( "Good" ); else if( grade >= 60 ) System.out.println( "Poor" ); else System.out.println( "Failed" );
مشكلة else المتدلية (Dangling else problem): ماذا يحدث في حالة البرنامج التالي؟
if( condition1 ) if( condition2 ) statement1; else statement2;
قد يعتقد المبرمج بأنه إذا تحقق الشرط condition1 و condition2 فإن statement1 ستنفذ، و إذا لم يتحقق condition1 فإن statement2 ستنفذ. و لكن للأسف هذا خطأ، لأنه (مع أن طريقة كتابة البرامج تدل على ذلك) فإن جافا ستفهم البرنامج السابق على أنه:
if( condition1 ) if( condition2 ) statement1; else statement2;
و هذا يعني أنه عند تحقق condition1 و condition2 فإن statement1 ستنفذ، و لكن عند تحقق condition1 و عدم تحقق condition2 فإن statement2 ستنفذ، و هذا يعود لسبب أن جافا تربط ال else بأقرب if لها.
و لكن، إفرض أنك تريد كتابة برنامج يقوم بما هو مفروض أن يحدث في البرنامج الأول؟ في هذه الحالة فإنه يجب عليك أن توضح بشكل صريح بأن ال else تتبع ال if الأولى، و ذلك عن طريق وضع ال if الثانية داخل الأولى، باستخدام الأقواس المعقوفة. و هذا ما يعرف باسم Block و هو أي شيء داخل قوسين معقوفين.
if( condition1 ) { if( condition2 ) statement1; } else statement2;
1.3) switch: وهي جملة شبيهة بعدّة جمل if متداخلة، والهدف منها الإختيار بين عدّة خيارات ، فمثلا يمكنك إستخدامها عندما تفحص متغير يمكن أن يحمل أكثر من قيمتين وله بناء على ذلك أكثر من تصرفين.
2) جمل الدوران[عدل | عدل المصدر]
1) while:
2) do...while:
3) for:
تستخدم عندما يكون عدد مرات التكرار معلوم
الصيغة العمة لها هي
for(initial value;condition;inc/dec count)
statement
مثلا
لطباعة الاعداد من 1 الي 10
for(int i=1;i<=10;i++)
ٍSystem.out.print(i);
4) foreach: