الدرس الخامس والعشرون - الأخطاء واقتناصها - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس الخامس والعشرون - الأخطاء واقتناصها (/showthread.php?tid=5619) |
الدرس الخامس والعشرون - الأخطاء واقتناصها - RaggiTech - 14-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته . سنتعرف في درس اليوم على الأخطاء وكيفية اقتناصها وتفاديها ، معاني رسائل الخطأ واشهر الاخطاء وخلافه ، ولكن قبل البداية نحتاج لإن نوضح أقسام الأخطاء التي تحصل في اي برنامج : 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://vb4arb.com/vb/showthread.php?1605 الدرس التالي للاخ محمد سامر سلو ، حول الاستثناءات والأخطاء : http://vb4arb.com/vb/showthread.php?803 يتبع ... الدرس الخامس والعشرون - الأخطاء واقتناصها - RaggiTech - 14-10-12 الكلاس System.Exception : الكلاس المختص في .net بالتعامل مع الأخطاء التي تحدث في النظام ، في الواقع فإن أي خطأ يرسل للنظام ثم يقوم النظام بارساله إلى ال CLR ، والذي بدوره يخول System.Exception للتعامل مع هذا الخطا ، محتويات هذا الكلاس بالشكل التالي : كود : [FONT=Tahoma]public class Exception : ISerializable, _Exception سنحاول التعرف على الخصائص والطرق الاساسية لهذا الكلاس : Message : رسالة الخطأ الحاصلة . Source : ملف الاسمبلي الذي قام بعمل throw لهذا الخطأ . HelpLink : تحتوي هذه الخاصية على رابط يشرح المشكلة ببعض التفصيل ، تستطيع الاستفادة منه كمبرمج وربما يستفيد منه المستخدم المتخصص في ال IT لنظامك . throw exceptions : خلال تنفيذك للبرنامج يمكن ان يقوم البرنامج بعمل throw لخطأ ما مثل عدم وجود ملف معين . سنتعلم كيفية قراءة هذا الخطأ والتعامل معه ، لكن تظل هناك حالة أخرى ترغب انت فيها بعمل throw للخطأ ، لنفترض انك تقوم بعمل check تتأكد من عدم وجود الملف ومن ثم تقوم بعرض رسالة خطأ في حالة عدم وجود الملف بالشكل التالي مثلاً : C#: كود : if (!System.IO.File.Exists("c:\\ahmed.txt")) vb.net: كود : If Not System.IO.File.Exists("c:\ahmed.txt") Then لكنك ربما لم تقم باقتناص خطأ كون الملف للقراءة فقط ، وترغب في صورة قنص اخطاء موحدة ، أو لأي اعتبارات أخرى ترغب في عمل throw للمبرمج مثلاً لو كنت تبرمج كلاس ليتم استخدامه . لأي من هذه الاعتبارات يمكن عمل throw لخطأ بالشكل التالي : c#: كود : if (!System.IO.File.Exists("c:\\ahmed.txt")) vb.net: كود : If Not System.IO.File.Exists("c:\ahmed.txt") Then هكذا تجد ان الفيجوال ستوديو قام باظهار خطأ بالرسالة التي اوضحتها ، تستطيع لاحقاً قراءة كائن الخطأ والتعامل معه كما تتعامل مع الخطأ الذي ينتج تلقائياً من الفيجوال بيسك . نواصل مع الدرس التالي : الدرس الخامس والعشرون - الأخطاء واقتناصها - RaggiTech - 14-10-12 catching exceptions : الآن جاء دور اقتناص الأخطاء ، ابسط طريقة هي باستخدام Try بحيث يخرج البرنامج من البلوك في حالة وجود الخطأ دون ان يتسبب في توقف البرنامج ، بالشكل التالي مثلاً : C#: كود : try Try كود : x += 100 يمكننا ايضاً عرض تفاصيل عن الخطأ الذي حدث باستخدام الخصائص السابقة : c#: كود : try كود : Try C#: try كود : { كود : Try الدرس الخامس والعشرون - الأخطاء واقتناصها - RaggiTech - 14-10-12 Finally : تستخدم للتنفيذ بعد نهاية البلوك try - catch ويتم تنفيذها في حالة وجود خطأ او عدمه ، فمثلاً لو كنا نرغب في طباعة نص ما بغض النظر عن حدوث خطأ في المتغير x من عدمه نكتب الكود التالي : C#: كود : try vb.net: كود : Try break : للخروج من الاستنثناء في مرحلة ما ، يمكن استخدام break أو Exit Try بالنسبة للفيجوال بيسك . الدرس الخامس والعشرون - الأخطاء واقتناصها - RaggiTech - 14-10-12 Target Site : توفر هذه الخاصية معلومات عديدة حول الكلاس والدالة التي قامت بعمل throw للخطأ ، يمكن الاستفادة منها في عمل Debug لمعرفة مكان حدوث الخطأ . HelpLink : تستطيع افادة مستخدم الكلاس أو المستخدم بها ، عن طريق وضع لينك معين يمكنه الاستفادة منه بالشكل التالي مثلاً : C#: كود : [FONT=Tahoma]try[/FONT] كود : [FONT=Tahoma]Try [/FONT] والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |