آشنایی با خطاهای برنامه نویسی باعث افزایش مهارت و دقت ما در کدنویسی خواهد شد. در این آموزش با انوع اصلی خطا در برنامه نویسی آشنا میشوید. فرقی نمیکند که با چه زبانی کد میزنید، دلیل این Error ها همیشه یکسان است.
اول از همه باید توضیح دهم چرا یادگیری خطاهای رایج برنامهنویسی میتواند مفید باشد ؟
چون کدهای یک برنامه توسط انسان نوشته میشود و انسان هم ممکن است دچار خطا شود، بروز خطای برنامه نویسی اتفاقی معمول و اجتنابناپذیر است. حتی حرفهایترین برنامهنویسها هم گاهی دچار خطا شده و کدهایشان با Error مواجه میشود!
یادگیری خطاها در برنامه نویسی دو مزیت بزرگ برایتان دارد:
- اگر دلیل بروز خطایی که روی داده را بدانید میتوانید خیلی سریعتر آن را رفع کنید.
- در هنگام کدنویسی یا آموزش برنامهنویسی به نکات مرتبط بیشتر توجه خواهید کرد.
در ادامه با انواع خطا در برنامه نویسی که ممکن است با آن مواجه شوید آشنا خواهیم شد.
به یاد داشته باشید که اگر در فرآیند برنامهنویسی با خطایی روبهرو شدید، نباید دلسرد شوید، بلکه باید به یادگیری و تمرین خود بیشتر اهمیت دهید. یادتان باشد حرفهایترها هم یک روزی از جایی که شما هستید شروع کردهاند.
ابتدا چهار ارور اصلی در برنامه نویسی را بررسی کرده و در انتها ۲ نوع غیرمعمولتر را معرفی خواهم کرد.
فهرست محتوای آموزش
خطای نحوی (Syntax Error)
اولین، رایجترین و شاید سادهترین نوع خطا، ارور نحوی است. این خطا مربوط به زمان نوشتن کدهای برنامه (قبل از کامپایل و اجرا شدن) است.
در انگلیسی به این خطا syntax error (سینتکس ارور) گفته میشود. در فارسی با نامهای خطای گرامری، خطای دستوری یا خطای نوشتاری کد نیز شناخته میشود.
بگذارید با یک مثال ساده این نوع خطا را توضیح دهم.
فرض کنید در زبان فارسی یک نفر بگوید «من خواهید آمد»! 😐 قاعدتاً از او ایراد میگیریم که ساختار جملهای که گفتی اشتباه است!
یا شاید بگوید «او نشستند»؛ این جمله باز هم از لحاظ دستوری یا گرامری اشتباه است.
همه زبانهای برنامهنویسی یک ساختار دستوری مشخصی دارند. به این ساختار اصطلاحاً syntax گفته میشود.
اگر در نوشتن یک برنامه به زبان مورد نظر، اصول (دستور گرامری) آن زبان را رعایت نکنیم، با خطای دستوری در برنامه نویسی مواجه خواهیم شد.
مثلاً برای تعریف رشته متنی معمولاً آن را درون علامت کوتیشن میگذاریم. اگر یک رشته متنی به صورت زیر تعریف کنیم، کد ما دارای خطای نحوی است چون در ابتدای آن "
قرار ندادهایم.
wrong_string = Wrong defined sample string"
یا فرض کنید در یک جای برنامه قرار میدهیم i =
و دیگر چیزی نمینویسیم. این تعریف ناقص است و باعث میشود کد ما دارای خطای گرامری باشد.
معمولاً در استفاده از ابزارهای برنامهنویسی (IDEها) این خطاها تشخیص داده شده و به ما اعلام میشود. کامپایلرها نیز قبل از ترجمه کد، ساختار آن را از نظر دستوری بررسی میکنند.
خطای زمان کامپایل (Compile Error)
خطای دیگر خطای همزمان با ترجمه (یا Compile Time Error) است. معمولاً این ارور در زبانهای برنامه نویسی کامپایلری رخ میدهد.
در اجرای برنامه یاد گرفتیم که زبانهای کامپایلری مثل زبان جاوا قبل از اجرا باید compile شوند. فرآیند ترجمه کد پیچیده است اما در همین حد بدانید که لازم است مقدماتی برای آن فرآهم شود. یکی از مقدماتی که به ما مربوط است، وجود کلیه فایلهای یک برنامه (اگر برنامه دارای چند فایل کد است) و در دسترس بودن کتابخانههای استفاده شده در برنامه است.
اگر در هنگام کامپایل کردن کد، یک یا چند مورد از این مقدمات فرآهم نباشد، با کامپایل ارور مواجه خواهیم شد.
خطای زمان اجرا (Run-Time Error)
فرض کنید کد به درستی نوشته شده و با موفقیت کامپایل شده است. در هنگام اجرای کد، شرایطی به وجود میآید که این کد به درستی اجرا نمیشود.
برای مثال، اگر برنامه ما فایلی را در کنار خود لازم داشته باشد تا چیزی از داخل آن خوانده شده یا در آن بنویسید و این فایل وجود نداشته باشد، با خطای زمان اجرا در برنامهنویسی مواجه خواهیم شد. در واقع خطایی در هنگام کار با فایل رخ داده است.
یا فرض کنید قرار بوده سیستمی دارای ۴ گیگابایت حافظه اصلی باشد. اما در هنگام اجرای کد، فقط ۲ گیگ رم در اختیار داریم.
خطای Run Time یک ارور غیر منتظره است. یعنی همه چیز به درستی عمل میکند تا این که یک نقص به وجود میآید.
یکی از خطاهای معروف زمان اجرا در برنامه نویسی، عملیات تقسیم بر صفر است. میدانیم که تقسیم هر عددی بر صفر، یک مقدار تعریف نشده به شمار میآیند. حال اگر ما یک ماشین حساب نوشته باشیم که دو عدد ورودی از کاربر و عملگر را گرفته و حاصل را برمیگرداند.
اگر کاربر سیستم عملیات تقسیم را انجام دهد و عدد دوم را صفر تعریف کند، با خطای زمان اجرا مواجه میشویم.
در حقیقت کد ما هیچ ایرادی نداشته، بلکه در هنگام اجرا، شرایطی پیش آمده که باعث Run Time Error شده است.
رفع خطای زمان اجرا در برنامه نویسی
همانطور که گفتم، خطای زمان اجرا کاملاً غیرمنتظره است! اما با امکاناتی که زبانهای برنامهنویسی در اختیار ما قرار دادهاند میتوانیم آنها را مدیریت کنیم.
به این کار مدیریت خطا (Error Handling) کفته میشود. در این فرآیند، شرایطی که احتمال میدهیم باعث بروز خطا شوند را بررسی میکنیم. مثلاً:
- در هنگام گرفتن عدد از کاربر به عنوان مقسوم علیه، با یک ساختار شرطی ساده چک کنیم که عدد مخالف صفر باشد.
- در هنگام کار با فایل یا مواردی که مرتبط با سیستم است، یک حالت دوم نیز در نظر بگیریم. معمولاً این کار با تعریف بلوکهای try-catch انجام میشود.
خطای منطقی (Logical Error)
خطرناکترین نوع ارور، خطای منطقی در برنامهنویسی است!
به این جا ۳ نوع اصلی خطای برنامهنویسی را با هم بررسی کردیم. این خطاها را کامپیوتر تا حدودی میتواند تشخیص دهد. حتی انسانها نیز به کمک کامپیوترها میآیند تا از بروز خطاهای قبلی جلوگیری کنند.
در خطای منطقی، کدها صحیح هستند، کامپایل به درستی انجام میشود و ورودیهای برنامه نیز کاملاً صحیح و بدون ایراد خواهند بود. اما نتیجه کار، اشتباه است!
فرض کنید عمل ضرب برای یک ماشین حساب را نوشتهاید. در سورس برنامه به جای عمگر ×
از عملگر +
استفاده کردهاید. کد به درستی اجرا میشود ولی نتیجهای که در انتها داریم صحیح نیست.
این نوع ایرادات در فرآیند اجرای برنامه هیچ مشکلی ایجاد نمیکند. به این دلیل خطای منطقی را یک باگ نرم افزاری در نظر میگیریم که نتیجه اشتباه است. به همین دلیل است که گفتم خطرناکترین خطای برنامهنویسی همین نوع خطاست.
خطای منطقی در برنامه نویسی را چگونه تشخیص دهیم ؟
از آن جا که خطاهای Logical ساختار یا دلیل خاصی ندارند، پیدا کردنشان کمی مشکل است. اگر برنامه ما یک خطای منطقی داشته باشد، بهتر است ابتدا بخش به بخش کدهایی که در محاسبه خروجی دخالت داشتهاند را بررسی کنیم.
اگر خطایی در نوشتن کدها پیدا نشد، باید فلوچارت یا الگوریتم برنامه را مجدداً بررسی کنیم. گاهی اوقات خطای ما در کدها نیست، بلکه در نحوه تحلیل و تعریف الگوریتم برنامه است.
تا این جا با انواع خطای برنامهنویسی آشنا شدیم. هر زبان برنامهنویسی ممکن است خطاهای بیشتری داشته باشد. معمولاً تمام خطاهای برنامهنویسی در دستهبندی همین چهار نوع قرار میگیرند.
سایر خطاهای برنامه نویسی
با وجود اینکه با تمام خطاها آشنا شدیم، اما ۲ نوع خطای رایج دیگر در برنامهنویسی را با هم بررسی کنیم. در زبانهای مختلف میتوانیم ارورهای بیشتری داشته باشیم. مثلاً در زبان C خطای Linker Error داریم که در در حالت کلی در دستههای بالا قرار میگیرد.
خطای منبع (Resource Error)
هر برنامهای برای اجرا به منابع مختلفی نیاز دارد. این منبع میتواند قدرت پردازشی CPU، میزان فضای RAM یا حتی دستگاههای بیرونی (مثل پرینتر یا Wi-Fi) باشد. اگر منابعی که به برنامه داده شده است کافی نباشد، معمولاً برنامه ما درخواست منابع بیشتر از سیستم عامل خواهد کرد.
اگر سیستم عامل منابع بیشتری در اختیار نداشته باشد یا مقدار بیشتری از آن را در اختیار برنامه قرار ندهد، ممکن است با خطای resource مواجه شویم.
در حقیقت این خطا به این معنی است که برنامه نتوانسته منابع مورد نیاز خود را به اندازه کافی در اختیار بگیرد؛ در نتیجه اجرای آن با مشکل روبهرو خواهد شد.
خطای واسط (Interface Error)
نرمافزارها و حتی سختافزارها برای تعامل با هم از واسط (اینترفیس یا interface) استفاده میکنند. تعریف واسط بحث مفصلی است که میتوانید در مورد آن در برنامهنویسی شئگرا بیشتر بخوانید.
فرض کنید یک وبسرویس (API) داریم. برای استفاده از آن باید پارامترهایی را به همراه درخواست خود ارسال کنیم. اگر مقادیر ارسالی ما با دادههایی (فیلدهایی) که در مقصد مورد نیاز است تطابق نداشته باشد، با خطای واسط برنامهنویسی مواجه می شویم.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش برنامه نویسی
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
من مینویسه هنگام تجزیه به انتهای فایل رسیده است یعنی چی
در چه زبانی؟
اگه منظورتون خطای EOL هست ممکنه یه جایی علامت پایان رشته رو مشخص نکرده باشید.
سلام وقت بخیر بنده یک هفته هست درگیر این خطا هستم تمام کدهارو هم زیرو رو کردم ولی مشکل حل نمیشه متن خطا بدین صورت
اگر لازم هست کدهارو هم بفرستم ممنون میشم بهم کمک کنید
سلام
با چه زبانی کار میکنید؟ به نظر میرسه خطا مربوط به اینه که نمیتونه یکسری فایل ها رو load کنه. یکی خطای 500 میگیره و دیگری 404.
سلام ASP.NET نوبت ثبت نمیکنه داخل دیتا بیس میخواید بیاید روی سیستمم یا کدارو بفرستم البته زیاده
پیشنهاد میکنم سعی کنید کوئری رو جداگانه روی دیتابیس اجرا کنید ببینید مشکلی نداشته باشه.
یه راهحل دیگه هم اینه که تیکه تیکه کدتون رو تکمیل کنید که بهتر متوجه بشید خطا مربوط به چه بخشی هست.
در کل هم خوبه از کسی که تجربه کار با asp داره راهنمایی بگیرید.
خطای 404 که میگه صفحه پیدا نشد
500 رو فکر کنم میگه سرور پیدا نشد
سلام من کود ها را با دقت تمام مینویسم ولی هنگام که میخواهم خروجی بگیرم فقط تمام کود ها اجرا نمیشود ، مثلا کود یک ساعت متحرک را نویشتم هیچ مشکلی نداشت وقتی کامپیل کردم تنها همان شماره ای آمد که قرار بود از آن شروع کند بدون حرکت خود کار لطفا رهنمای ام کنید که چه مشکل وجود دارد.
سلام
ممکنه به خاطر منطق کدتون باشه؛ یعنی اشتباهاً جایی از کد که باید عدد رو افزایش بدید یا نمایشش رو تغییر بدید، کارِ درست انجام نشده.
با چه زبانی هست؟ بهتره کدتون رو روی کاغذ (یا حتی ذهنی) trace کنید؛ یعنی خط به خط مثل یک کامپیوتر بررسی و اجراش کنید و ببینید در هر گام چه تغییراتی رخ میده.
سلام من در برنامه ام خط آخر end رو نمیخونه اصلا میگه نا معتبره !اما بعد از اینکه پاکش میکنم و دوباره check Syntax رو میزنم میگه نمیتونم ;end رو پیدا کنم 😐😑
میشه کمکم کنین ؟ممنون
سلام
چه زبانی؟ end برای مشخص کردن چیه؟!
من تازه شروع بکار کردم و کد یک خطی ساده مینویسم ارور نداره اما وقتی استارت میکنم و نتیجه میخوام هیچ پنجره ای باز نمیشه
چه زبانی؟ از ide استفاده میکنید؟ منظورتون از استارت، اجرا فایل کد هست؟
خیلی ممنون از پاسختون
زبان برنامه نویسی سی شارپ هست
مسج باکس هیچ جوابی داخلش چاپ نمیشد. که برنامه رو حذف و دوباره نصب کردم مشکل فعلا حل شده .
خیلی توضیح مفید و خلاصه و شفافی بود ممنونم ازتون.
خوشحالیم برات مفید بوده هادی عزیز. ممنون برای انرژی خوبی که بهمون دادی.
سلام من وقتی ک میخوام یک پرژه جدید درست کنم خب از گزینه فایل گزینه پروجکت رو میزنم و مراحلشو میرم ولی ارور میده
میگه : couldnot create project directory
میخاستم بدونم چجوری مشکل رو حل کنم؟
سلام
این مورد احتمال خیلی زیاد برمیگرده به IDE (ویرایشگر). ممکنه دسترسی لازم برای ایجاد فولدر رو نداشته باشه؛ برای تستش در ویندوز run as admin کنید و در لینوکس در حالت sudo.
شاید هم مشکلی در نصب یا برنامهاش وجود داشته باشه.
سلام وقت بخیر
من توی قسمت if وقتی به آخرین شرط میرسم و else رو برای آخرین شرط استفاده میکنم کامپایلر خطای خروجی میده. دستورها رو قبلش تک به تک اجرا کردم و مشکلی نداشته. ولی موقعی که همه رو با هم اجرا میکنم کامپایلر خطا میده
سلام
در چه زبانی؟ و منظورتون از خطای خروجی چیه؟
با سلام و وقت بخیر
وقتی کد برنامه تو کد ویژن کامپیل میشه این ارور میده
Error: ‘(‘ expected
این یه بخشی از کد برنامس که ارور میده تو خطsetpoint=25;
امکانش هست راهنمایی کنید که
دلیلش چی میتونه باشه؟
سلام
من تجربه زیادی با کدویژن ندارم. به نظر میرسه این چند خط درست باشن. خطای برنامه هم گفته انتظار داشته یه ( بذارید ولی نذاشتید. ممکنه در خطوط بالاتر مشکلی داره که الآن خطوط پایینتر رو نمیتونه تشخیص بده.
بزرگترین مشکل برنامه نویسی همین ارور هاست که ساعت ها وقتمون رو صرف میکنن من بیشتر با جاوااسکریپت کار کردم و چند ساعت پیش داشتم یک مفسر با php میساختم ارور داد هر کاری کردم درست نشد اون خط هم مثل این بود
در واقع مثل += کار میکنه و نوعشون هم استگرینگ بودن اجرا تابع تو php مشکلی نداشت اما پاسخ تابع وارد متغیر نمیشد خیلی وقت ها ارور ها ساعت ها وقتمون رو میگیره و هر کاری میکنیم درست نمیشه
سلام
خروجی رو از تابعتون به چه صورت برمیگردونید؟ با return؟
معمولاً وقتی اینطور میشه شاید خوب باشه بخشهایی از کد رو حذف (کامنت) کنید و یک حالت خیلی ساده از برنامه رو اجرا کنید. اگه درست بود، قدم به قدم پیچیدگیها رو بهش اضافه کنید تا احتمالاً متوجه بشید در کجای کار خطا وجود داره.
اگه با php زیاد آشنا نیستید شاید دوره آموزش PHP رایگان و مخصوصاً جلساتی مثل توابع براتون مفید باشه.
سلام وقت بخیر من با c++ برنامه مینویسم
و این خطا رو خیلی وقت ها می گیرم
ممنون میشم بگید ک دلیلش چیه و چ طوری رفعش کنم؟ expected expression
سلام
از عنوان حطا این رو برداشت میکنیم که خطایی در syntax وجود داره! مثلاً یه } کم و زیاد یا در جای نادرستی قرار گرفته. همینطور بقیه علائم یا ساختارهای منطقی.
سعی کنید یکم اصول کدنویسی تمیز رو رعایت کنید و کد رو با ساختار بنویسید تا متوجه بشید که مشکل از همینجاست یا دلیل دیگهای داره.
سلام و وقت بخیر من در سی پلاس پلاس به ایم ارور برخوردم یعنی چی؟ چه کار کنم؟
سلام
این خطا رو کجا میگیرید؟ مطمئن نیستیم، به نظر دارید یک شیء از کلاس double تعریف میکنید ولی اشتباهاً براش () گذاشتید، یعنی به شکل تابع فراخوانی شده.
سلام وقتتون بخیر
من پروژه کارشناسیمو به زبان c# نوشتم چند سال پیش ،امروز اومدم که یک مطلبی از نگاه کنم چون که چند وقت پیش درایور هامو تغییر دادم ،برنامه اجرا نمیشه به خاطر ادرس فایل هایی که عوض شده. میخواستم ببینم راهی هست که من بتونم درستش کنم؟لطفا راهنماییم کنین مرسی
سلام
صرفاً درایورها تغییر کردند یا فایلهای پروژه هم جابجا شدند؟ اگر صرفاً درایورها هست، چرا مجدد نصب نمیکنید یا مسیر فراخوانی اونها رو تغییر نمیدید؟
سلام وقتتون بخیر
ممکنه راهنمایی کنید که این خطا چی هست و چطور میتونم این خطا رو رفع کنم ؟
خیلی ممنون
سلام
با زبان c هستید؟ احساس میکنم یه جایی از کد علامت
}
یا)
رو جابجا یا اضافه / کم گذاشتید.سلام خیلی ممنون از پاسخگویی شما
بله من در زبان c برنامه مینویسم و با کامپایلر آنلاین برنامه مینویسم که متاسفانه دستورات مربوط به scanf را قبول نمیکند تا من برنامه را به طور کامل بررسی کنم و اشکالاتش رو متوجه بشم، هرچقدر هم حالات مختلف را امتحان کردم متاسفانه اصلاح نشد.
و اینکه ممکنه در مورد primer expression قبل ازتعریف pointer و constructor و destructor ویا type conversation هم من رو راهنمایی بفرمایید.
با تشکر 🌹
دلیل خاصی دارید که از کامپایلر روی سیستم استفاده نمیکنید؟ شاید مشکلتون برطرف بشه.
برای مورد دوم، متأسفانه تجربه زیادی با زبان C ندارم، اگر بتونید بگید هدفتون چیه شاید بهتر بتونم راهنماییتون کنم.
سلام من تونستم مشکل رو حل کنم باید مسیر کتاب خانه خارو فکر کنم تنظیم میکردم والان دوباره یه مشکل دیگه ای دارم : |
بعضی از کدهام ترجمه نمیشه مثل (#include “Helpers.h) مشکل از قدیمی بودن کتاب خونست؟
از Console application استفاده میکنم
زبان برنامه نویسیمم ++C
سلام
متأسفانه مدت زیادیه
c++
کار نکردم! در مورد کتابخونه زیاد مطمئن نیستم.اما احتمال اینکه نتونه کتابخونه رو load کنه و برنامتون درست کامپایل نشه هست.
موقع کامپایل خطایی نمیگیرید؟ یعنی وقتی کامپایل میکنید داخل کنسول خطایی در کد نمیده؟!
سلام باید چجوری مشکلCompile Error را حل کنم؟؟ شما فقط گفتید مشکل از کجاست اگه میشه کمک کنید ممنون:)
سایتتون و لحن حرف زدنتون خیلی خوبه–_0
سلام امیر مهدی عزیز
هر خطای کامپایلری به یک روش رفع میشه! با چه زبانی برنامه نویسی میکنید؟
معمولاً خود کامپایلر به شما توضیحی میده که مشکل از کجاست. مثلاً ممکنه فایلهای کتابخونه به درستی فراخوانی نشده باشند یا ساختمان دادهای که استفاده کردید تعریف نشده باشه!
پیشنهاد میکنم خطایی که موقع کامپایل میگیرید رو سرچ کنید، نتایج میتونه کمک زیادی کنه تا خطاهای برنامه نویسی رو برطرف کنید.
مرسی. خیلی بیان خوبی دارید
ممنون از لطفتون. خوشحالم که براتون مفید بوده