პროგრამირების საფუძვლები › დამწყები › შეცდომების პოვნა
კოდის „ხელით“ შესრულება
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ შეასრულო კოდი ქაღალდზე მიკვლევის ცხრილით (trace table)
- რატომ ღირს შედეგის გამოცნობა გაშვებამდე
- რა არის „რეზინის იხვის“ მეთოდი
კომპიუტერივით ფიქრი
კომპიუტერი არაფერს „ხვდება“: ის ყოველ ხაზს ზედმიწევნით, ერთმანეთის მიყოლებით ასრულებს. როცა კოდი არ აკეთებს იმას, რასაც ელი, ხშირად იმიტომ, რომ შენ თავში კოდს სხვანაირად „ასრულებ“, ვიდრე კომპიუტერი. გამოსავალი: შენც კომპიუტერივით იმოქმედე, ნელა და ზუსტად, ქაღალდზე.
მიკვლევის ცხრილი
ავიღოთ კოდი, რომლის შედეგიც ერთი შეხედვით არ ჩანს:
let a = 1;
let b = 1;
for (let i = 0; i < 4; i++) {
let c = a + b;
a = b;
b = c;
}
console.log(b);დახატე ცხრილი, სადაც ყოველი ცვლადი სვეტია, ყოველი იტერაცია კი სტრიქონი. მიკვლევის ცხრილში (trace table) ჩაწერე მნიშვნელობები ყოველი ნაბიჯის შემდეგ:
| ნაბიჯი | i | c | a | b |
|---|---|---|---|---|
| დასაწყისი | — | — | 1 | 1 |
| იტერაცია 1 | 0 | 2 | 1 | 2 |
| იტერაცია 2 | 1 | 3 | 2 | 3 |
| იტერაცია 3 | 2 | 5 | 3 | 5 |
| იტერაცია 4 | 3 | 8 | 5 | 8 |
როცა i 4 ხდება, პირობა 4 < 4 false-ა და ციკლი მთავრდება. იბეჭდება 8. ცხრილმა ისიც გაჩვენა, რას აკეთებს კოდი: ყოველი ახალი რიცხვი წინა ორის ჯამია. ეს ცნობილი ფიბონაჩის მიმდევრობაა: 1, 1, 2, 3, 5, 8…
ცხრილის შევსებისას ყოველ ხაზს ზუსტად ისე ასრულებ, როგორც წერია, და არა ისე, როგორც „ალბათ“ უნდა იყოს. ზუსტად აქ ჩნდება განსხვავება შენს ჩანაფიქრსა და კოდს შორის, ანუ ლოგიკური შეცდომა.
ჯერ გამოიცანი, მერე გაუშვი
კარგი ჩვევაა: გაშვებამდე წარმოთქვი, რას ელი. „ეს უნდა დაბეჭდოს 8“. თუ შედეგი დაემთხვა, შენი გაგება სწორია. თუ არ დაემთხვა, ორიდან ერთი: ან კოდშია შეცდომა, ან შენს გაგებაში. ორივე შემთხვევაში რაღაცას სწავლობ.
ვინც შედეგს არ გამოიცნობს, ის მოულოდნელ პასუხს ადვილად ვერ ამჩნევს. „დაბეჭდა 13, ალბათ ასეც უნდა იყოს“.
რეზინის იხვი
პროგრამისტებს შორის ცნობილი ხერხია „რეზინის იხვის“ დებაგინგი (rubber duck debugging). მაგიდაზე დაიდე სათამაშო, მაგალითად რეზინის იხვი, და ხმამაღლა აუხსენი კოდი ხაზ-ხაზ: „აქ ვქმნი ცვლადს, აქ ციკლი იწყება ნულიდან…“. საოცარია, მაგრამ ხშირად ახსნის შუაში თვითონ ამჩნევ შეცდომას: „…და პირობაა ნაკლები ან ტოლი სიგრძის… მოიცა!“.
ხერხი იმიტომ მუშაობს, რომ ხმამაღლა ახსნა გაიძულებს, ყოველი ხაზი ნელა გაიარო და არ გამოტოვო ის, რაც „ცხადი“ გეჩვენება. იხვის ნაცვლად მეგობარიც გამოდგება.
სცადე თავად
ჯერ ცხრილით გამოიცანი, რას დაბეჭდავს კოდი. მერე გაუშვი და შეადარე.
ხშირი შეცდომები
- „ცხადი“ ხაზების გამოტოვება. შეცდომა ყველაზე ხშირად სწორედ იქ იმალება, სადაც „ყველაფერი ნათელია“.
- ცხრილის შევსება ჩანაფიქრით. ჩაწერე ის, რასაც კოდი აკეთებს, და არა ის, რაც უნდა აკეთებდეს.
- დიდ მონაცემებზე მიკვლევა. ცხრილისთვის აირჩიე პატარა მაგალითი: სამი ელემენტი და არა სამასი.
სავარჯიშო
ცხრილით გამოიცანი, რას დაბეჭდავს ეს კოდი, და პასუხი კომენტარად ჩაწერე ბოლო ხაზის გვერდით. მერე გაუშვი და შეამოწმე.
💡 მინიშნება
i = 1: +1, i = 2: -1, i = 3: +3, i = 4: -1, i = 5: +5. დაიწყე 0-დან.
✅ ამოხსნის ნახვა
let total = 0;
for (let i = 1; i <= 5; i++) {
if (i % 2 === 1) {
total += i;
} else {
total -= 1;
}
}
console.log(total); // 7მინი-ქვიზი
1რა არის მიკვლევის ცხრილი?
სვეტები ცვლადებია, სტრიქონები ნაბიჯები.
2რატომ ღირს შედეგის გამოცნობა გაშვებამდე?
თუ არაფერს ელოდი, არასწორი პასუხიც სწორად შეიძლება მოგეჩვენოს.
3რას დაბეჭდავს? let s = 0; for (let i = 1; i <= 3; i++) { s = s * 2 + i; } console.log(s);
i=1: 0 * 2 + 1 = 1. i=2: 1 * 2 + 2 = 4. i=3: 4 * 2 + 3 = 11.
შეჯამება
- კომპიუტერი ყოველ ხაზს ზუსტად ასრულებს. შენც ასე გაიარე კოდი ქაღალდზე.
- მიკვლევის ცხრილი: სვეტები ცვლადებისთვის, სტრიქონები ნაბიჯებისთვის.
- გაშვებამდე გამოიცანი შედეგი.
- ხმამაღლა ახსნა, თუნდაც სათამაშოსთვის, შეცდომას ხშირად თავისით აჩენს.