هل ممكن شرح لهذه الاكواد في لغة جافا

  • theh

السلام عليكم انا جديد في تعلم البرمجة واعرف بعض الاساسيات في الخوارزمية والجافا ,كما اني اعرف كيف احسب مثلا محيط الدائرة مثلا بطريقة بسيطة ,لكن وانا اتصفح النت وجدت طريقة بدت لي معقدة من حيث المصطلحات او الاكواد وخاصة importو try وcatch التي لا اعرف معناها ووظيفتها

هذا هو رابط البرنامج , هل من شرح مفصل وشكرا لكم مسبقا وجزاكم الله خيرا


مرحباً اخي theh

ساحاول الاجابة بتفصيل مبسط وقدر الامكان بختصر

الكود المشار إليه في الرابط

استخدام كلاس BufferedReader والكلاس InputStreamReader لقراءة البيانات من المستخدم عبر الكيبورد

ربما انت تعلمت فقط استخدام الكلاس Scanner لقراءة البيانات من السمتخدم عبر الكيبورد

على العموم الكلاس BufferedReader هو واحد من كلاسات عديدة يمكن استخدامها لقراءة البيانات سواء من المستخدم أو من ملفات

وهذين الكلاسين

InputStreamReader

BufferedReader

موجودان في مكتبة اسمها java.io

لذلك يجب استدعائهما عبر

import java.io.BufferedReader;

import java.io.InputStreamReader;

طبعاً عند استخدام BufferedReader للقراءة

فحينها يمكنا قراءة سطر كامل من المستخدم باستخدام المثد readLine وهذه المثد سوف ترد String

ومن هنا ففي الكود

يطلب من المستخدم ادخل نصف قطر الدائرة

ثم نقوم بمحاولة قراءة البيانات من المستخدم وتحويل البيانات المقروءة من سترنق إلى رقم

مبدأ المحاولة يمكن عمله باستخدام try

فالكود المكتوب بين حاصرتي try ستقوم الجافا بمحاولة تنفيذه

في حالة فشلت المحاولة لسبب ما

فستقوم الجافا بتنفيذ الكاتش المرتبط بالسبب

وفي الكود لدينا كاتشين

الكاتش الأول مرتبط بـ لو كان سبب فشل المحاولة هو أن المستخدم لم يدخل رقم صحيح

مثلا المستخدم ادخل كلمة aaaa

فحينها لن تتمكن الجافا من تحويل aaaa الى رقم عبر أمر التحويل

Integer.parseInt

الكاتش الثاني مرتبط بـ لو كان سبب فشل المحاول فشل الجافا من التواصل مع الكيبورد لقراءة البيانات منه

وهذا قد يحصل لو فيه مشكلة غريبة في نظام التشغيل سببت تعليق ما في الجهاز بحيث اصبح التواصل مع الكيبورد غير ممكن مثلا

والمهم هنا ان ال try و catch

تعني حاول تنفيذ الكود الموجود في try

فاذا فشلت فاعرف سبب الفشل ثم اذهب ونفذ الـكود الموجود في catch المناسبة

والـ try - catch مفيدة ومهمة جدا ويحتاج تتعمق فيها لكي تفهمها أنا فقط اعطيتك فكرة بسيطة عنها

وطبعا في حالات معينة يكون وجود الـ try و catch اختياري

وفي حالات يكون إلزامي ولا مفر منه الا باضافة شيء اسمه throws الى سطر تعريف المثد

طبعا في الكود المشار اليه في الرابط

طالما ان الكود استخدم المثد readLine السطر 22

وطالما ان المثد main ليس فيها throws

فيحنها استخدام try catch الزامي

لكن الكاتش الأول

من السطر 25 الى السطر 29 اختيارية وليست الزامية

والأمر يحتاج الى شيء من التفصيل والتوسع لتفهم لماذا ومتى تكون الـ try catch الزامية ولماذا ومتى تكون اختيارية

ملاحظة:- استخدام الكلاس Scanner في هكذا حالة أفضل وأسهل

وعند استخدام الكلاس Scanner للقراء من المستخدم فحينها ستكون try catch اختيارية

شكرا لك اخي على الشرح الرائع ,, لا اخفيك اني لم افهم جيدا ,فقط لان المرحلة متقدمة ويجب ان ادرسها قبل ان افهم الامثلة ,كما قلت انت انا اعرف فقط import scanner ,,, سابحث قليلا واعود لشرحك الرائع شكرا لك كثييييييييييييييييييييييييييييييرا

العفو ولا يهمك

ولا داعي للشكر يا طيب

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

ولكي أشرحها لك واضمن أن تفهم شرحي 100% أحتاج أعرف معلومات مفصلة عن مستواك في البرمجة واحتاج أن أعرف كيف تعلمت الجافا لكي استخدم المصطلحات نفسها التي تعودت عليها

على اية حال الـ try -catch سهل وليس صعب وهو مبدأ ليس خاص بالجافا بل موجود في معظم اللغات الأخرى وتقريبا كلها نفس الفكرة مع فوارق هامشية

والهدف منه هو التحكم بتصرف البرنامج لو حصل خطأ قاتل

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

وتخيل انك استخدمت الكلاس Scanner لقراءة الرقمين من المستخدم

فمثلا برنامجك بيطبع الرسالة التالية للمستخدك

Please Enter a first number

ونتخيل المستخدم ادخل

3

ثم البرنامج طبع

Please Enter a second number

ونتخيل المستخدم ادخل

2

فالبرنامج سيطبع

the sum is 5

فالبرنامج بسيط جدا

ومع ذلك برنامجك قد ينخرب ويعلق ويتقفل فجأءة اثناء التشغيل وقبل أن يطبع النتيجة

متى يحدث ذلك؟

لو أن المستخدم غبي مثلاً

فعندما البرنامج طلب من المستخدم الرقم الأول

المستخدم ادخل 4

لكن عندما طلب البرنامج الرقم الثاني

المستخدم الغبي ادخل كلمة lol

الان برنامج متوقع أن المستخدم محترم ويسمع الكلام وفعلاً بيدخل رقم لكن تفاجئ أن المستخدم غبي وادخل كلمة lol

حينها سيحصل crash للبرنامج أو توقف مفاجئ للبرنامج وسيتقفل البرنامج

فما الحل ؟

الجافا تعطي المبرمج حل للتعامل مع هذا المستخدم الغبي عن طريق استخدم try-catch

فباستخدام try-catch

نستطيع أن نخبر الجافا كيف تتصرف في حالة كان المستخدم غبي وادخل مدخلات خاطئة

فنستطيع نقول للجافا مثلا

لو المستخدم غبي وادخل كلمة بدل رقم

فاطبعي في الشاشة

wrong input

واعطي المستخدم الغبي فرصة جديدة لادخال رقم

please try again.. Enter a number

فهذه هي بالضبط فكرة try-catch بشكل مبسط

محبتي

شرحك بسيط اخي ورائع ,فهمت المعنى جيدا اشكرك مجددا

انا تعلمت عبر دورة في موقع رواق اخي لكن لم يتطرق لكل المصطلحات والاكواد وو لكن على العموم كانت بداية موفقة مع تلك الدورة