[0:00]بسم الله الرحمن الرحيم. في هذا الفيديو رح نتكلم عن اهم موضوع مر علينا لغايه الان، موضوع رح نكرره في المستقبل، راح تواجهه في كل لغات البرمجه اللي بتتعلمها، راح نتكلم عن ال Methods او ما يعرف بال Functions او احيانا ما يعرف بال Operations. راح تلاقي اكثر من اسم، لكن اشهر اسمين اللي هم ال Methods او ال Functions. خلينا نمشي خطوه بخطوه لنفهم شو الفائده من ال Functions وليش هو من اهم المواضيع اللي راح نتعامل معه كمبرمجين. في الواقع احنا بنشرح راح يسهل علينا الفهم. على فرض كان في عندنا مجموعه بال Statements مثلا، Statements بتطبع عندي مجموعه من الاسماء، مثلا احمد، مثلا علي، محمد، بلال، الى اخره. اذا اجينا ننفذ هاي الجمل رح ينفذوا وامورنا رح تكون طيبه، لكن ممكن اني وانا ماشي في ال Program بحتاج اني اعيد استخدام طباعه هذول الاسطر. فبمكان معين في هذا البرنامج ممكن اني احتاج اطبع هاي الاسطر كمان مره، فرح اروح اخدهم Copy وراح اروح اعمل Paste وراح يتنفذوا معي هذول الاسطر. وممكن اني احتاجه اكثر من مره، مش شرط مرتين ممكن مثلا ثلاث مرات اني احتاج هاي الاسطر، فرح اروح اعمل Copy و Paste. لاحظ الكود صار عندنا نوعا ما كبير واحنا طابعين نفس الكلام. هل يا ترى في طريقه ان نخزن فيها الجمل هذول ولما نحتاجهم نستدعيهم من دون ما نكبر هذا الكود؟ فهون راح تظهر الحاجه لما يسمى ال Functions او ال Methods. بيحكي لك بدل ما انت تكتب الاسطر هذول ك Copy Paste تحت بعض، لا بتاخذ الاسطر اللي بدك تطبعها، خزنها ب Block معين. خزن هاي الاسطر وهذا ال Block اعطيه اسم معين، مثلا Print، ولما تحتاج انت هذا ال Block انت ما عليك الا تروح على ال Main وتستدعي اسم هذا ال Block. لما تستدعي اسم هذا ال Block راح يروح ينفذ لك الاربع اسطر اللي داخله. طيب، على فرض انا حبيت استدعيهم كمان مره، راح استدعي اسم ال Block وهذا ال Block راح يروح يستدعي لي الاربع اسطر اللي انا كنت بدي اطبعهم بدل ما اني اكررهم Copy Paste. انو افضل وارتب؟ اكيد اني اضع هاي الجمل داخل Block واستدعيها داخل ال Main راح يكون افضل. هاي الميزه بنسميها ال Reusability. هاي الميزه مفادها اني بكتب كود هذا الكود يكون Reuse. ايش يعني Reuse؟ يعني ممكن هاي ال Function استخدمها في اكثر من مكان وراح نعرف كيف نخلي هاي ال Function Dynamic انها مش شرط تطبع لي نفس الاسماء ممكن انه هذول الاسماء نخليهم اسماء لاشخاص اخرين عند لحظه استدعاء هذا ال Function. لكن مبدئيا احنا بنتحدث عن فوائد ال Functions. طيب شو ال Syntax الخاص بال Functions؟ لاحظ معطيني Error، ليش؟ لانه انا بتحدث انا وياك لسه لغايه الان ما كتبنا ال Syntax الخاص بال Functions او ال Method. بحكي لك ال Syntax الخاص بال Functions او ال Method راح يتكون من ثلاث خطوات او من Three Steps على اساس نكون احنا ال Functions. اول مكون لل Functions واللي هو ال Return Value Type، سواء كان Integer او Float او Double او Boolean او String، اي Data Type. وبعد ال Data Type مباشره بيجي اسم لهذا ال Function والاسم القواعد في تسميته نفس قواعد تسميه ال Variables. يعني انا ممكن اسمي ال Function Fun ممكن اسميه X ممكن اسميه Y، لكن قواعد كتابه ال Functions المفروض ما يبلش برقم ما يكون في بيناتهم Space اكيد هاي القواعد انت حافظها. طيب، انا وياك بدنا نكتب Function هذا ال Function راح يقوم بعمليه طباعه فقط، يعني مش بحاجه يكون اله نوع Integer او Float او Double وراح نعرف شو الفرق بيناتهم. اذا كان ال Function اللي عندنا ما بجري اي عمليه حسابيه راح يكون ال Return Value Type اله Void، يعني ما برجع قيمه وراح نفهم حاليا ايش يعني ما برجع قيمه. فاول شي احنا بنحدد ال Return Value Type بعد ما نحدد ال Return Value Type بدنا نعطي اسم لهذا ال Function، مثلا بدنا نسميه Fun وراح نفتح قوس ونسكر قوس. وبهيك احنا انهينا اول جزء من كتابه ال Functions واللي هو ال Prototype Of Functions او Of Methods، احنا انهينا ما يسمى بال Prototype. ثاني خطوه من انشاء ال Functions اني اروح احجز له Body او Block Of Code، اكيد هذا ال Function راح ينفذ جزء معين. ايش راح ينفذ هذا ال Function؟ راح ينفذ الاربع اسطر اللي اتفقنا عليهم اللي بده يطبعوا لي الاسماء. وفعليا هذا ال Body راح يحتوي Declarations و Statement معينه سواء كانت تعريف متغيرات او جمل Loops او جمل Selection راح يحتوي اي سطر من الكود. وبهيك احنا بنكون انشأنا ال Function. ولاحظ احنا تحدثنا انه في خطوه ثالثه المفروض تكون خاصه بال Functions الخطوه الثالثه والاخيره راح تكون عمليه الاستدعاء او ال Call او ال Invoking الخاص بال Functions. احنا انشأنا ال Functions، اذا رحنا عملنا Run لاحظ ما راح ينطبع عنا شي. ليش ما راح ينطبع؟ لانه احنا ما استدعينا هذا ال Function. ممكن يكون في عندي مجموعه من ال Functions، لكن حاليا مش بحاجه اني استدعيهم او استدعيت البعض منهم اللي بدي اياك تفهمه انه ال Functions لا ينفذ الا عند استدعاؤه. طيب، نيجي نستدعي هذا ال Function كيف بدنا نستدعي هذا ال Function؟ ال Function يتم استدعاؤه عن طريق اسمه اني اقول له مثلا Fun وافتح قوس واسكر قوس بالاضافه ل SemiColon. في هاي الخطوه البسيطه انا استدعيت ال Function. ولاحظ ممكن في ناس تغلط وتروح تضيف ال Return Value Type قبل ال Function. في هاي الحاله انت ما بدك تنشئ Function، لا، انت انشأت ال Function وخلصت لكن بدك تستدعيه. يعني زي مثلا لما اجي اعرف متغير اقول مثلا Integer X واعطيه قيمه انه تساوي مثلا 15 واجي بدي استدعي هذا المتغير في جمله طباعه راح اقول له مباشره South واطبع قيمه ال X. ما راح اجي مباشره اقول Integer X كمان مره، لا راح اطبع قيمه ال X مباشره. ونفس الشي لل Functions ما في داعي تكتب ال Return Value Type لانه اذا كتبتها راح يعطيك Syntax Error. لكن بيضل عنا Error موجود. شو مفاد هذا ال Error؟ هذا ال Error مفاده انه اي Functions انت بدك تبنيها وبدك تستدعيها في ال Main المفروض تستدعيها عن طريق Object. ايش يعني عن طريق Object؟ ما بدي تفكر في هاي التفاصيل، لكن اللي بدي اياك تعرفه انه اي Function على اساس اني انا استدعيه واموره تكون طيبه لازم اسبقه بكلمه Static. ليش كتبنا كلمه Static؟ كتبنا كلمه Static على اساس نكون قادرين ان نستدعي هذا ال Function من دون وساطه Object. وان شاء الله رح نتحدث ايش يعني Object وايش يعني Classes في المستوى الثاني بعد هذا المستوى ان شاء الله. لكن حاليا اللي بدي اياك تعرفه انك تكتب كلمه Static مع كل Function. وراح توجد بعض مبرمجين كاتبين كلمه Public قبل ال Functions. ايش معنى كلمه Public؟ اني ممكن اقدر استدعي هذا ال Function من اي File داخل هذا ال Package. اكيد ما راح يكون في عندي Class واحد في البرنامج، راح يكون في عندي اكثر من Class وممكن اني احتاج ال Function هاي ب Class اخر غير ال Class اللي انا موجود فيه حاليا. على شان هيك بنضيف كلمه Public لكن ما بدي اياك تعطيها اهميه في هاي المرحله، خلينا على كلمه Static. طيب، بعد ما عملنا Call لل Function نروح نعمل Run ونشوف شو ال Output. راح يطبع احمد وعلي ومحمد وبلال. طيب، على فرض حبيت انا اطبع هاي الجمل كمان مره، هل في داعي ناخذهم Copy Paste؟ لا فقط ما علي اني استدعي ال Functions كمان مره واعمل Run من جديد راح يروح يعمل Call او راح يروح يستدعي هذا ال Function كمان مره وراح يطبع الاربع اسماء من جديد. فعليا شو اللي بصير هون بالزبط؟ اللي بصير كالاتي، احنا اتفقنا انه ال Compiler بنفذ Sequentially. Sequentially من وين؟ Sequentially من عند ال Main. ال Main وجد استدعاء ل Functions. راح يطلع يدور على هذا ال Function. هذا ال Function ممكن يكون مكتوب ما قبل ال Main وممكن اني امسكه Cut واكتبه ما بعد ال Main، ما في مشكله. فراح يدور هل في عندي Function اسمه Fun؟ اذا وجده راح يستدعيه والامور راح تكون طيبه. اذا ما وجده راح يعطيك Syntax Error انه هذا ال Function Undefined مش موجود. طيب، ممتاز. لما يطلع عند هذا ال Function راح يروح ينفذ ما بداخل هذا ال Function واللي هم الاربع اسطر اللي احنا متفقين عليهم. وهذا ابسط Function ممكن احنا ناخذه. خلينا نمسح هذا ال Function ونروح نفكر في حال طلبت منك برنامج، هذا البرنامج بدي اياه يعرف رقمين صحيحات. وبعد ما يعرف هذول الرقمين بدي اياه يطبع المجموع الخاص فيهم. فانت في الوضع الطبيعي كنت راح تروح تعرف متغيرين تسميهم مثلا N1, N2 وكنت راح تعطيهم قيمه مباشره او تروح تاخذهم ب ال Scanner عن طريق ال User. فخلينا نعطي قيمهم مباشره مثلا احكي له انه ال N1 تساوي مثلا 10 و ال N2 مثلا تساوي 5. واذا بدنا نطبع مجموع الرقمين هذول ممكن في ناس تحكي لنا روح عرف متغير ثالث اسمه Sum وخليه Equal ال N1 زائد ال N2. وبعد هيك بعد ما صار معنا المجموع ممكن ان نطبع نقول له مثلا انه ال Sum Equal قيمه ال Sum. نعمل Run راح يعطيني انه قيمه ال Sum 15 كونه 10 + 5 = 15. لكن في حال احنا بدنا نجمع اكثر من مره. يعني طلبت منك بدنا مجموع رقمين جداد بيحكي لي ممكن انه انا اعيد تنفيذ هذول الاربع اسطر كمان مره واما اني اعرف متغيرات جداد. او ممكن اني بدل ما اعرف متغيرات جداد نفس القيم اعدلهم اني اقول مثلا انه ال N1 تساوي قيمه جديده وال N2 تساوي قيمه جديده واجمعهم بعديها اطبعهم. لكن على اساس نخلي الامور Reusable اكثر المفروض انا نروح نخزنهم داخل Function. وهذا ال Function المفروض اخليه Dynamic مش Static انه خلص انه انا اعطي القيم مره واحده لهدول المتغيرين اروح اطبعهم. ممكن اني اخذ Input من ال User، ممكن اني اباسي القيم ك Static، عشان هيك لازم نستفيد من ال Functions اللي لحد الان راح يعطينا ميزتين، الميزه الاولى انه خلى الامور More Reusable وراح يخلي الامور More Dynamic. طيب، كيف بدنا نعرف هذا ال Function؟ احنا اتفقنا انه ال Functions يكتب فوق ال Main او تحت ال Main. خلينا نكتبه فوق ال Main. اول شي كلمه Static احنا متفقين عليها خليها على جنب. ما بعد كلمه Static لازم يكون ال Return Value Type. لاحظ انا بدي اجمع رقمين وهذول الرقمين صحيحات، فال Return Value Type اللي انا متوقعه، هل راح يكون Character ولا Float ولا Double؟ اكيد ال Return Value Type اللي انا متوقعه راح يكون Integer. فقبل ما انشئ ال Function راح اسال حالي، هل هذا ال Function راح يرجع قيمه معينه؟ هل راح يرجع قيمه Expression معين؟ سواء كان هذا ال Expression في جمع او طرح او قسمه راح اسال شو الناتج من هذا ال Expression؟ هل راح يرجع لي Integer ولا راح يرجع لي Float ولا راح يرجع لي Double؟ في حالتنا هون هذا ال Expression الخاص بجمع رقمين رجع لنا قيمه Integer، معناته راح اتوقع انه ال Return Value Type لهذا ال Function المفروض تكون Integer. وبعد هيك راح اعطي اسم لهذا ال Function، فبدي اسميه مثلا Sum Two Numbers. ولاحظ الاسماء مهمه جدا جدا بغض النظر عن طول هذا الاسم، لكن المفروض انه يكون هذا الاسم معبر على اساس اذا مبرمج ثاني اجى ماسك الكود تبعك تكون عنده الامور مفهومه 100%. ويا سلام اذا انت كنت ضايف Documentation بسيط على كل Functions، يعني مثلا تخبر المبرمج اللي بده يمسك الكود من وراك وتقول له مثلا انه This Function to Calculate Sum of Two Numbers او الاصح ان نقول له مثلا Function to Calculate Sum of Two Numbers ك Message توضيحه للمبرمج اللي بده يمسك الكود من وراي. لانه اكيد احنا بنشتغل ازا Team، قليل جدا من المشاريع بيكون ماسكها شخص بحد ذاته وحتى اذا كان ماسكها المفروض بس يجي يقرا الكود هذا كمان مره يفهم انه هاي ال Functions اللي كان كاتبها شو الغرض منها. طيب بعد ما كتبنا اسم هاي ال Function المفروض زي ما اتفقنا نفتح قوس ونسكر قوس، لكن هاي الاقواس مش دائما المفروض انها تكون فارغه ممكن اني ابعث لها Parameters. ايش يعني Parameters؟ يعني مجموعه من المتغيرات. انا هون بدي اجمع رقمين، فالمفروض اجي ابعت هون بين الاقواس رقمين ليتم عليهم عمليه الجمع. طيب، الرقمين هذول شو نوعهم؟ نوعهم Integer فالمفروض اني اقول Integer مثلا N1 و Integer N2. ولاحظ هذول الرقمين اللي راح تتم عليهم عمليه الجمع. طيب، هذا الجزء ايش سميناه؟ سميناه ال Prototype الخاص بال Function، وهذا عباره عن اول جزء.
[11:22]ثاني جزء واللي هو ال Body الخاص بهذا ال Function. والمفروض حتى كتابتنا في الكود تكون ملصقه شوي، فلاحظ ظللتهم كبست على Tab على اساس تكون الامور اسهل في عمليه القراءه. فانت هون المفروض اذا كتبت مجموعه من الاسطر راعي انه في Tab موجود. يعني ما تكتب اصل الكود الخاص فيك داخل ال Function في هاي الطريقه، لا على اساس اني انا اعرف انه هذول الاسطر داخل هذا ال Function، ظللهم ومش غلط لو كبست Tab على اساس اني افهم انه هذول الاسطر داخل هذا ال Function. اكيد انت حاليا شايف هذا الموضوع مش مهم، لكن لما تشتغل بشركه ان شاء الله او تكون ضمن فريق راح تكون هاي الاشياء جدا مهمه. طيب، شو ال Body الخاص بال Functions؟ المفروض اني انا اجمع هذول الرقمين اللي هم N1 و N2. وراح احكي له مباشره N1 + N2 واحكي له SemiColon. لكن زي ما انت ملاحظ انا بعد ما اجمع هذول الرقمين ممكن اني اخزنهم في متغير ثالث يمثل ال Sum، مثلا نقول له Integer Sum Equal هذول الرقمين. واذا انت ملاحظ اخر شي في ال Function عند ال Right Curly Brackets الخاصه بال Function معطيني Error. شو مفاد هذا ال Error؟ مفاده Missing Return Statement. ايش معناته هذا السطر؟ معناته انه لازم يكون في عندي Return Statement. ليش؟ ما قبل شوي انا كتبت الاسطر وطبعت الاسماء سواء كانت احمد او محمد من دون كلمه Return. شو هاي كلمه ال Return؟ اه، هون اذا انا حددت ال Return Value Type سواء كان Integer او Float او Double او اي Data Type ما عدا ال Void اللي شفناه قبل شوي انت الزامي المفروض يكون في عندك قيمه راجعه. يعني المفروض اكتب Return للقيمه الراجعه او لقيمه العمليه الحسابيه اللي انا اجريتها. شو هي القيمه؟ القيمه اللي هي عباره عن جمع الرقمين، فراح اقول له Return لل Sum بالاضافه ل SemiColon. والناس اللي ذاكرتها شوي قويه راح يتذكر انه ال Return هي احد انواع ال Branching Statement اللي اخذناها قبل هيك واجلنا الحديث عليها اذا بتتذكر وقلت لك ان شاء الله راح تكون موجوده داخل ال Function. هذا هو النوع الثالث من ال Branching Statement واللي هو ال Return Statement. وبعد هيك انا بكون انتهيت من بناء هذا ال Function وصرت جاهز اني اعمل اخر خطوه واللي هي اني استدعي هذا ال Function. راح اجي هون واقول له الاسطر هاي خلاص ما في داعي لك وراح اروح استدعي Function ال Sum اني اقول له Sum Two Numbers وراح ابعت له الرقمين اللي انا بدي اجمعهم مثلا بدي ابعت له 5.5 بالاضافه ل SemiColon وهون Sum مش Sun ونشوف ايش اللي راح يصير بالزبط. لاحظ اذا عملنا Run ما راح يتنفذ او ما راح ينطبع اي شي. المفروض يطبع لي ال Sum. على اساس يطبع لي ال Sum المفروض اني احكي له South لقيمه هذا ال Function كامل او لاستدعاء هذا ال Function. لما نعمل Run في هاي الحاله راح يروح يطبع لي 10. طيب، ايش اللي صار هون بالزبط؟ اللي صار بالزبط كالاتي. ال Compiler لما شاف استدعاء ل Function ال Sum، Function ال Sum راح يستقبل رقمين. اذا اجيت انا بعثت له رقم واحد وسكتت راح يعطيني Error. ليش Error؟ لانه بقول لك وانت بتنشئ هذا ال Function، انت حاكي لي انه هذا ال Function المفروض يستقبل رقمين او Two Parameters. فانا مجبر اني ابعت له Two Parameters فراح ابعت له 5 و 5. اذا اجيت بعثت له Parameter ثالث على سبيل المثال راح يعطيني Error. ليش؟ لانه راح يحكي لي هذا ال Function يستقبل Two Parameters فقط. فالمفروض اني اتقيد بشو انا حجزت هذا ال Functions. طيب، ايش اللي صار هون بالزبط؟ اللي صار كالاتي: اول ما انت تستدعي Function ال Sum، راح يمسك الخمسه هاي اللي انت بعتها ك Parameter اول وراح اروح اعوضها مكان ال N1 وراح يمسك الخمسه الثانيه وراح اروح اعوضها مكان ال N2. فال N1 راح تصير قيمتها 5 و ال N2 ب 5. ايش اللي راح يصير؟ اللي راح يصير كالاتي، راح يجمع قيمه ال N1 بال N2. طيب، كم قيمه ال N1؟ 5. وكم قيمه ال N2؟ برضه 5. راح يروح يخزنهم داخل ال Sum لتصير القيمه كم؟ لتصير القيمه ب 10. وبعد هيك راح يروح يعمل Return لل Sum. يعني زي كانه حكى بالظبط Return ل 10. طيب هل انا ممكن اقول له مباشره هيك Return ل 10؟ اه ممكن اني ارجع اي رقم بدي اياه.
[15:10]لكن على اساس تكون الامور Dynamic، المفروض اني اقول له Return لل Sum. بتحكي لي انت حكيت اكثر من مره Dynamic Dynamic، شو يعني Dynamic؟ اه، Dynamic اني انا ممكن لما استدعي ال Function هذا كمان مره بدل ما اكون بعثت له قيمه 5 و 5 لا مثلا بدي ابعت له قيمه 10 و 25 على سبيل المثال. هذا اللي انا بقصده انه الامور تكون Dynamic. انا مش مقيد انه القيم تكون 5 و 5 او تكون القيم 10، ممكن اني انا ادخل اي قيم بدي اياها وعلى اساس تكون Dynamic اكثر المفروض اني انا اطلب القيم هذول من ال User مش انت كمبرمجه اللي تدخلهم. اذا عملنا Run من جديد ونشوف شو ال Output، راح يروح يطبع لي 10 وبعد هيك راح يطبع لي 35. طيب، ممكن في ناس تحكي لي ليش انت هون في ال Function معرف متغير ثالث اسمه Sum وعامل Return لل Sum؟ طب هل ممكن مباشره تعمل Return ل N1 زائد N2؟ يعني تقول في هذا الشكل Return ل N1 زائد N2 بالاضافه ل SemiColon، هل بينفع؟ اكيد بينفع. انت وانت بتكتب كود بتشوف اذا في Task معينه انت ممكن تنجزها بالاستغناء عن Variables اضافيه انجزها مش شرط انك تحجز Variable ثالث على اساس يقوم لك في هاي الوظيفه فانت دائما حاول انك تقلل من ال Space. ومن اسطر الكود اللي بتكتبها. الشغله الثانيه اللي بدي اياك تعرفها انه هذا ال Functions مش شرط اني اروح اطبعه مباشره. احنا اتفقنا انه ال Functions ما راح يتنفذ اذا كان اله Return Value Type ما راح تنطبع قيمه ال Return Value Type، ما راح تنطبع. لكن ممكن اني اجي اطبع جمله طباعه هون اقول له مثلا South طبع لي مثلا كلمه Sum ونيجي نعمل Run، لاحظ راح تنطبع قيمه ال Sum، لكن ال Return Value Type هاي القيمه اللي انا عاملها Return متى راح تنطبع؟ هاي القيمه راح يرجعها ال Function. طيب، لما يرجعها المفروض انا استقبلها. بستقبلها بطريقتين: يا اما بستقبلها طباعه مباشره يا انا ممكن اني اعرف متغير مثلا اسميه S واحكي له انه يساوي هذا ال Function. فالقيمه الراجعه تخزنت داخل ال Variable اللي اسمه S. فانا ممكن اني اجي اقول له South لقيمه ال S واقول له انها Equal قيمه ال S. قيمه ال S حاليا داخلها صار مجموع ال 5 مع ال 5 يعني 10. اذا عملنا Run من جديد، راح يطبع لي انه قيمه ال S تساوي 10. لكن السؤال اللي اكيد اجى على بالك: انا ليش اصلا اخزنها بمتغير؟ خلص مباشره انا اروح استدعي Function ال Sum عند ال Print وبلا منها تخزين القيمه للمتغير اللي اسمه S. بقول لك اه هون افرض انه في Function بيحسب لك ال Average تمام؟ مثلا بيحسب ال Average الخاص فيك وكان ال Average الخاص فيك لماده ال Java على سبيل المثال 98. وباقي الشعبه كانت امورها متدهوره في الماده. يعني في ناس جايبه 50، في ناس راسبه لا سمح الله، في ناس علامتها مش ولا بد، فاجى مثلا الدكتور وحكى في علامتين زياده للجميع، هذول العلامتين المفروض ينضافوا اليك، فراح يكون في Function هذا ال Function راح يكون حاسب ال Average وقيمه ال Average مخزنه بمتغير. هسه انا ممكن بعد ما اخذ هذا ال Average اروح اقول له مثلا انه خلاص خلي لي القيمه اللي رجعت من ال Average زيد لي عليها كامله علامتين، فهون لما نيجي نطبع ال S على المثال اللي عنا هون بدل ما انه يطبع 10 لا راح يروح يطبع 12 كونه احنا زدنا 2. فلما نروح نعمل Run، راح يروح يطبع لي انه ال S 12 مش 10. مثال ال Average ان شاء الله راح نسويه بالفيديو الجاي، لكن حاليا بدي اياك تعرف ليش احنا ممكن نخزن القيمه الراجعه داخل متغير على اساس فيما بعد نستفيد فيه بغض النظر بدنا نزيد علامتين. ممكن بدنا نخصم ما حدا بيعرف اكيد حسب ال Case اللي بتواجهك. طيب، اخر شي بدي انبهك عليه في هذا الفيديو في حال كان ال Return Value Type بدل Integer Void. لاحظ ال Void ما بترجع قيمه. ايش يعني ما ترجع قيمه؟ يعني لا بتقدر تعمل Return لا ل Integer ولا ل Float ولا ل Double ولا ل String ولا لاي Data Type، يعني كلمه Return مع Value ما راح تكون موجوده اصلا، فرح نروح نعملها Comment. فممكن اني بدل ما اروح ارجع قيمه اقول له مثلا انه قيمه ال Sum مباشره Equal وافتح قوس واسكر قوس اقول له مثلا N1 زائد N2. ولاحظ لو نزلت تحت على ال Main بتلاقي عمليه الاسناد معطيه Error. ليش Error؟ لانه لاحظ اذا قرأت بحكي لك Incompatible Types: Void cannot be converted to Int. يعني انت ما بتقدر تخزن Function ال Return Value Type اله Void داخل المتغير Integer.
[19:09]المفروض انه يكون هذا ال Function برجع Integer. فاول شي بدنا نتفق عليه انه اي Function ال Return Value Type اله Void ما بقدر انا اخزنه داخل متغير. وبما اني ما بقدر اخزنه داخل متغير برضه بنفس الوقت ما بقدر اني اروح اطبعه. يعني ما بقدر اني اروح اخذ هذا ال Function Copy وداخل ال System.out.print اني اروح استدعي هذا ال Function، هذا الكلام مرفوض. طيب، هذا ال Function شو الغايات منه؟ هذا ال Function زي ما انت شايف مباشره انا بدي اخذ منه قيمتين هذول القيمتين بدي اطبعهم على ال Screen مباشره. ما بدي اخزنهم في متغير ولا بدي اعطي علامتين للطلاب ولا شي، مباشره بس بدي اطبع هذول الرقمين، معناته هذا ال Function مستحيل انه يعمل Return لقيمه معينه، لكن المش مستحيل انه يمكن يحتوي على جمله Return لكن من دون اي قيمه. ايش يعني Return من دون اي قيمه؟ على فرض كان في عندي اكثر من Statement وحبيت اني انفذ هاي ال Statement، اول ما يشوف كلمه Return راح يتوقف اداء هذا ال Function ما راح ينفذ الاسطر اللي تحتيه مباشره. ولاحظ هون معطيني Error. ليش معطيني Error؟ بقول لي Unreachable Statement، هو مش قادر انه يوصلهم بعد ال Return. فمتى هاي ال Case ممكن تلزمني؟ ممكن انا لو كنت داخل هذا ال Function وبدي احكي له في جمله If بسيطه If ال N1 بالاضافه لل N2 كانت مثلا قيمه ال N1 Equal Equal 0 و ال N2 Equal Equal 0 في هاي الحاله ما بدي اياك تطبع لي اي كلام، بدي اياك تعمل Return مباشره. في هاي الحاله اللي راح يصير كالاتي: اذا انا دخلت له رقمين ب 0 راح يعمل Return. ايش يعني راح يعمل Return؟ يعني راح يوقف اداء هذا ال Functions مباشره ما في عندي قيمه راجعه. واذا اجيت حطيت قيمه راجعه راح يعطيني مباشره Error. اللي صار اني فقط عملت ايقاف لهذا ال Functions. خلينا نجرب مثلا نبعت رقمين ب 0، مثلا 0 الرقم الاول، الرقم الثاني ب 0. وبعد هيك نعمل Run. لاحظ ما في شي انطبع. لكن في حال مثلا طبعنا قلنا له 1 وقلنا له مثلا 5 مع Run، راح يروح يطبع لي انه ال Sum 6. لاحظ انا متاكد انه الموضوع شوي راح تحسه جديد عليك وراح تحس الامور صعبه، لكن صدقا اي مبرمج في بدايه هذا الموضوع بالذات راح يكون حاسس نفس شعورك، لكن مع التطبيق والتكرار والامثله اللي راح ناخذها باذن الله راح تكون الامور اسهل واسهل. واخر شي كلمه Function او Methods الفرق بيناتهم انه Methods هي عباره عن اي Function داخل Class. لاحظ هاي ال Function تواجدت داخل Class، لهيك بصير اسمها Method. في لغات اخرى ممكن ال Function مش موجوده داخل Class، لهيك بسموها Function، اما بال Java كل سطر انت بتكتبه لازم يكون Within Class. يعني في حال انت جربت هذا ال Function بتعمل له Cut وتروح بدك تعمل له Declaration خارج ال Class ما راح يزبط. كل شي بال Java داخل Class. لهيك المتعارف عليه انا نطلق بدل مصطلح Function، لا، نطلق مصطلح Methods. واللي بدي اياك تعرفه انه البرنامج او اي مشكله انت بتواجهها راح تكون عباره عن مشكله كبيره او برنامج كبير انت راح تقسمها لاجزاء صغيره لتجمع هاي الاجزاء وبالاخر تطلع بال Solution. هاي الاجزاء اللي بنقسمها بنسميها ال Functions او ال Methods. راح نقسم ال Program الكبير تبعنا او المشكله اللي بتواجهنا الكبيره لنجمع هذول ال Functions على بعض ونطلع بال Solution. حتى في الحياه العمليه اذا كنت شغال انت و Team على نفس ال Project اكيد راح تتوزع مجموعه من ال Tasks عليك انت وافراد الفريق اللي انت منضم معهم. فكل Task ممكن تشبهها انها Function راح تؤدي وظيفه لغرض معين. وبالتالي لما تيجي تفتح على ال Program وتقرأه راح تلاقي كل عمليه وكل جزء موجود في ال Program تبعك موجود ب Function منفصل. اذا بدنا نعطي امثله مثلا Function يحسب رواتب، Function اخر يحسب علامات، فرح تلاقي نفسك لما تكون بدك تعدل على جزء معين من الكود انت ما راح يكون الكود الخاص فيك موجود كله في ال Main ويلا ال Compiler ماشي Sequentially ونفذ. لا كل شيء راح تلاقيه داخل Functions وال Main راح تكون شبه خاليه، راح يكون فيها استدعاء ل Function واحد على سبيل المثال، وهذا ال Function ممكن انه يكون داخله عده Methods او Function. بعتذر على الاطاله في هذا الفيديو وكميه المعلومات اللي ممكن مره واحده انت بدك تستوعبها، لكن اولا عن اخر ان شاء الله راح توصلك كامله. الله يعطيكم الف عافيه نشوفكم بامثله اضافيه على هذا الموضوع السلام عليكم.
![Thumbnail for #018 [JAVA] - Method / Function Part 1 by Adel Nasim](/_next/image?url=https%3A%2F%2Fimg.youtube.com%2Fvi%2FizzJtoZnbHY%2Fhqdefault.jpg&w=3840&q=75)


