Debugging va yakuniy loyiha
Mana, oxirgi haftaga yetib keldingiz. Endi har bir dasturchining kundalik ishi, debugging, ya'ni xatolarni topish va tuzatishni o'rganamiz. So'ng o'rgangan hamma narsani birlashtirib, yakuniy loyiha qanday qurilishini ko'ramiz. Bu sayohatingizning yakuni va ayni paytda haqiqiy dasturchilik yo'lining boshlanishi.
Bu darsda nimani o'rganasiz
9.1 Debugging nima?
Debugging (xatolarni tuzatish) deganda dasturdagi xatolarni (bug) topish va to'g'rilash jarayoni tushuniladi. Dunyodagi hech bir dasturchi xatosiz kod yozmaydi. Aslida, dasturchining ish vaqtining katta qismi yangi kod yozishga emas, mavjud kodni tuzatishga ketadi. Demak debugging qila olish, dasturchining eng muhim mahoratlaridan biri.
Yaxshi xabar shu: debugging o'rganiladigan ko'nikma. Tartibli yondashuv bilan har qanday xatoni topish mumkin. Bu haftada xato turlari, ularni topish usullari va eng ko'p uchraydigan xatolarni ko'rib chiqamiz.
9.2 Xato turlari
Xatolar uch asosiy turga bo'linadi, va har birini boshqacha topamiz:
- Sintaksis xatosi: til qoidasi buzilgan, masalan nuqta-vergul unutilgan. Kompilyator dasturni umuman yaratmaydi.
- Ijro (runtime) xatosi: dastur ishlay boshlaydi, lekin ish vaqtida qulaydi, masalan massiv chegarasidan chiqish.
- Mantiqiy xato: dastur ishlaydi va qulamaydi, lekin natija noto'g'ri. Bularni topish eng qiyin, chunki kompilyator yordam bermaydi.
Pastda har bir holatga to'g'ri turni tanlang:
9.3 Xato xabarini o'qish
Sintaksis xatosida kompilyator sizga yordam beradi: xato qaysi qatorda va nima ekanini aytadi. Avvaliga bu xabarlar qo'rqinchli tuyuladi, lekin ularni o'qishni o'rgansangiz, debugging ancha osonlashadi. Quyidagi xabarda fayl nomi, qator raqami va xato izohi bor:
Buni qismlarga ajratamiz: salom.c bu fayl, 4 bu qator, 18 bu ustun, expected ';' esa "shu yerda nuqta-vergul kutilgan edi" degani. Demak 4-qatorda, return dan oldin ; qo'yishni unutibmiz.
9.4 printf bilan debug
Mantiqiy xatoda kompilyator jim turadi: dastur ishlaydi, lekin javob noto'g'ri. Eng oddiy va kuchli usul, printf bilan debugging: shubhali joylarga printf qo'yib, o'zgaruvchilar qiymatini ko'rasiz. Quyidagi dastur 1 dan 5 gacha qo'shishi kerak (javob 15), lekin u 10 chiqaryapti. Nega?
printf qo'sh tugmasini bosing, har qadamda sum qiymatini ko'ring:
9.5 Xatoni tuzating
Endi mashq vaqti. Quyida eng ko'p uchraydigan uchta xato. Har biri qizil bilan belgilangan. To'g'ri tuzatishni tanlang, kod yashilga aylanadi:
9.6 Debugger
printf yaxshi, lekin maxsus vosita ham bor: debugger. U dasturni qator-qator qadamlab yurgizib, har qadamda barcha o'zgaruvchilar qiymatini ko'rsatadi. Aslida, bu butun kurs davomida ishlatgan jonli izlagichlarimizga juda o'xshaydi: 3-haftadagi sikl izlagichi, 8-haftadagi chaqiruv steki izlagichi, bularning hammasi debugger g'oyasi.
Debuggerda asosiy amallar:
- Step (qadam): bitta qatorni bajarib, keyingisiga o'tish
- Breakpoint (to'xtash nuqtasi): dasturni aniq bir qatorda to'xtatish
- Watch (kuzatish): biror o'zgaruvchi qiymatini doimiy kuzatish
9.7 Yakuniy loyiha: rejalashtirish
Endi ikkinchi qism: katta loyiha qurish. Yangi boshlovchilar ko'pincha to'g'ridan-to'g'ri kod yozishga kirishadi va chalkashib ketadi. Tajribali dasturchi esa avval rejalashtiradi: katta masalani kichik, bajariladigan qadamlarga bo'ladi.
Masalan, oddiy "Vazifalar ro'yxati" (to-do) dasturi qilmoqchimiz. Uni shunday bo'lamiz:
- Vazifalarni saqlash uchun ma'lumot tuzilmasini tanlash (massiv yoki ro'yxat)
- Yangi vazifa qo'shish funksiyasi
- Vazifalarni ekranga chiqarish funksiyasi
- Vazifani bajarilgan deb belgilash
- Hammasini faylga saqlash va keyin o'qish
Diqqat qiling: bu ro'yxatdagi har bir qadam, aynan shu kursda o'rgangan narsalaringiz. Massiv, funksiya, ma'lumot tuzilmasi, fayllar. Katta loyiha, shunchaki kichik, tanish qismlardan yig'iladi.
9.8 Bosqichma-bosqich qurish
Reja tayyor bo'lgach, hammasini birdan yozmaymiz. Bosqichma-bosqich quramiz: bitta kichik qismni yozamiz, uni sinab ko'ramiz, ishlasa keyingisiga o'tamiz. Bu eng muhim odat, chunki xato chiqsa, u faqat oxirgi yozgan kichik qismda bo'ladi, topish oson.
Amaliy qoidalar:
- Avval eng sodda ishlaydigan versiyani qiling, keyin yaxshilang
- Har bir yangi qismdan keyin dasturni ishga tushirib sinang
- Bir vaqtda faqat bitta narsani o'zgartiring, shunda xato qayerdaligi aniq bo'ladi
- Ishlaydigan versiyani saqlab boring (quyida git haqida)
9.9 Sayohatni yakunlash
To'qqiz hafta oldin, ehtimol, dasturlash haqida hech narsa bilmasdingiz. Bugun esa kompyuter qanday ishlashidan tortib rekursiya va ma'lumotlar tuzilmalarigacha bilasiz. Quyida butun yo'lni ko'ring, har bir haftani bosib, nimani o'rganganingizni eslang:
Bu poydevor bilan endi ko'p yo'l ochiq: o'z loyihalaringizni qurish, yangi til (Python, JavaScript) o'rganish yoki shu bilimni chuqurlashtirish. Eng muhimi, dasturlashni o'rgandingiz, bu o'zini o'zi o'rgatishni o'rganish demakdir.
Bashorat qiling
Bu sikl terminalga necha marta yulduzcha chiqaradi?
9.10 Chuqurroq advanced
Yo'lda davom etish uchun yana ikkita foydali tushuncha.
Versiya nazorati (git)
Git sizning kodingiz tarixini saqlovchi vosita. Har bir ishlaydigan versiyani saqlab qo'yasiz, va agar yangi o'zgarish kodingizni buzib qo'ysa, oson holatga qaytasiz. Bundan tashqari, GitHub kabi xizmatlar orqali kod ustida boshqalar bilan birga ishlash mumkin. Har bir jiddiy dasturchi git ishlatadi.
Qayerga davom etish
C tilini bilganingiz uchun boshqa tillar endi sizga ancha oson. Python sodda va sun'iy intellekt uchun mashhur. JavaScript veb-saytlar uchun. Yoki shu yerda, C bilan o'yinlar va tizimlar yaratishni chuqurlashtirishingiz mumkin. Eng muhimi, doimiy amaliyot: kichik loyihalar qurish, har kuni biroz kod yozish.
Atamalar lug'ati
9.11 Yakuniy test
16 ta savol, butun kurs bo'yicha umumiy takror. Foundation'ni yakunlash uchun kamida 11 tasiga to'g'ri javob bering.
Tabriklaymiz! Foundation kursini tamomladingiz!
9 hafta davomida siz noldan boshlab, kompyuter qanday ishlashidan tortib algoritmlar, pointerlar, ma'lumotlar tuzilmalari va rekursiyagacha yo'lni bosib o'tdingiz. Bu jiddiy yutuq. Endi sizda haqiqiy dasturlash poydevori bor.
Bu oxir emas, balki boshlanish. Yo'lingiz ochiq bo'lsin!