هوش مصنوعی-برنامه نویسی 8- ابراهیم خلیلی

هوش مصنوعی-برنامه نویسی 7- ابراهیم خلیلی هوش مصنوعی-برنامه نویسی 7- ابراهیم خلیلی

هوش مصنوعی-برنامه نویسی 8- ابراهیم خلیلی

سلام به همه بچه‌های علاقمند به کامپیوتر و برنامه‌نویسی و هوش مصنوعی. همانطور که میدونین روز به روز دنیای هوش مصنوعی داره وسیعتر میشه و به حوزه مختلف از علوم راه یافته است. ما تصمیم داریم هر هفته با یک مقاله در این حوزه، شمارو با رویداد های دنیای هوش مصنوعی آشنا کنیم و مهمتر اینکه ریاضیات این حوزه رو با ساده سازی به شما دانش آموزان عزیز کانونی توضیح بدیم. در نهایت بتونیم قدم به قدم به کد نویسی در محیط پایتون برای مسئله های جذاب هوش مصنوعی برسیم. پیشنهاد میکنم هر هفته مارو با یک مقاله در این حوزه دنبال کنید. 

 این هفته باهاتون هستیم تا درباره خطاها براتون حرف بزنیم. البته نه خطای شما بلکه خطا در کدنویسی! ما در این سری مطالب مروری میکنیم بر مفاهیم بنیادی برنامه‌نویسی در فضای پایتون. این مرور برای هر کسی که با این حوزه آشنایی لازم رو نداره ضروریه. پس مطالب ما رو دنبال بکنید تا بعد از گذراندن این پیش‌نیازها با همدیگه کدنویسی در فضای پایتون رو تجربه کنیم.

وقتی کدی می‌نویسیم که کار نمی‌کنه چه اتفاقی میفته؟ به عبارت دیگه در روند کدنویسی کی با خطا مواجه میشیم و علت اصلی اونها چیه؟

زمانی که کد می‌نویسید همه چه اونطور که دلخواه شماست پیش نمیره و برنامه طبق انتظار شما شروع به کار نمیکنه. به این حالت بروز خطا (Error) میشه گفت. از اونجا که شما در برنامه‌نویسی با این حالت بسیار روبرو خواهید شد بهتره که یه درکی از اون داشته باشید تا طریقه‌ی درست مواجه با اونها رو یاد بگیرید.

هوش مصنوعی-برنامه نویسی 8- ابراهیم خلیلی

اولاً واژه تکنیکال در برنامه‌نویسی برای اشاره به خطاها باگ (Bug) هست و دوماً ما میتونیم خطاهارو در زبان‌های برنامه‌نویسی به سه دسته تقسیم بکنیم: خطاهای نحوی (Syntax errors)، خطاهای حینِ اجرا (Runtime errors) و خطاهای منطقی (Logic errors).

خطاهای نحوی

این دسته از خطاها به راحتی قابلیت حل شدن دارن چرا که میشه اونارو در کسری از ثانیه برطرف کرد. اگه یادتون باشه در مطلبی که درباره نحو (syntax) برنامه‌نویسی براتون صحبت کردیم گفتیم که اگر قواعد یک زبان برنامه‌نویسی رو بشکنید یا نحو خاص اون رو رعایت نکنید با خطا مواجه خواهید شد. این همون خطای نحوی هست. وقتی در روند کدنویسی یه چیزی جا میندازید یا اضافی مینویسید کامپیوتر گیج میشه و نمیدونه که چجوری باید کد رو اجرا کنه. این خطا میتونه فراموش کردن یه نقطه ویرگول (;) ساده در آخر جمله‌تون باشه یا ایجاد یک متغیر با دو واژه به جای یک واژه یا حتی یه خطای املایی ساده در رشته‌تون.

این خطاها خیلی راحت وفع شدنی‌ان. تنها چیزی که لازمه اینه که جای خطا رو پیدا کنید و بفهمید چه قاعده نحوی رو رعایت نکردید. IDE رو به خاطر بیارید. یکی از فواید اصلی IDEها این بود که براتون خطایابی میکرد. اونا زیر خطاهاتون خط میکشن و معمولاً سرنخ‌های مفیدی برای رفع خطا بهتون ارائه میدن. خطاها نحوی رو غلطهای املایی یا خطاهای گرامری در یک مقاله در نظر بگیرید. کلافه کننده هستن نه؟ یه فایده دیگه‌ی IDE در باب خطاهای نحوی اینه که قبل از رخ دادن خطا این برنامه شما رو از اجرای برنامه منع میکنه تا وقتی که همه خطاهای سینتکسی رو رفع بکنید

