|
#1
|
||||
|
||||
الدرس الخامس والعشرون : الأخطاء واقتناصها .net 2008
بسم الله الرحمن الرحيم . السلام عليكم ورحمة الله وبركاته . سنتعرف في درس اليوم على الأخطاء وكيفية اقتناصها وتفاديها ، معاني رسائل الخطأ واشهر الاخطاء وخلافه ، ولكن قبل البداية نحتاج لإن نوضح أقسام الأخطاء التي تحصل في اي برنامج : Syntex Errors - الأخطاء النحوية : هذا النوع من الاخطاء هو الاسهل ، وفي Advanced Programming Environments مثل ال Visual Studio , netbeens ... etc ، يتم اكتشاف هذه الأخطاء فورياً ، مثال هذا الخطأ كتابة الجملة التالية : if x.Nome = somevalue بالطبع ستجد رسالة خطأ قبل التنفيذ تخبرك بأن الخاصية Nome غير موجودة ، مثل هذه الأخطاء هي الاسهل ويتم اكتشافها من خلال بيئة لغة البرمجة التي تعمل عليها ، وفي Visual Studio .net 2008 اصبحت رسائل الخطا واضحة للغاية ويمكن تفسيرها بسهولة وحلها بهذه الطريقة ، لكننا للاسف نجد الكثير من الاسئلة حول برامج لا تعمل بها خطأ واضح ، لماذا ؟ لا أدري Logical Errors - الأخطاء المنطقية : هذا النوع من الأخطاء هو الأصعب ، فعلى صعيد كتابة الكود ربما لا يوجد خطأ نحوي ولكنه خطا منطقي يظهر عند التنفيذ ، ابسط مثال على هذا الخطأ هو كتابة كود كالتالي : Byte x = 100000 طبعاً تعرف ان حدود النوع Byte اصغر من هذا الحد ، ولكن في الاصدارات القديمة لم يكن هذا ليظهر خطأ حيث ان الجملة مكتوبة نحوياً كما ترى . امثلة على هذا الخطأ اسناد قيمة ل object قبل عمل new له .. الخ . لكن مع اصدارات فيجوال ستوديو الجديدة ، اصبحت مثل هذه الأخطاء تظهر مباشرة ، بل ان هناك انواعاً اصعب من ال Logic Errors اصبح الفيجوال ستوديو قادر على اكتشافها على شكل warnnings . لن نذهب بعيداً ، سنبدأ بتقسيم ال Logical Errors وهي الأخطاء الأهم إلى ثلاثة أنواع اساسية : User Error : أخطاء تنتج من استخدام البرنامج ، لو افترضنا المثال السابق ل Byte نقوم فيه بتخزين عمر المستخدم ، لكن المستخدم قام بادخال رقم 10 الاف ، هذا الخطأ من المستخدم سيتسبب في المشاكل لك فيما لو لم تكن قد اضفت شرط التأكد من عدم تجاوز العمر لحد معين ، ايضاً ادخال بيانات نصية في خانة العمر وخلافه تندرج تحت اسم أخطاء المستخدم . Exceptions : النوع الأشهر من الأخطاء ، محاولة فتح ملف او قاعدة بيانات غير موجودة مثلاً حيث لم يتم تحميلها بصورة صحيحة ، محاولة قراءة بيانات من قاعدة البيانات في حين انها تساوي null بدون استخدام nullable type ، محاولة الكتابة إلى ملف نصي ReadOnly ، وخلافه من الأخطاء المشهورة . Bugs : اكثر الأخطاء شهرة ، لا يمكن حصرها ولا عدها ، وتوجد في جميع البرامج بما فيهم نسخة الويندوز التي تستخدمها ، في العادة لن يخلو برنامج منها ولكننا نحاول تفاديها قدر المستطاع ، قد تحدث بسبب نسيان حذف متغير او قراءة متغير من قيمة موجودة اصلاً في الذاكرة ونحن نظن انها قيمة فارغة ... الخ ، هذه الأخطاء قد لا تظهر ل 99% من المستخدمين ولكنا تظهر لمستخدم واحد فقط ، لذا في العادة تكون هناك عدة نسخ تجريبية من اي برنامج لمحاولة معرفة اماكن امثال هذه الأخطاء وتعديلها قبل طرح النسخة الرسمية . في درسنا هذا سنركز على النوع الثاني من الأخطاء وهو الأهم ، النوع الأول ايضاً سنحاول وضع استنثناءات من اجل التأكد من اختيارات المستخدم ولكن جمل التحقق هي الأهم في الحالة الأولى ، اما الحالة الثالثة فالتجربة المستمرة والمتابعة هي الوسيلة الأمثل لتقليلها . قبل ان ندخل في الدرس ، ربما ترغب في الاطلاع على الدرس التالي للاستاذ تركي العسيري - بعيداً عن انه للفيجوال بيسك 6 ولكنه يوضح معاني الأخطاء . http://vb4arab.com/vb/showthread.php?t=7 الدرس التالي للاخ محمد سامر سلو ، حول الاستثناءات والأخطاء : http://vb4arab.com/vb/showthread.php?t=6318 الكلاس System.Exception : الكلاس المختص في .net بالتعامل مع الأخطاء التي تحدث في النظام ، في الواقع فإن أي خطأ يرسل للنظام ثم يقوم النظام بارساله إلى ال CLR ، والذي بدوره يخول System.Exception للتعامل مع هذا الخطا ، محتويات هذا الكلاس بالشكل التالي : كود PHP:
Message : رسالة الخطأ الحاصلة . Source : ملف الاسمبلي الذي قام بعمل throw لهذا الخطأ . HelpLink : تحتوي هذه الخاصية على رابط يشرح المشكلة ببعض التفصيل ، تستطيع الاستفادة منه كمبرمج وربما يستفيد منه المستخدم المتخصص في ال IT لنظامك . throw exceptions : خلال تنفيذك للبرنامج يمكن ان يقوم البرنامج بعمل throw لخطأ ما مثل عدم وجود ملف معين . سنتعلم كيفية قراءة هذا الخطأ والتعامل معه ، لكن تظل هناك حالة أخرى ترغب انت فيها بعمل throw للخطأ ، لنفترض انك تقوم بعمل check تتأكد من عدم وجود الملف ومن ثم تقوم بعرض رسالة خطأ في حالة عدم وجود الملف بالشكل التالي مثلاً : C#: كود PHP:
كود PHP:
c#: كود PHP:
كود PHP:
نواصل مع الدرس التالي : catching exceptions : الآن جاء دور اقتناص الأخطاء ، ابسط طريقة هي باستخدام Try بحيث يخرج البرنامج من البلوك في حالة وجود الخطأ دون ان يتسبب في توقف البرنامج ، بالشكل التالي مثلاً : C#: كود PHP:
كود PHP:
يمكننا ايضاً عرض تفاصيل عن الخطأ الذي حدث باستخدام الخصائص السابقة : c#: كود PHP:
كود PHP:
C#: كود PHP:
كود PHP:
تستخدم للتنفيذ بعد نهاية البلوك try - catch ويتم تنفيذها في حالة وجود خطأ او عدمه ، فمثلاً لو كنا نرغب في طباعة نص ما بغض النظر عن حدوث خطأ في المتغير x من عدمه نكتب الكود التالي : C#: كود PHP:
كود PHP:
للخروج من الاستنثناء في مرحلة ما ، يمكن استخدام break أو Exit Try بالنسبة للفيجوال بيسك . Target Site : توفر هذه الخاصية معلومات عديدة حول الكلاس والدالة التي قامت بعمل throw للخطأ ، يمكن الاستفادة منها في عمل Debug لمعرفة مكان حدوث الخطأ . HelpLink : تستطيع افادة مستخدم الكلاس أو المستخدم بها ، عن طريق وضع لينك معين يمكنه الاستفادة منه بالشكل التالي مثلاً : C#: كود PHP:
كود PHP:
والله الموفق ... والسلام عليكم ورحمة الله وبركاته .
|
#2
|
||||
|
||||
|
|
|
المواضيع المتشابهه | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
الدرس الأول : تحميل .net 2008 ومميزات استخدامه | khaledbelal | دورة .NET 2008 من منتدى فيجوال بيسك للعرب | 5 | 03-11-2012 03:42 PM |
الدرس الخامس ( في أدب المرء مع ربه – سبحانه ) | ابو تسنيم | روضة العقيدة | 2 | 09-08-2010 06:13 PM |
الدرس الخامس عشر : التعرف على Static دورة .net 2008 | khaledbelal | دورة .NET 2008 من منتدى فيجوال بيسك للعرب | 0 | 02-19-2010 08:05 PM |
الدرس الخامس : الأنواع والدوال الرئيسية .net 2008 | khaledbelal | دورة .NET 2008 من منتدى فيجوال بيسك للعرب | 0 | 02-16-2010 03:24 AM |
الدرس الثاني : تقنيات جديدة مع .net 2008 | khaledbelal | دورة .NET 2008 من منتدى فيجوال بيسك للعرب | 0 | 02-15-2010 03:37 AM |