ძვირფასი ქვა, ნამდვილი ძვირფასი ქვა!
მაგრამ იცით, რომ ერთ ძვირფას ქვაზე უკეთესი, ძვირფასი ქვების მთელი მწკრივია.
რათქმაუნდა, ჩვენ უკვე ვიცით, რომ ძვირფასი ქვების მწკრივის
გასაკეთებლად საუკეთსო გზა არის loop-ი.
მოდით for loop-ის მეშვეობით დავხატოთ 12 ძვირფასი ქვა მწკრივში.
მარცხნიდან ეკრანის სიგანეზე.
აი ასე. ანუ ეს არის
for ( var i უდრის 0; i ნაკლებია 12-ზე; i პლუს პლუსი)
და შემდეგ ავიღებთ ამ ხაზს და გადავაადგილებთ შიგნით აქ.
ეხლა ჩვენ გვაქვს 12 ძვირფასი ქვა, მაგრამ ყველა მოგროვებულია
მარჯვენა მხარეს ერმთანეთზე.
გახსოვთ, ჩვენ გვინდა რომ ეკრანის გასვწრივ იყოს.
ეს ნიშნავს რომ, გვინდა შევცვალოთ x.
ეხლა 36 არის x, მაგრამ ჩვენ გვინდა, რომ იყოს განსხვავებუი ყოველ ჯერზე.
ეს ნიშნავს რომ, ჩვენ გვინდა რომ იყოს დამოკიდებული i-ზე.
ჩვენ შეგვიძლია მარტივად დავწეროთ, i გამრავლებული 36-ზე.
პირველი არის 0-ზე, შემდეგ 36-ზე, შემდეგ 72-ზე და ა.შ.
კარგია! ახლა გვაქვს ძვირფასი ქვების მწკრივი.
ეს მახსენებს იმ სცენებს "ინდიანა ჯონსში" ან "ალადინში",
სადაც მთავარი გმირი მიწისქვეშ აღმოაჩენს ძვირფასი ქვების საუნჯეს,
მაგრამ ზოგადად ისინი ამაზე გაცილებით მეტ ძვირფას ქვას პოულობენ ხოლმე.
ძვირფასი ქვების მწკრივს კი არა, უამრავ ძვირფას ქვას!
როგორ შეგვიძლია ეს ჩვენი ძვირფასი ქვებიც გავაკეთოთ ისე, რომ
ჩადიოდეს ბოლომდე მთელ ეკრანზე.
ჩვენ შეგვიძლია დავიწყოთ for loop-ის გამეორებით და კოპირება-ჩასმით,
და შემდეგ ამ y-ის ყოველ ჯერზე შეცვლით. და ამიტომ,
ჩვენ შევცვლით 60-ით და შემდეგ 90-ით.
ეხლა გვაქვს ძვირფასი ქვების სამი მწკრივი და მაგარია.
მაგრამ ეს ცოტა მოსაწყენი ხდება, რადგან რასაც ვაკეთებთ არის,
კოპირება, ჩასმა და ცვლილება ამ პატარა რაღაცის.
ძირითადად წარსულში, როცა ვწერდით განმეორებით კოდს როგორიც ეს,
ვიფიქრებდით "იქნებ loop-ი ხომ არ გამოგვეყენებინა ამის მაგივრად"
მაგრამ ჩვენ უკვე ვიყენებთ loop-ს.
რა არის ამის გადაწყვეტა, რომ თავიდან ავიცილოთ ამის დაწერა,
ანუ განმეორებითი კოპირება-ჩასმის წერა?
ეს არის რაღაც, რასაც ვეძახით "nested for loops". loop-ი loop-ის შიგნით.
ჩვენ გავაკეთებთ გარე loop-ს,
და ეს მიხედავს ეკრანზე ქვევით ჩასვლას,
და შემდეგ ჩვენი შიდა loop-ი მიხედავს იმას რასაც აკეთებს ეხლა,
რაც არის მარცხნიდან მარჯვნივ წასვლა.
მოდით განახებთ რას ვგულისხმობ.
for - და ვიყენებ განხვავებული ცვლადს ამჯერად, სახელად j,
რადგან ჩვენ უკვე ვიყენებთ i-ს,
ანუ for(var j უდრის 0; j ნაკლებია 13; j პლუს პლუსი).
კარგით, ეს იქნება ჩვენი გარე loop-ი, ზევიდან ქვევით ჩასვლაზე პასუხისმგებელი.
შემდეგ ჩვენ უბრალოდ ავიღებთ წინა for loop-ს და ჩავსვათ იქ შიგნით,
შევასწორებთ აბზაცს, და წავშლით ამ ძველებს. კარგით.
ეხლა ჩვენ გვაქვს ყველა ერთმანეთზე დაწყობილი, ერთ მწკრივში.
ანუ ჩვენ უნდა შევცვალოთ y, ხომ?
ჩვენ ამას ვაკეთებდით მანამდე, როცა ჩვენ ვაკოპირებდით და ვსვავდით და
ეხლა, y ყოველთვის 90-ია.
ჩვენ გვინდა, რომ y იცვლებოდეს ყოველ მწკრივზე.
როგორც y დამოკიდებულია i-ზე, ჩვენ გვინდა, რომ y დამოკიდებული იყოს j-ზე.
შეგვიძლია ეს შევცვალოთ როგორც... შეიძლება, j გამრავლებული 30-ზე.
არის! უმრავი ძვირფასი ქვა. კარგია!
მოდით თავიდან განვიხილოთ ეს რას აკეთებს.
გარე loop-ი ქმნის ამ ცვლად j-ს და ზრდის 13-მდე.
და ყველა ამ გარე loop-ის შესრულებაზე, ამ შიდა loop-ს უშვებს.
შიდა loop-ი ქმნის ცვლად i-ს, რომელიც ადის 12-მდე.
და ყოველ შიდა loop-ის შესრულებაზე, ხატავს სურათს x და y-ზე,
რომელიც დამოკიდებულია i და j-ზე.
ამიტომ ეს i იცვლება უფრო ხშირად ვიდრე j.
იმისთვის რომ გავიგოთ ეს უკეთესად, მოდით წარმოვიდგინოთ i და y ცვლადები.
დავწერ სურათს კომენტარის სახით,
დავაყენებ შევსების ფერს,
და გამოვიყენებთ text ბრაძანებას, რომ გამოვაჩინო j ცვლადი, ანუ text j
და შემდეგ ჩავსვავ შესაბამაის ადგილზე აქ.
ეხლა ჩვენ ვხედავთ, რომ j მიდის 0-დან 12-მდე.
აქ იყო ჩვენი ძვირფასი ქვები განლაგებული.
მოდით ეხლა წარმოვიდგინოთ i და ვნახოთ როგორ იცვლება.
მოდით გავაკეთოთ სხვა ფერი i ცვალდისთვის.
შემდეგ ჩავსვათ i სადმე.
შევცვალოთ მისი x, რომ განლაგდეს ეკრანზე, გასწვრივ.
იგივეს გავაკეთებთ y ცვლადისთვის.
ეხლა შეგვიძლია ვთქვათ, რომ i იზრდება 0-დან 11-მდე.
როგორც ვიძახდი, i იცვლება ბევრად უფრო ხშირად,
და კოდის ეს ხაზი უფრო ხშირად სრულდება, ვიდრე ეს ხაზი,
იმიტომ რომ კოდის ეს ხაზი სრულდება, შიდა for loop-ის ყოველ შესრულებაზე.
მაშინ როდესაც ეს კოდი, სრულდება გარე loop-ის ყოველ შესრულებაზე.
იმედია i და j ცვალდების წარმოდგენა,
გეხმარებათ უკეთ გაიგოთ რა ხდება ამ nested for loop-ებში.
ეხლა მოდით დავაბრუნოთ ჩვენი ძვირფასი ქვები, რადგან უფრო მაგარია!
ამ nested for loop-ებით ბევრი რამის გაკეთება შეგიძლიათ.
თუ უბრალოდ წარმოიდგენთ ყველაფერს სამყაროში, რაც
გამოიყურება როგორც ორ განზომილებიანი ბადე, მაგალითად ჭადრაკის დაფა,
ვარსკვლავები ამერიკის დროშაზე, ლამაზი მოხატულობა ან შპალერი.
ჩართეთ თქვენი წარმოსახვა და ითამაშეთ ამ კოდით,
მაგალითად სურათის შეცვლით.
მე შევცვლი გულით.
რომ განახოთ როგორ მიყვარს nest for loop-ები.