خوش برگشتی.
در این ویدیو می‌خوام بهت نشون بدم که دیباگ کردن (Debugging) و Breakpointها چطور کار می‌کنن.
خب یک قابلیت به نام Breakpoint وجود داره که به ما اجازه می‌ده اجرای برنامه یا کد رو در یک نقطه‌ی مشخص متوقف کنیم.
در یک نقطه‌ی مشخص.
num2 فرض کنیم به جای اینکه مقدار Console.ReadLine همیشه 13 باشه، از استفاده کنیم تا ورودی کاربر رو در این نقطه بگیریم.
در این نقطه ورودی کاربر رو دریافت کنیم.
اما باید این ورودی رو به عدد صحیح (int) تبدیل کنیم.
چطور این کارو انجام بدیم؟
یادت هست؟
می‌تونیم از int.Parse استفاده کنیم تا هر چیزی که وارد شد رو به int تبدیل کنیم.
و شاید بهتر باشه به کاربر هم بگیم چیزی وارد کنه.
Console.WriteLine پس رو صدا می‌زنم و می‌گم لطفاً یک عدد صحیح وارد کنید، مثل این.
و این باعث میشه کاربر مقداری وارد کنه.
بعد می‌خوام برم سراغ همه‌ی این محاسبات و ادامه‌ی کار.
برای همین می‌تونم یک Breakpoint همین‌جا بذارم.
این کار اجرای برنامه رو دقیقاً در همین خط متوقف می‌کنه، مثلاً خط شش.
خب بریم و روی دکمه‌ی اجرا کلیک کنیم.
می‌بینی که می‌گه لطفاً یک عدد صحیح وارد کنید.
و حالا اگه بخوام چیزی وارد کنم...
نمی‌تونم، چون برنامه دقیقاً در این نقطه متوقف شده.
کد هنوز بعد از خط پنج اجرا نشده.
پس خط شش هنوز اجرا نشده.
می‌بینی Num2 به صورت پیش‌فرض صفره.
چون متغیرهای int به صورت پیش‌فرض صفر می‌شن و من هنوز چیزی وارد نکردم.
ولی همچنان میگه عدد صفره.
حالا اگه بخوام به عنوان کاربر چیزی وارد کنم، می‌تونم برم خط بعد.
یعنی خط بعدی کد، با زدن Step Over.
حالا این خط اجرا میشه.
می‌بینی که من پنج رو وارد کردم و حالا این عددها داخل برنامه ثبت شدن.
خب فرض کنیم عدد پنج رو وارد می‌کنم.
بعد به خط بعدی کد میره و اونجا رو اجرا می‌کنه.
این همون کاریه که در دیباگ انجام می‌دیم.
در واقع قدم به قدم در کد جلو میریم. چون اینجا فقط یک کامنت هست، چیزی اجرا نمی‌شه.
اینجا هم کامنت دیگه‌ست و نادیده گرفته میشه.
این هم کدی نیست، فقط یک کامنت دیگه است که نادیده گرفته میشه.
این خط بعدیه که توش کد واقعی اجرا میشه.
Num2 اینجا می‌تونم موس رو روی نگه دارم و می‌بینید که الان مقدار عدد ۵ رو گرفته.
این به خاطر اینه که همین الان عدد ۵ رو توی کنسول وارد کردم.
پس هنوز این دستور اجرا نشده که میگه H برابر با Num1 هست.
خب.
برنامه هنوز به اون نقطه نرسیده، و می‌تونیم با زدن Continue ازش عبور کنیم.
با زدن Continue، بقیه کد اجرا میشه.
خب.
پس تمام خطوط باقی‌مونده رو اجرا می‌کنه.
رو چاپ می‌کنه. H 14 میاد و
محاسبات رو انجام میده و کارش رو ادامه میده.
بذار دوباره اجراش کنم.
اینجا دوباره روی همین Breakpoint وایستاد. هنوز نمی‌تونم چیزی وارد کنم چون نرم‌افزار آماده نیست.
پس دوبار عدد ۵ رو وارد کردم برای تست.
حالا دوباره Step Over می‌کنم.
حالا مقدار ۵ که وارد کردم رو نشون میده.
بذار فرض کنیم نرم‌افزارم کرش کنه، پس صفر وارد می‌کنم.
خب.
میره خط بعد.
بذار بگم.
یا مثلا خط به خط بریم جلو.
پس با زدن این کلید می‌خوام برم خط بعد.
Step Over یا F10 هم میشه استفاده کرد.
میره خط بعد، و می‌تونم روی متغیر Num1 یا Num2 موس ببرم و ببینم چه مقداری دارن.
اینطوری می‌فهمم.
این خیلی به درد می‌خوره وقتی با چند تا متغیر کار می‌کنید.
و می‌خواید ببینید مقدارشون چیه.
تو مثال ما ساده‌ست چون میشه کد رو نگاه کرد.
ولی بعضی وقتا داده از جای دیگه میاد یا محاسبات پیچیده میشه، اون‌وقت راحت نیست مقدار رو فهمید.
اینجاست که Debugging کمک می‌کنه تا مقدار رو همینجا ببینید.
مثل همین روشی که می‌بینید.
حالا اگه یک بار دیگه Step Over کنم، می‌بینید Num1 + Num2 برابر ۱۴ میشه.
چون ۱۴ + ۰ میشه ۱۴.
پس جمع بدون مشکل انجام شد.
ولی حالا به ارور می‌خوریم.
شاید حدس بزنید چه اروری باشه.
حالا بریم سراغ ضرب.
خیلی ساده‌ست.
نتیجه صفر میشه.
چون ۱۴ ضربدر صفر، صفره.
و حالا بخش جالبش میاد.
اینجا داریم ۱۴ تقسیم بر صفر.
وقتی اجرا کنیم، یک Exception می‌گیریم.
یعنی خطا میده.
و دقیقا معلومه خطا کجا اتفاق افتاده.
توی خط ۲۱.
و میگه System.DivideByZeroException.
یعنی تلاش برای تقسیم بر صفر، که غیرممکنه و توی کدنویسی ممنوعه.
برای همین Exception یا همون خطا رو گرفتیم.
DivideByZeroException.
پس این خط اجرا نشد و باعث کرش شدن برنامه شد.
خب.
می‌خواستم حواستون باشه که اینطوری میشه برنامه رو کرش کرد.
می‌تونید ببینید—نه الان نمی‌بینید—
ولی دیگه به اپلیکیشن برنمی‌گردم چون بسته شد.
هیچی دیگه کار نمی‌کنه.
کرش کرد.
نتایج رو نشون نداد چون خودم با داده ورودی باعث Exception شدم.
به عنوان کاربر.
این چیزی رو نشون میده.
ممکنه نرم‌افزارتون رو عالی بنویسید، اما وقتی ورودی کاربر یا داده بیرونی باشه،
باید خیلی محتاط‌تر باشید.
و نرم‌افزار باید طوری نوشته بشه که جلوی خطاها رو بگیره.
اینجا ما جلوی خطا رو نگرفتیم چون از کاربر خواستیم چیزی وارد کنه.
کاربر می‌تونه عدد وارد نکنه.
این هم باعث کرش میشه.
بذار دوباره اجرا کنم.
Step Over می‌کنم تا به بخش ورود کاربر برسیم.
و این بار می‌نویسم hi.
FormatException این بار هم اپلیکیشن کرش می‌کنه با .
"hi" چون رشته داشت. int فرمت درستی نداره. انتظار
یا چیزی که قابل تبدیل به عدد باشه.
پس اینم مثالی بود که می‌خواستم نشون بدم.
یه نکته آخر مونده: بحث ترتیب ارزیابی (Evaluation Order).
که می‌خواستم نشون بدم.
اینجا یه خطای کامپایلری داریم.
فرق خطای کامپایلری و زمان اجرا همینه که همین الان دیدیم.
خب.
خطای کامپایل اینجاست.
اینجا یه ارور می‌گیرم.
IDE وقتی (ویژوال استودیو) داره برنامه رو کامپایل می‌کنه.
یعنی قبل از اجرا، میگه یه خطا داری، درستش کن.
اما خطای زمان اجرا توی اجرا پیش میاد.
مثل همون تقسیم بر صفر که بعد از اجرای برنامه اتفاق افتاد.
یعنی وقتی صفر وارد کردم و خواست تقسیم کنه.
Runtime اون موقع خطای
ارور گرفتیم
خب
یه ترفند کوچیک و جالب هست.
وقتی توی حالت Debug هستم و روی دکمه Play کلیک می‌کنم، می‌تونم ببینم خروجی این قسمت چی میشه، حتی با اون کوتیشن کوچیک اولش.
Shift + F9 حالا می‌تونم کلید رو بزنم و نتیجه رو ببینم.
نتیجه این عبارت این خواهد بود: "addition Num1 plus Num2 equals 14".
پس این خروجی الان از نوع رشته (string) هست.
IDE اینجوری
بهم میگه.
این ۱۴ همون مقدار پیش‌فرض Num1 هست.
پس می‌بینید که از اینجا به بعد کل عبارت به‌صورت رشته در نظر گرفته میشه.
وقتی یه عدد (int) رو به رشته اضافه کنیم، اون عدد هم به رشته
تبدیل میشه.
و این باعث میشه اینجا از اتصال رشته‌ها (Concatenation) استفاده بشه.
پس این یه نمونه از Concatenation هست.
حالا اگه اجرای برنامه رو کامل ادامه بدم، اینجا به‌جای Step Over باید Continue بزنم تا کل برنامه اجرا بشه.
یعنی ادامه اجرای کل اپلیکیشن.
می‌بینید که خروجی میشه "145" به جای "19" (۱۴ به‌علاوه ۵).
پس دوباره می‌بینید که اینجوری میشه داخل برنامه مقدار یه عبارت رو در یه لحظه خاص بررسی کرد،
حتی بدون اینکه اونو توی یه متغیر جدا ذخیره کنیم. چون خب می‌شد اینو داخل یه متغیر بذاریم و بعد روش کار کنیم.
ولی نکته جالب اینه که میشه این کار رو فوری و مستقیم توی IDE موقع دیباگ انجام داد.
و این خیلی کاربردیه.
خب.
اینم از این ویدیو.
تا ویدیوی بعدی می‌بینمتون.