Dasturchilar vaqtining 80 foizini yangi kod yozishga emas, xatolarni qidirish va tuzatishga (Debugging) sarflaydi. Bugun biz qizil konsol yozuvlaridan qo'rqmaslikni, 3 ta asosiy xato toifasini (Syntax, Runtime, Logic) va AI yordamida har qanday muammoni zudlik bilan hal qilishni o'rganamiz.
1947-yil 9-sentabrda ulkan Garvard Mark II kompyuteri to'xtab qoldi. Muhandislar 70-rele orasiga kirib qolgan haqiqiy kuya (kapalak)ni topishdi va uni kundalik daftariga skotch bilan yopishtirib qo'yishdi.
Bug (Xato): dasturdagi kamchilik, kutilmagan to'xtalish.
Debugging (Отладка): xatolarni aniqlash, ularning ildizini topish va to'g'rilash jarayoni.
Professional dasturchi xatodan asabiylashmaydi — u konsolni ochib, kiber-detektiv kabi izlanadi.
Grammatik xato: yopilmagan qavs, qo'shtirnoq, sintaktik buzilish. Brauzer kodni hatto ishga tushirmay to'xtaydi.
Sintaksis to'g'ri, dastur ishga tushadi, lekin ijro paytida qulaydi: `null` ustida amallar, mavjud bo'lmagan metodlar.
Konsolda qizil xato YO'Q! Kod xatosiz ishlaydi, lekin natija noto'g'ri: ball qo'shilishi o'rniga o'chib ketadi, eshik ochilmaydi.
." data-en="1. The script never begins execution.
2. Bright red notification in DevTools specifying exact file and line.
3. Root causes: unclosed parentheses, mismatched quotes, unexpected tokens.">1. Dastur umuman ishga tushmaydi (hatto eng birinchi `console.log` ham ishlamaydi).
2. DevTools konsolida qizil yozuv va qator raqami chiqadi.
3. Eng ko'p sabab: yopilmagan `)`, `}` yoki qo'shtirnoqlar chalkashishi (`"salom'`).
HTML da bunday element yo'q yoki ID noto'g'ri yozilgan bo'lsa, `document.getElementById` elementi null (bo'shliq) qaytaradi.
Siz esa keyingi qatorda: `null.addEventListener(...)` deb buyruq berasiz. Brauzer hayron: 'Bo'shliqda hodisa datchigi bo'lishi mumkin emas!'
| Metod | Qanday yoziladi? | Xato namunasi |
|---|---|---|
getElementById |
'myBtn' (panjarasiz!) |
❌ '#myBtn' |
querySelector |
'#myBtn' yoki '.card' |
❌ 'myBtn' |
id="" nomini nusxalab, JS dagi bilan solishtiring!
Brauzer sizni ataylab shunday qildi deb o'ylaydi. Hech qanday ogohlantirish yo'q!
Sayt ochiladi, tugmalar bosiladi, ammo: do'konda narx arzonlash o'rniga qimmatlaydi, o'yinda dushmanga tegsangiz jon kamayish o'rniga ko'payib ketadi.
Ixtiyoriy zamonaviy brauzerda:
• Klaviaturada F12 tugmasini bosing
• Yoki Ctrl + Shift + I (Mac: Cmd + Opt + I)
• Yoki sichqonchaning o'ng tugmasi → Inspect (Kodni tekshirish) → Console menyusi.
console.log('1-qadam bajarildi') qo'yib tekshiring!
1. Xato nomi: `TypeError` yoki `ReferenceError`.
2. Tushuntirish: `Cannot read properties of null`.
3. Manzil (O'ng burchakda): `script.js:42:15`.
Bu degani: script.js fayli, 42-qator, 15-belgi! O'sha havolani bossangiz, brauzer to'g'ridan-to'g'ri o'sha qatorni ochib ko'rsatadi.
Har doim eng yuqoridagi qatorga e'tibor bering: xato aynan o'sha funksiya ichida sodir bo'lgan!
O'nlab `console.log()` larni yozib o'tirmasdan, DevTools ning Sources bo'limida qator raqamini bosasiz.
Kod shu qatorga kelganda, brauzer vaqtni muzlatadi! Siz sichqonchani ixtiyoriy o'zgaruvchi ustiga olib borib, xotiradagi jonli qiymatni ko'ra olasiz.
F10 tugmasi keyingi qatorga o'tkazadi, F8 esa dasturni davom ettiradi.
❌ Yomon: 'Kodim ishlamayapti, tuzatib ber' (AI nima bo'lganini bilmaydi).
✅ Mukammal (3 tarkibiy qism):
1. Kutilgan maqsad: 'Tugma bosilganda quvvat 10 ga oshishi kerak'.
2. Muammoli kod parchasi: aynan o'sha 3-4 qator kod.
3. Konsoldagi aniq xato matni: DevTools dan nusxa olingan qizil xato.
Sintaksis xatosi: qavsni to'g'ri yopib, reaktorni ishga tushiring.
SyntaxErrorRuntime xatosi: `getElementById` dagi ortiqcha `#` ni olib tashlang.
TypeError: nullMantiqiy xato: `=` operatorini `+=` ga almashtirib, quvvatni oshiring.
Logic Bugclasses/7-8-sinf/2-hafta/10-dars-ai-debugging-va-mantiq/lab/index.html
| Ball | Talab |
|---|---|
| 1–3 ball | DevTools ochildi, xatolar turlari ajratildi |
| 4–7 ball | Laboratoriyadagi 2 ta xato to'liq tuzatildi |
| 8–10 ball | Barcha 3 modul tuzatildi, AI prompti yozildi |
LocalStorage va Doimiy Xotira: Nega F5 bosilganda barcha ballar o'chib ketadi? Brauzerga o'yinchi rekordlarini bir umrga eslab qolishni o'rgatamiz!