‫مرحبًا بعودتك.
‫في هذا الفيديو ، سنصلح أخيرًا المشكلات التي واجهتنا في برنامجنا هنا ، برنامجنا الافتراضي
‫الذي أنشأناه.
‫وسننظر أيضًا في البرمجة الدفاعية.
‫لذا فإن فكرة البرمجة الدفاعية هي إنشاء كود آمن يفكر بالفعل في المشاكل التي يمكن أن تنشأ ، لأنه في هذه الحالة ، فإن المشاكل
‫التي يمكن أن تنشأ هي ، على سبيل المثال ، القائمة فارغة ، أو نريد أن يكون
‫لدينا الكثير من الأصدقاء ، لذلك نريد دعوة أصدقاء أكثر مما لدينا.
‫وفي هذه الحالة ، القائمة بسيطة للغاية أنشأناها يدويًا.
‫لكن تخيل أنها من قاعدة بيانات.
‫إذن فهي تأتي من قاعدة بيانات أو تأتي من الويب أو من قاعدة بيانات سحابية أو شيء من هذا القبيل.
‫وبعد ذلك ستكون قصة مختلفة تمامًا لأننا لن نعرف أبدًا حجم القائمة في هذه الحالة.
‫يمكننا رؤيته في الكود ، لكننا قد لا نعرفه اعتمادًا على مصدره.
‫في هذه الحالة ، علينا أن نتوقع المشاكل المختلفة التي يمكن أن تنشأ ويمكننا اختبارها بأنفسنا
‫عند تطويرها.
‫على سبيل المثال ، لقد فعلنا ذلك بالفعل ، أليس كذلك؟
‫لقد أدخلنا المزيد من الأصدقاء الذين لدينا في القائمة.
‫لذا فهي بسيطة.
‫نقوم فقط بتشغيل هذا ثم نحصل على هذه الوسيطة خارج نطاق الاستثناء.
‫لكن المكان الذي نحصل عليه هو أمر مثير للاهتمام.
‫لذلك نحن نحصل عليه عند نقطة طريقة مختلفة get party لدينا على الرغم من أن المشكلة تكمن في مكان
‫آخر.
‫لأنه إذا نظرنا إليها ، فستجد أن أقصر قائمة أسماء هي صفر.
‫لذلك نحن نحاول الوصول إلى عنصر قائمة غير متاح لأننا تجاوزنا القائمة ، واحصل على صديق للحفلة
‫وقمنا بتمرير هذه القائمة هنا.
‫لذلك إذا نظرنا إلى المكان الذي حصلنا منه على هذه القائمة ، فقد تكون هذه نقطة انطلاق جيدة لأننا نرى هنا
‫أننا نحاول الوصول إلى شيء غير متاح.
‫إذن ما هي مشكلة ما هو متاح؟
‫حتى نتمكن من إلقاء نظرة على هذا الخط هنا ، الحصول على صديق الحفلة.
‫هذا هو المكان الذي يطلق عليه.
‫ويمكننا أن نرى.
‫حسنًا ، هذا هو المخزن المؤقت.
‫حق؟
‫لذلك نحصل على مخزن مؤقت ، وهو هذه القائمة هنا.
‫إذن ما نحصل عليه هو قائمة من المستوى الأعلى.
‫مرة أخرى ، يمكننا أن نرى ، حسنًا ، لدينا قائمة فلان وكذا ، الكثير من الناس ، وهذا هو المكان
‫الذي نحصل فيه على القيمة.
‫حسنًا ، هناك نقطة جيدة للتحقق مما إذا كانت القائمة جيدة في طريقة Get Party Friends لأننا هنا نحصل على القائمة
‫، بشكل صحيح.
‫في هذه المرحلة ، لدينا قائمة حتى نتمكن من التحقق من هذه القائمة.
‫يمكننا أن نرى ما إذا كانت هذه القائمة جيدة بما يكفي لما نريد القيام به.
‫وما نريد القيام به هو كتابة شيء ما بناءً على حساب العناصر في تلك
‫القائمة حتى نتمكن من التحقق مما إذا كان العدد أكبر من عدد نقاط القائمة.
‫وهذه هي القائمة التي تم تمريرها إلينا.
‫إذا كان الأمر كذلك ، فما يمكننا فعله هو أنه يمكننا فقط طباعة شيء ما ، أو عدم القيام بذلك أو الخطأ أو شيء من هذا
‫القبيل.
‫ولكن الشيء الأفضل الذي يمكننا القيام به هو أنه يمكننا جعل البرنامج يتعطل.
‫لذلك نحن نعلم أن البرنامج به مشكلة ، ولكن في نفس الوقت ، نوقف البرنامج عن التنفيذ في مرحلة مبكرة جدًا لأننا
‫نتخيل أن لدينا اتصالًا بقاعدة بيانات ، والآن نقوم بإنشاء كل هذه الأخطاء المختلفة أو نحن مجرد
‫المرور من خلال الكود وهذه الطريقة يتم تشغيل صديق الحفلة ودعنا نقول أنه متصل بقاعدة البيانات
‫ويكتب شيئًا ما في قاعدة البيانات ثم نقوم بتشغيل الكود مرة أخرى.
‫ولسبب ما تغيرت حالة قاعدة البيانات ونحن الآن نذهل لأن البيانات التي يتم عرضها
‫علينا هراء كامل ولا يمكننا التعامل معها.
‫لذا فإن إصلاح هذا الخطأ سيكون مشكلة حقيقية.
‫حسنا.
‫لذلك يمكننا بالفعل التقاطها في أقرب وقت ممكن حتى نتمكن من طرح وسيطة خارج النطاق الاستثناء هنا.
‫لذا تخلص من الحجة الجديدة خارج النطاق الاستثنائي لأن هذا هو ما كنا نحققه بشكل صحيح.
‫والحجة الخارجة عن الاستثناء لها أعباء زائدة متعددة.
‫لذلك يمكننا الحصول على هذا هنا مع اسم المعلمة.
‫يمكن أن يكون لدينا رسالة مع استثناء أو اسم معلمة مع رسالة.
‫لذا يمكنني هنا أن أقول شيئًا مثل ، حسنًا ، العدد هو المشكلة ولا يمكن أن يكون العدد أكبر من العناصر الموجودة
‫في القائمة أو شيء من هذا القبيل.
‫لذلك سيكون هذا مثالاً لما يمكننا عرضه.
‫لذلك دعونا نعيد تشغيله مرة أخرى لأننا الآن يجب أن نكون قادرين بالفعل على اكتشاف هذا الخطأ أو على الأقل طرح وسيطة خارج نطاق
‫الاستثناء بمجرد حصولنا على هذا الخطأ.
‫حسنا.
‫لذلك يمكننا أن نرى الاستثناء عند معالجته ، حيث يقول إن وسيطة النظام خارج النطاق لا يمكن أن
‫تكون أكبر من العناصر الموجودة في عدد معلمات القائمة.
‫إذن هذه هي نتيجة ما كتبناه هنا.
‫إذن هكذا سيبدو الاستثناء.
‫حتى الآن نحن نعرف ما هي المشكلة.
‫إنه أكثر تعبيرًا قليلاً.
‫قبل ذلك مباشرة لم تكن المشكلة هنا في الواقع.
‫لذا اسمحوا لي أن أعلق هذين السطرين.
‫لم يتم طرح المشكلة في هذه المرحلة ، ولكن تم طرحها أكثر.
‫تم طرحه في طريقة الحصول على مختلفة.
‫إذن فهو في السطر 42.
‫لكن المشكلة الفعلية نشأت في وقت سابق كثيرًا.
‫الصحيح.
‫وكان الفهرس خارج النطاق الاستثناء.
‫هذا أيضًا بيان عام جدًا ، صحيح.
‫يمكن أن يكون أي شيء.
‫الصحيح.
‫لذا فإن اكتشافه مسبقًا يساعدنا على معرفة مكان المشاكل التي لدينا.
‫إذن ما يمكننا فعله بالطبع هو أنه يمكننا القول ، حسنًا ، بمجرد إدخال هذه القيمة
‫ودعنا نقول أن هذه القيمة تأتي من مستخدم يدخل قيمة ، أليس كذلك؟
‫لذا يمكنك إدخال أي قيمة من الصفر إلى كمية عناصر القائمة التي لدينا.
‫حتى نتمكن من التقاطها حتى قبل ذلك.
‫يمكننا إجراء اختبار حتى هنا.
‫حتى إذا.
‫أصدقاء.
‫عدد النقاط هو.
‫أقل من القيمة التي ندخلها هنا ، ويمكننا الحصول على هذه القيمة مرة أخرى من المستخدم.
‫ثم يمكننا أن نعطيهم رسالة ، أليس كذلك؟
‫لن نرمي استثناءنا.
‫لن نجعل برنامجنا يتعطل.
‫نطلب فقط من المستخدم إدخال قيمة جديدة.
‫لكننا لا نقوم بذلك هنا لأننا كمبرمج يمكننا إدخال القيمة هنا ونفرض هذه الأخطاء يدويًا
‫الآن.
‫الصحيح.
‫إذن فهذه طريقة لحلها أو في الواقع طريقة واحدة للقبض عليها مبكرًا.
‫الآن ، دعنا نقول.
‫نقوم بإدخال قيمة غبية هنا ، مثل ناقص واحد.
‫حسنًا ، لنقم بتشغيله مرة أخرى.
‫في الواقع ، لنقم بتشغيله مرة أخرى.
‫ويبدو أن برنامجنا يعمل ، لكنه لا يظهر أي شيء هناك.
‫لذلك لم تظهر أي.
‫لم ينتج عن الأخطاء أي أخطاء ، لكنها لا تظهر أي أصدقاء.
‫حسنًا ، يبدو أن برنامجنا يعمل مع ناقص واحد لأننا نحاول الحصول على عناصر قائمة ناقص
‫واحدة من قائمتنا ، حسنًا ، لا يقدم لنا أي معلومات قيمة.
‫والآن ما يمكننا فعله بالطبع هو إضافة شرط آخر هنا.
‫يجب أن يكون العدد أكبر يساوي صفرًا.
‫إذا لم يكن الأمر كذلك ، فيمكننا كتابة شيء مثل لا يمكن أن يكون المدعو أكبر من العناصر
‫الموجودة في القائمة أو الصفر السفلي.
‫لذا فهذه مجرد طريقة واحدة للتعبير عنها.
‫والآن إذا قمنا بتشغيله مرة أخرى ، فسنلقي بهذا الخطأ.
‫هذا شيء لم يرمي فيه البرنامج سهمًا من قبل ، لكننا الآن كمطور فهمنا ، حسنًا ، هذه حالة
‫لا نريد أن تكون لدينا.
‫هذا موقف لا نريد العمل معه.
‫وكما قلت ، سنقطع جيدًا ، سنحاول الحصول على هذه القيمة من مكان ما وسنحاول التقاطها
‫حتى قبل ذلك.
‫الآن ، لنفترض أن لدينا موقفًا أكثر تسلية.
‫لذلك لدينا وضع تكون فيه قائمة أصدقائي فارغة.
‫لذلك سأقوم بإنشاء قائمة فارغة هنا.
‫مثل ، الآن سيتم التعليق على هذا والآن لدينا هذه القائمة الفارغة.
‫لنقم بتشغيله مرة أخرى ونرى ما إذا كان برنامجنا لا يزال يعمل.
‫والآن ما زلنا نحصل على السعة خارج نطاق الاستثناء.
‫هذا رائع جدًا.
‫لذلك يبدو أن الاستثناء الذي أنشأناه هنا يعمل على إصلاح هذه المشكلة حتى لا نضطر إلى البحث يدويًا
‫في شكل القائمة على الرغم من أنها فارغة ، أليس كذلك؟
‫لذلك إذا نظرنا إلى قائمة أصدقائنا ، نجد أن قائمة أصدقائنا فارغة ، لكن في النهاية نحصل على عدد صفر.
‫لذلك على الرغم من أن القائمة فارغة ، إلا أن القائمة لا تزال صفرية.
‫إذن فالقيمة التي نحصل عليها هناك لا تزال صفرًا.
‫لكن هذا ليس كل ما يمكننا فعله فعلاً لاغية.
‫لذا فبدلاً من تمرير فرنسا مع فرنسا وهي هذه القائمة الفارغة ، يمكننا في الواقع تمرير قيمة فارغة هنا.
‫لذلك لنفترض أنه لسبب ما لم نتمكن من إنشاء هذه القائمة لأن اتصال قاعدة البيانات لم يعمل أو
‫شيء من هذا القبيل ، وحصلنا على قيمة خالية نتيجة لذلك ، ونحن الآن نمرر قيمة خالية ونحاول تمرير
‫قيمة فارغة إلى طريقة في الواقع يتطلب قائمة.
‫لذلك دعونا نديرها ونرى نوع الخطأ الذي حصلنا عليه هذه المرة.
‫حتى الآن نحصل على مرجع كائن استثناء مرجعي فارغ لم يتم تعيينه على مثيل لقائمة كائنات كان فارغًا.
‫إذن القائمة التي مررناها الآن هي الآن.
‫لذلك حصلنا على هذا الخطأ حتى قبل أن نتمكن من إلقاء خطأ.
‫لذا ما يمكننا فعله بالطبع هو أن نلاحظ هذا الموقف أيضًا.
‫لذا يمكننا المضي قدمًا وكتابة بيان if آخر.
‫إذا كانت القائمة فارغة ، فقم بإلقاء مؤشر فارغ.
‫استثناء يرمي حجة جديدة.
‫استثناء NULL.
‫حتى قائمة.
‫القائمة فارغة.
‫حسنا.
‫بالطبع ، يمكنك أن تكون أكثر وصفيًا هنا بدلاً من أن لا تكون القائمة فارغة.
‫يرجى التحقق من اتصال الإنترنت أو شيء من هذا القبيل.
‫يمكن أن يكون اتصال الإنترنت أو أي مكان تحصل منه على بياناتك.
‫لذلك دعونا نديرها مرة أخرى.
‫والآن يجب أن نطرح حجتنا الآن استثناء.
‫كما ترى ، فإن القائمة عبارة عن قائمة معلمات فارغة.
‫في احسن الاحوال.
‫حسنا.
‫الآن ، قد تتساءل ، لماذا نفعل كل هذا؟
‫لا أريد أن يتعطل برنامجي طوال الوقت.
‫حسنًا ، نقوم بذلك حتى لا يدخل برنامجنا في الحالة التي قد يغير فيها شيئًا ما في قاعدة البيانات.
‫نحن لا نغير أي شيء في قاعدة البيانات ، في برنامجنا الصغير.
‫لكن تخيل أن الأمر سيكون كذلك حينها.
‫إنه وضع مختلف تمامًا ويمكننا أن نخلق بعض المشاكل الخطيرة هنا.
‫الآن ، أريد أن أريكم شيئًا أخيرًا ، لأنه قبل أن يكون لدينا كل هذا ، أليس كذلك؟
‫لذا قبل أن يكون لدينا هذا البيان وهذا البيان وما إلى ذلك ، وقبل أن يكون لدينا قائمة الأصدقاء
‫هذه.
‫نعم ، يمكنني التوقف في الواقع.
‫أه ، قبل أن يكون لدينا هؤلاء الأصدقاء هنا ، وقد مررنا بالأصدقاء هناك ، ثم نحاول أن يكون لدينا عشرة أصدقاء في حفلتنا
‫، لكن ليس لدينا سوى سبعة أصدقاء.
‫لذا في هذه الحالة ، بمجرد تشغيل هذا ، يمكننا أن نفعل ذلك هو أنه يمكننا فرض هذا الخطأ الذي كان لدينا وكان الخطأ في صديقنا
‫الخاص بالحفل.
‫لذلك حصلنا على هذه الوسيطة خارج النطاق ، وكان مؤشر الاستثناء خارج النطاق.
‫هذه مشكلة كانت لدينا قبل أن نصلحها.
‫الصحيح.
‫ولكن الشيء المثير للاهتمام الآن الذي يمكننا النظر إليه هو مكدس المكالمات.
‫لذلك هناك شيء يسمى مكدس الاستدعاء.
‫واسمحوا لي أن أجعلها أكبر قليلاً هنا.
‫في الواقع ، اسمحوا لي أن أغلق كل هؤلاء.
‫لنلق نظرة الآن على مكدس الاستدعاءات هذا.
‫يقول مكدس الاستدعاءات هذا أننا موجودون حاليًا في السطر 46.
‫حسنا.
‫هذا هو المكان الذي نحن فيه.
‫لذلك نحن في طريقة get party friend.
‫الآن ، إذا ذهبنا خطوة واحدة للأعلى ، يمكننا أن نرى أن هذا هو المكان الذي تم استدعاء طريقة صديق الحفلة فيه.
‫نحن الآن داخل طريقة جمع أصدقاء الحفلة.
‫وماذا لو كنت تريد معرفة مكان تسمية هذه الطريقة؟
‫حسنًا ، تم استدعاؤه في السطر 13.
‫لذلك مع مكدس الاستدعاءات ، يمكننا أن نرى من حيث تم استدعاؤنا ، ومن أين تم استدعاؤنا مرة أخرى وما إلى ذلك.
‫حتى نتمكن من الصعود إلى المستوى الذي كانت تسمى عنده الطريقة الأولية.
‫وكانت الطريقة الأولية هي الحصول على أصدقاء الحفلة.
‫ثم نذهب إلى هذه الحلقة البرية ، ثم حصلنا على اسم get party friend ، ثم ندخل
‫في هذه الطريقة هنا ثم أخيرًا يتم إنشاء المتغير بناءً على قائمة فارغة.
‫حسنًا ، أتمنى أن يكون هذا قد أعطاك مقدمة بسيطة عن تصحيح الأخطاء.
‫بالطبع ، هناك الكثير لتعرفه ، لكنني لا أريد أن أتحمل كل التفاصيل
‫لأن بعض الأشياء مفيدة ، لكن الكثير منها لن يكون مطلوبًا في حياتك اليومية.
‫لأنه ، أعني ، بشكل عام ، يمكنك بالطبع المضي قدمًا والانتقال إلى تصحيح الأخطاء ثم التحقق من جميع النوافذ
‫المختلفة التي يمكنك الوصول إليها هنا ويمكنك النظر في المواضيع التي
‫تعمل وتوازي العمليات وما إلى ذلك .
‫لكني أعتقد أن ما رأيته الآن سيكون حقًا الأشياء الرئيسية أو سيكون الأشياء الرئيسية
‫التي ستحتاجها ، الأدوات الرئيسية التي ستحتاجها من أجل تصحيح
‫برنامجك.
‫حسنا.
‫لذا أتمنى أن تكون قد استمتعت بهذا وأتمنى أن تستفيد من ذلك في برامجك المستقبلية.
‫والآن يمكنك أن ترى أخيرًا كيف يتم حل تصحيح الأخطاء.
‫وبالمناسبة ، نشكرك على تقديم هذه التعليقات لأنني تلقيت التعليقات بأن قسم تصحيح الأخطاء
‫مفقود ، لذلك قررت إنشاء هذا القسم الصغير.
‫لذا شكرا جزيلا على ردود الفعل.
‫إذا كان لديك أي شيء تعتقد أنه مفقود في هذه الدورة التدريبية أو إذا كنت تعتقد أن هناك
‫شيئًا سيئًا للغاية ، فالرجاء عدم إعطائي تقييمًا سيئًا بشكل مباشر ، ولكن أخبرني بما هو عليه حتى أتمكن من تحسين
‫الدورة لأن هدفي هو لجعل هذا أفضل مسار C-حاد في السوق.
‫لذا شكرًا جزيلاً على مساعدتك وآمل أن أراك في الفيديو التالي.