خطاهای حینِ اجرا

این خطاها تا وقتی که کدتون رو اجرا نکردید خودشون رو نشون نمیدن. از این رو بهشون میگیم خطاهایی که حین اجرا رخ میدن. این خطا رو معمولاً جمله‌ای در کدتون پدید میاره که به نظر منطقی میاد اما کامپیوتر نمیتونه اونارو تو یک زمان ممکن پردازش کنه. رایج‌ترین نوع این خطا حلقه نامتناهی هست. برای فهم حلقه نامتنهای میریم سراغ یه مثال ساده. فرض کنید دوستتون رو میشونید جلوی تلوزیون و سریال آفیس رو براش نمایش میدید و بهش میگید هر وقت مایکل جک «That’s what she said» رو تعریف کرد میتونه فیلم رو ول کنه و بره. اما به جای آفیس فیلم friends رو اجرا میکنید. اتفاقی که میفته اینه که دوست شما باید تا آخر عمرش بشینه جلوی تلوزیون و منتظر مایکل و جکش باشه.

این اتفاقیه که تو کامپیوتر میفته. شما بهش یه شرطی میدید که باید پیش از اینکه برنامه تموم بشه کامل بکنه. اما هیچ راه عملی برای تموم کردن اون وظیفه (Task) بهش نمیدید. این کار کامپیوتر رو در حالت خطا قرار میده و در آخر برنامه شما رو کرش (Crash) میکنه. اجازه بدید مثالمون رو تکنیکال‌تر بکنیم. مثلاً برنامه‌ای داریم که میخواییم اینطوری تموم بشه: وقتی int i دیگه بزرگتر از 99 نباشه ولی خودِ i مساوی با 100 باشه، حلقه‌مون دیگه تمومی نخواهد داشت. 

 

برای پیشگیری از این خطا لازمه که حواستون به روند کدتون باشه مخصوصاً به حلقه‌هاتون و مطمئن بشید که همه جملاتتون رو کامپیوتر میتونه اجرا بکنه. سعی کنید کدی رو که میخوایید بنویسید به صورت طرحی در ذهنتون داشته باشید، این راه کمک میکنه که خطاهای مثل خطای حلقه‌ها به حداقل برسن. 

خطای منطقی

آخرین خطایی که میخواییم درباره‌ش حرف بزنیم خطای منطقی هست. از نام این خطا نیز میشه به ماهیت اون پی برد. وقتی کدها بدون هیچ خطای سینتکسی یا حین اجرایی پیش میرن ولی نتیجه‌ای که پیش میاد اونی نیست که شما انتظارش رو داشتین. برای مثال شما یک برنامه ماشین حساب دارید. شما می‌خواید برنامه‌ای تعریف کنید که دو عدد رو جمع کنه اما برنامه اونارو ضرب میکنه چون به جای علامت جمع، ضرب قرار دادید. این اتفاق باعث میشه به جای اینکه عدد 13 رو به دست بیارید عدد 36 به دست بیاد. 

در این مثال هیچ خطایی تو سینتکس یا حینِ اجرا رخ نداده. همه چی درسته غیر اینکه اون نتیجه‌ای رو که میخواستید نگرفتید. این خطاها اغلب سختترین خطاها برای اشکال‌زدایی (Debug) هستند. زیرا اکثر مواقع شستتون هم خبردار نیست که چرا کدتون کار نمی‌کنه و همچنین نمدونید که چجوری رفعش کنید. اینجاست که بهتره کدتون رو با تعیین مقدار افزایشی (incrementally) تست کنید. نذارید که ساعتها از کدنویسیتون بگذره و سپس برنامه‌تون رو تست کنید. کدهاتون رو جابجا تست کنید تا هرجایی خطایی کردید به راحتی بیرون بیاد. 

خطاهای منطقی خیلی کلافه کننده هستند و میتونن ساعتها وقت شمارو بگیرن. اما اگه لم‌شو پیدا کنید مشکل جدی‌ای نخواهید داشت. 

واژگان تخصصی

 

منابع

 

Menu