პროგრამირების საფუძვლები › დამწყები › ციკლები
რატომ გვჭირდება გამეორება
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- რა პრობლემას წყვეტს ციკლი (loop)
- სამი ნაწილი, რომელიც ყველა ციკლს აქვს
- რა არის უსასრულო ციკლი და რატომ ჩნდება
ხელით თუ ციკლით
დაბეჭდე რიცხვები 1-დან 5-მდე. ჯერჯერობით ასე დაწერდი:
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);ხუთი ხაზი მოთმენით შეიძლება. მაგრამ 1-დან 1000-მდე? ან იმდენჯერ, რამდენი მოსწავლეც არის კლასში, რაც წინასწარ არ იცი? ხელით გამეორება აქ აღარ გამოგადგება.
კომპიუტერი სწორედ გამეორებაშია ძლიერი: ერთსა და იმავე მოქმედებას მილიონჯერ შეასრულებს და არ მოიწყენს. ამისთვის არსებობს ციკლი (loop): კოდის ბლოკი, რომელიც მეორდება, სანამ პირობა სრულდება. ზემოთ მოყვანილი ხუთი ხაზი ციკლით ასე გამოიყურება:
let i = 1;
while (i <= 5) {
console.log(i);
i++;
}შედეგი იგივეა. 1000-მდე დასაბეჭდად კი მხოლოდ ერთი რიცხვი უნდა შეცვალო: 5-ის ნაცვლად 1000.
ციკლის სამი ნაწილი
ნებისმიერ ციკლს, რომელ ენაზეც არ უნდა იყოს დაწერილი, სამი ნაწილი აქვს:
- დასაწყისი. საიდან ვიწყებთ:
let i = 1;. ცვლადს, რომელიც ბიჯებს ითვლის, ხშირადi-ს ვარქმევთ, ინგლისური სიტყვიდან index. - პირობა. როდემდე ვაგრძელებთ:
i <= 5. ყოველი გამეორების წინ კომპიუტერი ამოწმებს მას. სანამ პირობაtrue-ა, ციკლი გრძელდება. - ბიჯი. როგორ ვუახლოვდებით დასასრულს:
i++. ყოველ ჯერზე რაღაც უნდა შეიცვალოს, თორემ პირობა სამუდამოდtrueდარჩება.
ციკლის ბლოკის ერთ შესრულებას იტერაცია (iteration) ჰქვია. ზემოთ მოყვანილი ციკლი ხუთ იტერაციას აკეთებს.
სად შეხვდები ციკლებს
ციკლები ყველგანაა, თუნდაც ერთი შეხედვით არ ჩანდეს:
- თამაში ყოველ წამში ბევრჯერ ხატავს ეკრანს: ეს ციკლია.
- ჩატი ყველა შეტყობინებას რიგრიგობით აჩვენებს: ციკლი სიაზე.
- პროგრამა პაროლს ხელახლა გეკითხება, სანამ სწორს არ ჩაწერ: ციკლი პირობით.
- ტაიმერი ითვლის 10-დან 0-მდე: ციკლი, რომელიც კლებულობს.
უსასრულო ციკლი
თუ ბიჯი დაგავიწყდა, პირობა არასოდეს გახდება false და ციკლი უსასრულოდ გაგრძელდება. ასეთ ციკლს უსასრულო ციკლი (infinite loop) ჰქვია. ბრაუზერში ის გვერდს „ყინავს“. ამ გვერდის რედაქტორი კოდს 3 წამის შემდეგ აჩერებს, ასე რომ, აქ ექსპერიმენტი უსაფრთხოა.
სცადე თავად
გაუშვი ათვლა. მერე ისე შეცვალე, რომ 20-დან დაიწყოს, ან ბოლოს სხვა სიტყვა დაბეჭდოს.
ხშირი შეცდომები
- დავიწყებული ბიჯი.
i++-ის გარეშეiსულ 1 რჩება და ციკლი არ მთავრდება. - ბიჯი არასწორი მიმართულებით. თუ პირობაა
i <= 5, ბიჯი კიi--,iდასასრულს კი არ უახლოვდება, შორდება. - ერთით მეტი ან ნაკლები.
i < 5ხუთამდე ბეჭდავს, ხუთის ჩათვლით არა. პროგრამისტები ამას „ერთის შეცდომას“ (off-by-one) ეძახიან. პირობა ყოველთვის შეამოწმე ბოლო რიცხვზე.
სავარჯიშო
ციკლით დაბეჭდე ლუწი რიცხვები 2-დან 10-მდე: 2, 4, 6, 8, 10, თითო ცალკე ხაზზე.
💡 მინიშნება
დაიწყე 2-დან და ბიჯად i += 2 გამოიყენე. პირობაა i <= 10.
✅ ამოხსნის ნახვა
let i = 2;
while (i <= 10) {
console.log(i);
i += 2;
}მინი-ქვიზი
1რა არის ციკლი?
ციკლი ერთსა და იმავე კოდს ბევრჯერ ასრულებს.
2რა მოხდება, თუ ციკლში i++ დაგავიწყდა?
i არ იცვლება, ამიტომ პირობა სულ true რჩება.
3რამდენ რიცხვს დაბეჭდავს ციკლი, რომელიც 1-დან იწყება, პირობაა i < 5, ბიჯი i++?
იბეჭდება 1, 2, 3, 4. როცა i ხდება 5, პირობა 5 < 5 false-ა.
შეჯამება
- ციკლი კოდს იმეორებს, სანამ პირობა
true-ა. - ყოველ ციკლს აქვს დასაწყისი, პირობა და ბიჯი.
- ბლოკის ერთ შესრულებას იტერაცია ჰქვია.
- ბიჯის გარეშე ციკლი უსასრულო ხდება.