بسم الله الرحمن الرحيم طبعا يا جماعة احنا الموضوع
اللي موجودة في ال chapter هذا خلصناها فيه بس يمكن
شوية أمور صغيرة ضايلة هنخلصها اليوم و .. و نحل
التمرينين إن شاء الله و أنا نزلت واجب على ال
chapter هذا طبعا الامتحان النصفي يا جماعة داخل لحد
نهاية ال chapter هذا طبعا؟ chapter 2 لأن احنا
بدأنا من اتنين طبعا؟
اللي درسناه داخل في الامتحان ماشي طيب
لأن بدي أرجع يا جماعة أقرأ شوية في ال slide تمام
اللي هو طبعا المشروع في ال slide أنا شرحته في
المحاضرة وحلنا عليه تمارين بس من باب أنه احنا
كمراجع نمر عليه بشكل سريع على ال slide لأن هذه
عنوان ال slide هذا ايش nested statements ايش هاي
nested statements يعني ال statement جوا statement
زي if statement جوا if statement في المثال هذا عندي
طبعا هذا بيحكي هو ال syntax ايش هي كلمة syntax
اللي هي الصيغة العامة يعني كيف تنكتب if جوا if
فبقولي if Boolean expression تمام هذا ال if داخل
مين؟داخل ال if هذه لاحظ هنا ان هو ما حطش أقواس لأنه
اعتبر ان ال if كلها هذه عبارة عن جملة واحدة ف if
boolean expression واحد دخل على ال if داخلها if
boolean expression اتنين إذا اتنفذت هذه بنفذ
statement واحد else بنفذ statement اتنين ال else
هذه تابعة لمين؟ لأقرب if لها اللي هي ال if هذه
تمام؟ وهذه كلها ال if statement داخل ال if الكبير
لما في عندي else براهذه تابعة لمن؟ لـ if الأولى فهو
دايما الـ else هذه هيك تابعة تمام؟ و هذه ال else
تابعة لل if اللي فوق else .. الآن هذه أيضا if
statement كاملة داخل مين؟ داخل ال else if bool expression تلاتة نفذ هذا else نفذ هذه و هذه برضه
ال else تابعة لل if هذه هذا بس الصيغة العامة
لأن هنا بيحكي لي each else is paired with the
nearest unmatched if إيش يعني؟ كل else is paired
إيش يعني paired؟ زي مرتبطة with the nearest إيش هي
nearest؟ أقرب unmatched if أقرب if موجودة عندك if
used properly indentation communicates which if
goes with which else if used properly إذا تم
استخدامه بشكل كويس هاي معناه if used properly إيش
هو ال if used properly؟ ال indentation إيش ان
indentation؟ أخذناها الكلمة هذه قبل هيك
indentation اللي هو أنت تقدم الأسطر وترجعها تمام
مش أنت بتلاحظ أن احنا دايما الحاجة اللي موجودة جوا
ال if الستة بتقدمها شوية صح ولا لا يا جماعة هذا
بتسمى ال indentation ان هو تقدم السطور و ترجعها
انت ممكن ما تقدمش السطر جربنا هذا الكلام ممكن
تخليه كله على نفس المحاذة لكن مثلا احنا بنحب ده من
ال code اللي جوا ال if تقدمه شوية عشان يبين انه تبع
ال if تمام ف if used properly اذا انت استخدمت ال
indentation بشكل صحيح ال indentation هيوصل
communicates يعني بوصلك بشكل واضح او مشاهد كل اللي
استبع لمينيعني انت هنا بمجرد ما تطلع الشكل هتفهم
ان ال السادي تابع ل if هذا و هذي تابع لمين لهذه بس
بمجرد النظر طبعا لكن تخيل انا هدول ما حطتش المسافات
اللي هنا خلتهم كلهم سطر واحد تكون تفكر فيها صح؟ مش
غلط انك انت تحطهم كلهم في سطر واحد لكن ال code
هيبطل مقروء بشكل مفهوم يعني
الـ braces can be used like parenthesis to group
statements برايسز اللي هم هدول يا جماعة تمام؟ ممكن
نستخدمه عشان نعمل group statements عشان نجمع
الأوامر انتبه
معايا هنا، شوف المثال هذاالان نفس ال code تماما
نفس ال code تماما بس في اختلاف في ايش ان هنا فيش
أقواس و هنا فيه أقواس و الأقواس استخدامها ممكن يأثر
على تنفيذ البرنامج الان انسى المثال هذا تعالى تشوف
المثال اللي هنا المثال اللي هنا بمجرد ما تتطلع
عليه في عندي if و عندي if و عندي else ال else هذه
تابعة لمن؟تابعة لل if لأقرب if لها تمام؟ اللي هي ال
if ال if هذه أقرب unmatched if يعني الآن إذا كانت A
أكبر من B هيروح يفحص إذا C أكبر من D هينفذ هذه
else هينفذ السطر هذه طب تعالى شوف هذه ايش بتختلف؟
لأن if في ال statement فتح قوسين داخل القوسين إيش
فيه؟ if وبرا القوسين إيش فيه؟ else لأن ال else هذه
تابعة لمين؟ لل if اللي فوق عشان ذلك كان دقيق ما
جالكش لأقرب nearest if جالك لأقرب nearest
unmatched if إيش يعني unmatched؟ يعني خلّيني أقول
ال if اللي مش .. يعني ال .. اللي ما انتهتش تمام؟
لأن هذه ال if اللي هنا خلصت وانتهت بمجرد إيش؟ ما
سَكَرْت القوس طبعا لكن لأن ال else سَكَرْت مباشرة بعد قوس
ال if هذه اعتبر ان ال else تابعة لمين لل if الفوق
فبدك تنتبه لل code و لاستخدام الأقواس لأن زيك
استخدام الأقواس ممكن يغير تنفيذ ال code هنا ال else
تابعة لمين لل if الجوه طبعا هذا ال else تابعة
لمين لل if لبرا إيش هالكلام هذا إذا هنا في المثال
هذا إذا فحص ال A إذا كانت أكبر من B هينفذ إذا مش
أكبر من B هينفذ هذه لكن هنا إذا A أكبر من B هينفذ
ال if لجوه إذا مش أكبر من B مش هيعمل ولا حاجة هذا
الفرق هنا بعملش إذا كانت A أصغر من أو يساوي B مش
هيعمل حاجة لكن هنا إذا كانت A أصغر من أو يساوي B
هيروح على القلص طبعا هنا بقول طب انت ليش هنا محطتش
أقواس الان بمجرد عشان في if بعد ال if اعتبر ان هذي
كلها زي جملة واحدة طبعا يعني ال if في ال statement
كلها باعتبرها زي أمر واحد اذا حابب انا احط بعد هيك
أسطر واعتبرها تابعة لل if هذي و انا بلزم احط أقواس
عشان اجمع ال if و اللي بعدها تابع لل if
طيب هذه ال compound statements بس بحكيه لإن انت
ممكن تجمع ال statements باستخدام الأقواس هذا مثلا
المثال واضح إن هدول اتنين مش هيتنفذوا إلا لو كان
ايش ال total أكبر من عشر طيب هذا ال conditional
operator اللي أخدناه المحاضرة الماضية قلنا يا
جماعة إذا في عندك متغير زي max هذا قيمته بتعتمد على
شرط يعني انا طالع معايا ال max هذا إذا اتحقق الشرط
بياخد N1 إذا ما اتحققش الشرط بياخد N2
واضح لما تكون انت في حالة ان انت عندك متغير بدك
تغير قيمته بناء على شرط ممكن تستخدم حاجة سميناها
ال condition ال operator في ال if statement و ال
else موجود عند ما يساوي max يساوي صح فبعدين بقوله
ممكن ممكن هذه نختصرها كيف نقوله max يساوي كيف بتحط
الشرط ايش هو الشرط ان واحد اكبر من ان اتنين لأن
إذا اتحقق خليه ياخد ايش القيمة N واحد إذا ما اتحققش
ياخد N اتنين هذه نفسها هي تكافئ من؟ تكافئ هذه
مثال تاني Fx يساوي تلاتة حط في ال Y زيرو else
حط في ال Y خمسة كيف هدفنا نحولها conditional
operator أول حاجة تطلع هل هدف احنا بنحتاج نحولها
conditional operator عندك متغير Y قيمته بتعتمد على
مين؟ على شرط شرط اللي هو قيمة ال X بتقول Y يساوي
ايش الشرط؟ افحصلي هل X يساوي تلاتة ولا لأ إذا تحقق
.. وبعدين حط علامة استفهام إذا اتحقق، اضغط في ال Y
ايش؟ Zero ما اتحققش، اضغط في ال Y خمسة فدائما
القيمتين اللي هنا اللي بفصل بينهم نجتين القيمة
الأولى لو اتحقق الشرط القيمة التانية لو ما
اتحققش الشرط هل جيت هادي، هي نفسها هادي وزي ما
قلنا ال condition ال operator هو بس طريقة للاختصار
بس طريقة لإيش يا جماعة للاختصار يعني هذه مش غلط
ما قلناش غلط تمام بس انا ممكن اختصرها بالسطر هذا
ومش كل if statement ممكن اختصارها بالشكل هذا فقط
الحاجات اللي أنا عندي متغير قيمته بتعتمد على شرط
هذا اللي بنفذها بالـ conditional operator
طيب الآن اتطلعوا على المثال هذا حاولوا تتطلعوا على
المثال واحد يفسر لي ايش معناه اتطلعوا على المثال
اقرأوه بدي واحد شاطر يفسر لي ايش معنى المثال هذا
عشان أفهمكم المثال هذا بدي أعمله بس بطريقة أبسط من
هيك
طب يا جماعة بنعمل تطبيق بسيط، مطلب من المستخدم يدخل
عدد الساعات اللي اشتغلها، تمام، مثلاً عشان نحسب
الرواتب له هنا
system.out.println
System.out.println "you worked"
ماذا أنا طبعته هنا؟ أنت بتطبّع له عدد الساعات اللي
اشتغلها، تمام، أنت "you worked" كذا hours، مفيش برنامج
مابيعملش حاجة، بسيط جداً يعني لو قلت له دخل خمسة
هيقول له "you worked five hours"، طيب لو دخلت واحد
"you worked one hours"، تمام، الآن المفروض أن لو كان
يعني هذا الموجود هنا شايفينه؟ لحظة، استنى شوية لأن
المفروض أنه كلمة hours تطبع لو كان العدد أكثر من
واحد، صح ولا لأ؟ لو كان واحد يطبع بس كلمة hour مش
هيك، المفروض يا جماعة في الطباعة، في طباعة الجمعة
أنا اشتغلت خمس ساعات، ست ساعات، لكن لو اشتغلت ساعة،
بقول واحد ساعة، هذه الفكرة أن كلمة hours هذه
المفروض أن لو كان واحد دخل المستخدم واحد، هيطبع
كلمة hour، لو دخل أكثر من واحد يطبع hours، واضح ايش
بنعمل؟ احنا لسه ما عملناهاش، واضح ايش بنعمل يا
جماعة؟ واضح ولا لأ؟ اللي بدنا نطبعه يا "m hour" يا "m
hours" بناء على عدد الساعات اللي دخلها، طبعاً طيب
تعالوا نحله بطريقة سهلة، بدنا نعمل String فاضي
String printed_hours
هذه String فاضي مافيش فيها حاجة، ليش عملت الـ
String الفاضي هذه عشان أقوله if hours، الساعات اللي
اشتغلها المستخدم، تمام، أكبر من واحد، خلي
الـ printed_hours حط فيها كلمة hours، else فاهمين
أنا ايش عملت هنا يا جماعة، الآن هذا صار متغيري بطل ثابت
صح ولا لأ؟ مرة هيك ومرة هيك هيكون، فروحت عشان مثله
عملت نص اسمه printed_hours قيمته ايش بتكون في
الأول فاضي، الآن قلت له شوف ليه قداش المستخدم دخل
إذا دخل أكثر من واحد حط في الـ printed_hours كلمة
ايش ساعة، else ايش يعني else؟ غير ذلك، ما كانش أكثر من
واحد، كان واحد أو صفر، خليها ايش، الآن ببساطة شديدة
شيل هذه، تمام، بس خلّي مسافة هنا وحط printed_hours
فاهمين حاجة؟ ايش عملت هنا يا جماعة؟ المفروض أنه بسيط
جداً بالمثال، مافيش، أنا روحت فحصت قيمة الساعات اللي
دخلها المستخدم، والله إذا أكثر من واحد حطيت في هذا
النص كلمة hours، غير هيك حط في hour، وفي الآخر طبعته
"You worked" هيطبع عدد الساعات وبعدين هيطبع كلمة
hour يا hours، الآن تعالى نجربها، الآن
دخل اثنين، كتب لي "two hours"، هاي واحد، تمام "one hour"
سبعة
hours، فهمتوا حاجة يا جماعة ولا ما فهمتوش؟ طيب الآن
هذا المثال عبارة عن متغير قيمته بتعتمد على شرط
ممكن نحوله لـ conditional operator، ممكن، كيف؟ ايش
عملت أنا؟ تعليق للـ code، لغيتّه يعني comment للـ code
تمام؟ وبدأت أقول له printed_hours يساوي ايش الشرط؟
hours أكبر من واحد، إذا اتحقق الشرط افتح قوسين زي
هيك وحط فيه ايش؟ hours، ما تحققش الشرط حط فيه hour
إذا
اتحقق الشرط حط hours، ما تحققش حط فيها hour، هذا
الجملة اختصار من اختصار الـ if في الـ statement كلها
إذا hours أكبر من واحد حط فيه hours، مش أكبر حط فيه
hour، لأن اعمل run ثاني، هاي
واحد طبع لي "one hour"، هاي ثلاثين طبع لي "one تلاتين
hours"، الآن شوف ايش بده اسويه، ممكن كمان نختصر الـ code
أكثر أنك تأخذ هذه شايف هذه؟ هذه كلها تحطها وين؟ بدل
printed_words تحطها كجملة طباعة هنا بس ايش حطها بين
قوسين بالشكل هذا، هذه
كلها، مش هذه القيمة اللي هنا بحسبها وبحطها في
الـ printed_hours، بدل ما أحطها في الـ printed_hours
أخذها وحطيتها في جملة طباعة، كتب لي "you work it" هنا
عدد الساعات اللي اشتغلتها، وهنا بحسب بشوف هل الـ
hours أكبر من واحد، إذا أكبر من واحد هيطبع له ايش؟
hours، مش أكبر من واحد هيطبع له hour، نفس اللي
كتبته فوق، بدل ما أحطه في printed_hours وأطبع
printed_hours حطيته في جملة الطباعة، إذا أنت فاهمها
زي أول خلّيها زي printed_hours حتى هذه، الآن ممكن
نعمل comment وهي المثال لأن
هاي واحد طبع لي "one hour"، هلجيت هو طبعاً في المثال
مابدأش معك بالتدريج زي هيك على طول، ادّاك ايش؟
system.out.println وحط لك hours أكبر من واحد اطبع
hours أو hour، تمام، بس أنا مشيت معك شوي شوي، أول
حاجة أخلت لك إياها if statement، وبعد ما هي if
statement حولت لك إياها لمتغير و conditional
operator بغير في متغير وطبعت لك لمتغير وبعدين
أخذت الـ conditional operator كله وحطيته جوا جملة
الطباعة، مشيت معك على ثلاث خطوات، واضح يا جماعة احنا
بنحكي وبنعيد يا جماعة أن البرمجة بدها متابعة، هلجيت
ثلاث أرباعكم انبلم وفاتح ثمه وبتطلع في الـ code
لايش؟ لأنه ما جربش قبل هيك، قاعد هبسأل ايش هذه القوسين
اللي كتبتها قبل هذا؟ فقال له إنه هذه مسافة، طبعاً هو
ليش بيسأل السؤال هذا؟ لأنه قبل هيك ما راحش يجرب في
البيت يعمل system.out.print لأنه يعمل كذا زائد كذا
زائد كذا، لأنه ما جربش، فبيشوف هيك، لسه بده بده خمس
دقايقُه يسأل الجمل ويستوعبها، وأنا في الخمس دقايق
بكون شرحت حاجة ضاع اللي جمل وضاع المين اللي جديد
تمام، فبيطيح العمارة يعني شوي شوي بتراكم عليك كله بـ
heal في الآخر، فاحنا بنقول يا جماعة تابع أول بأول
أنا مش هضلني في كل مثال أعيد أشرح ايش الأساسيات في
عندنا حاجة ما تتكوش إياها اللي هي الـ exit method
تمام، ايش كلمة exit؟
خروج خروج خروج خروج خروج خروج خروج خروج خروج خروج
خروج خروج خروج خروج ماذا هي الجملة هذه sometimes
a situation arises وضع
أو ظرف معين arises يظهر وضع معين بيخلق الاستمرار
في البرنامج عديم الجدوى pointless عديم الفائدة
يعني باختصار أن أنت أحياناً بدك تنهي البرنامج، كيف
مثلاً هجيب برنامج البدالة، إذا تريد الخروج اضغط رقم
خمسة، في ايش بتعمل؟ بتقفل البرنامج، بتطلع منه، تمام، احنا
لحد الآن برامجنا ايش بيعمل فيها؟ بيشتغل لما يخلص الـ
code كله بيطلع، صح ولا لأ؟ مش هيك، احنا لما تكتب أنت
code بيشتغل جوا الـ main method، بنفذ الأوامر سطر
سطر لحد ما يخلص، لكن أحياناً أن أنت بدكِ يخلص عند
نقطة معينة، ما يكملش في تنفيذ البرنامج
يعني مثلاً طلع معايا هنا أنا
طلبنا من المستخدم يدخل عدد الساعات integer
hours = S.nextInt();
الآن if hours أقل
من 0، هذا
غلط، في حد اشتغل بالسالب ساعات؟ تمام، لأ، ممكن نقوله
system.out.println invalid number
of hours
طب طبعًا إيش المفروض أنه يقفل و تكمل يعني إذا ما كانش
غلط هيعمل شيء معين الآن ممكن يكون بعد ال if
statement في code ثاني تمام مثلًا ال code الثاني
يقوله مثلًا يعمل كمان مرة int number of children
عدد الأطفال بدي أقول له s.next m ثاني أطلب منه
يدخل عدد الأطفال أو هنا جايب لها كمان نقوله system
.out.println enter number of children الآن
يا جماعة هذا ال code اللي تحت موجود بعد ال if
statement صح ولا لأ يعني هو في الآخر هيطلب منك
تدخل عدد الساعات في الأول هيطلب منك تدخل عدد
الساعات وبعدين هيشتغل عليهم وبعدين هيروح يطلب
منك عدد الأبناء
الآن أنا مثلًا في البرنامج تبعي بدي لو هو دخل عدد
الساعات غلط يوقف هنا هنا في الوضع الطبيعي هيوقف مش
هيوقف يعني هو إيش هيعمل هيفحص ال if إذا كان
أصغر من صفر هيطبع لي invalid تمام أكبر من أي صفر
هينفذ ال else بعد ما يخلص ال if هينزل على اللي تحتي و ينفذه
في بعض الحالات أنه خلاص أنا بدي أنه نقطة معينة
المستخدم ما دخلش القيمة الصحيحة البرنامج ما نفعش
يكمل بدي أوقف البرنامج غصب عنه ما نفعش يكمل ال code
اللي تحت كيف؟ بتيجي أنت مثلًا هنا إذا كان عدد
الساعات خطأ ممكن تنفذ الأمر هذا system.exit و بين
القوسين نحط zero مثلًا system.exit يعني كأني بقوله وقف
البرنامج لأن كل اللي بعده كل اللي بعد exit ما له مش
هيتنفذ حتى ال else ما هو أصلًا هو مدام دخل على ال
if مستحيل يدخل على ال else صح ولا يعني هو أصلًا هذا
ال code هو الموجود جوا ال if مش هيروح لل else أصلًا
يعني تمام بس احنا بهمنّا اللي بعد هذا هذا ال code مش
هيتنفذ بالمرة لأن هنا إيش عملت له exit 0 لأن هاي
مثال مثلًا دخليه عدد الساعات لأن لو دخلت خمسة هيكمل
هيطلب مني number of children طبعًا هنا خلص البرنامج
ليش خلص لأنه انتهى تنفيذ كل الأوامر ووصل لنهاية ال
main لكن أنا مثلًا دخلت عدد الساعات
بالسالب سالب اثنين طبعًا ل invalid number of hours
وبعدين أنهى البرنامج هذا بتشبره أنه يخلص البرنامج
ما يكملش ال code اللي بعده كيف لأ
لها استخدام ثاني ال break تمام هذا
السطر طيب هذا الصفر احنا مش هنستخدمها بس هلّ يجئ ال
.. ال .. ال .. في ناس إيش بتعمل لما ينهي البرنامج
بدها تعرف إيش سبب الإنهاء تمام؟ هذا system.exit
أنت ممكن تحطه في أماكن مختلفة يعني مثلًا إذا دخل
عدد الساعات بالسالب خليه يطلع إذا صار error معين
خليه يطلع إذا ما فيش اتصال على الشبكة خليه يطلع ف
system.exit أنت هتعملها ممكن أكثر من مرة في التطبيق
تبعك طب الآن خلص البرنامج كيف بدك تعرف السبب اللي
وقف البرنامج عن طريقه عن طريق الرقم هذا فمثلًا أنا
لما أحط صفر معناه أنه البرنامج لما يخلص بيرجع لي
صفر تمام طبعًا احنا في طريقة إن أنت الرقم اللي
بيرجع ده تأخذه و تخزنه مثلًا في ملف log file مثلًا
عشان لما ترجع بعد هيك تعرف ليش البرنامج خلص لما
تلاقي صفر طبعًا هنا بتعرف أنه خلص ليش بسبب أنه عدد
الساعات بالثالث في مكان آخر مثلًا أنه لو فش اتصال
في الشبكة أو حصل error معين ممكن تحط هنا واحد وفي
مكان ثالث ممكن تحط اثنين وفي مكان وهكذا لكل سبب
ممكن تحط له رقم أنت طبعًا بتكون مسجل عندك أنه لو
رجع لو أنا لو خلص البرنامج ورجع الصفر بتعرف أنه
خلص بسبب عدد الساعات واضح بس هذا استخدام متقدم
نادر أنت هتحتاجه برجع لأنه برمجة إيش يحط تمام وهل
هيستفيد أصلًا من الرقم اللي برجع ولا لأ الفكرة هنا
كأنك بتقوله أنه أنهي البرنامج ورجع القيمة اللي
أنا بمرر لك إياه، هاي معناها دي عشان هيك احنا
بتجاوز عم نحط إيش صفر لإنه مش معناته إن نعرف إيش
السبب يعني السؤال كان هنا ممكن أنا أستخدم حدر
أكلّمتلي اللي زي هيك على ال system
هل وجدت أنك تطلب منه عدد الأبناء ممكن تضع هؤلاء
جميعهم في ال else
إلا لو ما تحققش الشرط اللي فوق ما هو إمتى بروح لل
else لو ما تحققش يعني كانت ال hours إيش أكبر من أو
يساوي صفر كلام سليم يعني أنا خلاص يعني إذا دخل جوا
ال if خليه يطبع invalid hours وما يعملش حاجة إذا
دخل جوا ال else يعمل باقي الشغل كله لكن في بعض
الحلقات لما يكبر البرنامج معك ممكن تضطر تستخدم ال
exit يعني مش في كل الحلقات أنت ال if و ال else
بتستكفي فيها يعني قدّ زميلكوا أنه خلاص إذا اتنفذ
الشرط نفذه بالذكاء ما تنفذش ما تعملش حاجة طبعًا ماشي
هذا بيمشي الحال بس افرض أنا عندك code بعد ال if
ما بديش هي تنفذ هذه الفكرة هذا ال code اللي تحت هذا
code برة ال if ما بديش هيتنفّى فخلاص بحط ال exit هذا
بيبقى الخيار يا جماعة الناس بتفكر طرق مختلفة ممكن أنت
تأخذ ال code هذا و تحطه جوا else هيك أنت حامد نفسك
ممكن تحطه برة ال if كلها و تحط exit ممكن يكون
فيه حاجات ثانية فأنا بس من باب العلم أنك لازم تعرف
أن في حاجة اسمها system.exit بتنهي البرنامج
البرنامج يمكن أن يتم إيقافه بشكل عادي باستخدام
system.exit 0 يمكن أن يتم إيقافه بشكل
عادي باستخدام system.exit الآن
هذه مثال حط ليها هذا شرط وهذا ال if statement if number
of winners you saw suffer system.out error
dividing by zero وإيش عمل هنا system.exit يعني أنهى
التطبيق else
نفس شيء معين حسبه معينة عمل هذه payoff على number
of winners بغض النظر ما هو ال code اللي هنا أنه هذا
system.exit هيطلع من البرنامج لو كان number of
winners يساوي صفر
طيب الآن بدأ أفسر شوية في ال boolean هذا الكلام
اللي احنا حاكينه يا جماعة إن الموجود ما بين
القوسين تاعة ال if مش شرط دائمًا يكون أكبر من أو
أصغر من أو يساوي صح أو لا ممكن يكون boolean أي
حاجة true أو false ممكن يكون أي method بترجع true
أو false صح أو لا مش احنا قبل المحاضرتين عملنا
مثال اللي هو ابحث عن كلمة في نص تمام؟ وحطينا داخل
ال if statement إيش؟ كلمة contains لأن contains
بترجع true أو false وحلينا برضه مثال اللي هو
يقارن ال password صح ولا؟ حطينا جوا ال if statement
dot equals وحليناها بطريقتين في الأول عملنا dot
equals وحطيناها في متغير من نوع Boolean وبعدين
حطينا المتغير جوا ال if تمام؟ وبعدين لأ حطينا
استدعاء ال method كله dot equals داخل ال if
statement لأن هنا مثلًا هذا if if system are okay
systems are okay إيش معنى if systems are okay هذا
Boolean هذا قيمته يا إيش يا true أو false جئنا لما
يكون فيه Boolean داخل if statement كأني بقول if
systems are okay يساوي يساوي true مش حاكينا الكلام
هذا يا جماعة يعني هذه اختصار لإيش if systems are
equal يساوي يساوي اه true the type Boolean is a
primitive type with only two values true or false
هذه عارفينها Boolean variables can make programs
more readable يعني هيك بيصير البرنامج تبقى أسهل
لما أقوله أحط داخل القسم Boolean variable
الآن بقول إن أنت ممكن تستخدم هذه بدل مين بدل هذه
الآن تطلع تطلع ال if statement هذه كم شرط فيها تمام
ثلاثة شروط إذا ال temperature أقل من أو يساوي مئة
and and threshold أكبر من أو يساوي اثني عشر ألف and and
كم من الـ pressure أكبر من أو ايش التلات شروط
حطهم كلهم داخل الـ F statement هو بيحكي لي ممكن تأخذ
التلات شروط هذول وتضع قيمتهم في مكان مختلف يعني
تعمل شيء زي هيك يا جماعة أنك
تعملها جذده أنك تعملها على سطرين يعني تروح تقول له
boolean systems
are okay ايش قيمته تكتب مين السطر اللي جواه كله
تقول له temperatureأصغر من أو يساوي 100 ثرست
أكبر من أو يساوي 11000 pressure أكبر
من أو يساوي 30 هذه التلات شروط هذول بيحط وين؟ في
الـ Boolean هذا هذول أصل قيمتهم ايش true or false
بحسب هذه وبجيب القيمة true or false وبحط القيمة
وين في المتغير هذا الآن بعد هيك بتقول له if systems
are okay بس لحالها حطها نفذ البديل يعني الفكرة
الآن احنا اتعودنا أن ممكن هذول كلهم تحطهم جوا الـ
F صح ولا وجربنا احنا مثلًا نحط أكثر من شرط داخل الـ
F بقول أنت ايش ممكن تعمل ممكن تأخذ الشروط كلها و
commit هم وتحطهم وين في متغير وبعدين تقول له F
المتغير اللي هو نوع Boolean هذا كأنني بقول F هذا
يساوي true نفذ هذا جذب هو بيخلي الـ code ايش
readable أكثر ومفهوم أكثر أيوة
لو حققت شرطين ولم يحققش شرطين بيعطينا true أو غلط
أو غلط أو غلط أو غلط أو غلط أو غلط أو غلط أو غلط
أو غلط أو غلط أو غلط أو غ
ونحن جربنا قبل هيك لما عملنا مثلًا الـ .. الـ
contains ولما استخدمنا equal to حطيت القيمة جوا
متغير وبعدين حطيت جوا الـ F المتغير واضح يا جماعة؟
precedence
rules ايش هي كلمة precedence؟ موضوع الأولويات هذا
احنا مش هنفصل فيه كثير يا جماعة بس احنا بنعرف
تعال طلع معايا لما يكون عندك شيء زي هيك
يعني هي بدها الشرح لأنها ممكن أنت تفهمها بالبديهة
if x أكبر من y زائد 3 and z أصغر
من y
ناقص 3 مد الأربعة
الآن احنا بنعرف أن أقوى أولويات طيب
وحط برضه ايش هنا تمام or
طلعوا معايا يا جماعة في مثال زي هيك أول حاجة أنت
بدك تحسب الـ bullying operations بعدين بتفكر في
مين؟ في الـ and والـ orيعني هذول بتأجلهم دائمًا ايش
للآخر خلص أول حاجة هذول الآن هنا أكيد كمان أنه
بده يعمل عمليات حسابية قبل ما يشوف ايش أكبر أو
أصغر يعني هاي هو اللي بيحكي لك هي أنه دائمًا أنت
الضرب خلص الضرب والقسمة والمد وبعدين الجمع و
الطرح تمام وبعدين حط الأكبر منه والأصغر منه و
الأكبر منه أو يساوي والأصغر منه أو يساوي ويساوي
يساوي وبعدين بتعمل الـ and والـ or هيك الترتيب
يعني فكأنه بيقول لك أنه أول حاجة اعمل عملية الحسابية
أكيد هنا طبعًا أنت بده يجمع الـ y زائد ثلاثة ويشوف
مين أكبر إذا الـ x أكبر من هذول الاثنين هذا بيكون
قيمتها الـ true طبعًا هذه الحاجة حتى لو أنا ما شرحت لكوش
إياها هتفهموها بالفطرة يعني احنا في صف ثاني
ابتدائي لما كانوا يحطونهم حط مثلًا خمسة زائد ثلاثة
بالعربي بتلاقي خمسة زائد ثلاثة تمام اثنين زائد ستة
الطفل اللي عقله هيروح ايش يعمل؟ هيروح يحسب هذه و
يحسب هذه وبعدين يحط ايش؟ اه الإشارة هذا نفس
الحاجة فأنت بتحسب هذه وبتحسب هذه لو في حسبة بعدين
تشوف الإشارة وتشوف ايش هي نتيجة true ولا false و
هذا نفس الحاجة تطلع هنا الآن بس في عندنا ناقص و
عندنا mod من هيعمل قبل؟ من أولوية أكبر؟ الـ mod
أكبر هيعمل الـ mod وبعدين هيعمل الطرح وبعدين
هيعمل هذه كلها وتكون قيمتها true؟ أو false وهذه
أيضًا قيمتها true أو false لأن بعد ما حسب كل binary
expression لحال بيجي بنفذ من الـ and والـ or
ما فيش أولوية للـ and على الـ or بس بنفذهم بالترتيب
طبعًا يعني مثلًا أول حاجة بيعمل بين أول اثنين من أول
اثنين هي هذه وهذه إذا هذه true وهذه true لازم
الاثنين يكونوا true عشان يطلع النتيجة true صار
هذول اثنين نتيجتهم true هيعملوا or مع مين؟ مع اللي
بعدهم إلا لو حطيت أقواس هيعمل عكس، غير هيك يعني
هنا ما فيش أقواس بينهم، هيمشي بالترتيب، هيمسك أول
اثنين يعمل بينهم and والناتج هيعملوا or مع مين؟ مع
هذا طبعًا كأنه .. كأنه هذا الشرط أنه لو تحققوا
الاثنين اللي في الأول خلاص بتحقق كل الشرط اه ملزمش
الثاني طبعًا لكن لو حطيت القوس زي هيك لازم في الأول
يعمل or لهذول وبعدين بعمل and معها واضحة تهدي يا
جماعة
خلاص هذا احنا قطناه لأن معلومة سريعة الـ Java أو كل
لغات البرمجة بتعتمد على تكنيك في حساب الـ F
statement يسموه short circuit evaluation ايش يعني
short circuit الدائرة المفتوحة باختصار شديد عشان
أشرح لك يعني لو أنا عندي شرطين هي
condition واحد وand condition اثنين هذا شرط وهذا
شرط
الآن لما ييجي يحسب مفروض مدام هذه and أن الاثنين
يكونوا true بقول لك هو لحاله لو لجأ أن هذا false
بيكملش عشان ما ياخذش وقت طبعًا هو لحاله ذكي الـ
compiler أنه بيحاول يوفر وقت كيف أنه لو لقى and و
حسب الشرط الأول لقى false في داعي يحسب الشرط
الثاني لأ نفس
الحاجة لو كان بينهم or
إذا وجد الأول صحيح فهناك داعي يكمل؟ ليس هناك داعي
يكمل هو أنت لازم يكمل؟ إذا وجد الأول صحيح فهناك
داعي يكمل؟ ليس هناك داعي يكمل؟ لو وجد الأول صحيح
يكمل؟ لو وجد الأول صحيح فهناك داعي يكمل؟ لو وجد
الأول صحيح فهناك داعي يكمل؟ لو وجد الأول صحيح
فهناك داعي يكمل؟ لو وجد الأول صحيح فهناك داعي
يكمل؟ لو وجد الأول صحيح فهناك داعي يكمل؟
لو وجد الأول صحيح فهof the boolean expression جزء
من الـ .. need to be evaluated ايش يعني evaluated
أنه يتقيم جزء من الـ boolean expression هو اللي
بيحتاج أقيمه أحسبه تمام
هنا أعطاني مثال if the first operand associated
with an or is true then the expression is true if
the first .. ايش ايش ايش ايش ايش ايش ايش ايش ايش
ايش ايش ايش ايش ايش ايش ايش ايش ايش ايش أيش أيش
أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش
أيش أيش أيش أيش أيش أيش أيش
أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش أيش
تمام؟ أكبر من وين الـ operands بتاعونها؟ هذا
operand وهذا operand فالـ operand هما الحاجات على
طرفي الرمز فهذا الكلام اللي حكيته في حالة الـ or
إذا كان أول واحد true خلاص الـ expression كلها
بتكون true الآن if the first operand associated
with and is false then the expression is false
this is called short circuit or lazy evaluation
ماشي ساعة هنا أعطاني مثال بقول short circuit
evaluation فهمني ايش أن short circuit evaluation
يا جماعة أن المعالج بيحتاج يفحص كل الشروط عشان يطلع
بنتيجة زي مثلًا لو كان or إذا كان الأول true خلاص
ما تكملش إذا كان and والأول false خلاص ما تكملش هاي
معناه short circuit evaluation هنا بقولي مثال
short circuit evaluation أحيانا بكون ضرورة ما أقدرش
أستغنى عنها تعالى شوف المثال هذا
if number لا يساوي صفر and sum على number أكبر من
خمسة إذا كان العدد ليس صفر وكان المجموع على العدد
أكبر من خمسة الآن سؤال بدون short circuit
evaluation لو قلنا تخيل إنه يعمل الشرطين مع بعض
كان ال number صفر تمام ال number كان بصفر هذا الشرط
هل الصفر لا يساوي صفر هو هنا هذا false هيكون لأ لو
فرضنا أنه بدي يمشي تمام هذا كانت نتيجة false إذا
كان ال number صفر صفر لا يساوي صفر هذا غلط false
طيب بعدين يجي أعمل sum على صفر هيطلع خطأ ال
computer بيطلع error لما يصير في عندي أي قسمة على
صفر
البرنامج هيعلق ويوقف معاه ويخرج منه لأنه قسم على
الـ 0 لكن باستخدام short circuit evaluation هو
نجاني من المشكلة هذه كيف؟ إذا أصلا أنا دخلت ال
number 0 ولم يتحقق الشرط هذه لن يكمل للبعد فال
short circuit evaluation هو يفحص جزء ويسب الأجزاء
التانية ممكن أن تتجنب عن طريقه مشاكل مثل هذه أنت
قبل أن تقسم، افحص ال number مو عشان يقسم لازم يكون
هذا ما قاله مش صفر إذا كان صفر أصلا مش هيكمل مش
هيفحص الشرط اللي بعده بس هذا إيش المقصود ..
المقصود فيه طيب خلاص اللي هذا مش همكمله خلاص
switch statement احنا شرحناها بالتفصيل يعني تمام؟
أعطوكوا العافية وهيك خلصنا احنا الشبطة يا جماعة