პროგრამირების საფუძვლები › დამწყები › ობიექტები
რეალური საგნის აღწერა მონაცემებით
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ გადააქციო ნამდვილი საგანი ობიექტად
- როგორ აირჩიო თითოეული თვისების ტიპი
- როგორ ჩადგა მასივი ობიექტში და ობიექტი ობიექტში
ჯერ მონაცემები, მერე კოდი
გამოცდილი პროგრამისტები ახალ პროგრამას ხშირად კოდით კი არა, კითხვით იწყებენ: „რა მონაცემები მაქვს და როგორ შევინახო ისინი?“. თუ მონაცემები კარგად არის მოწყობილი, კოდი თითქმის თავისით იწერება. თუ ცუდად, ყოველი ახალი ფუნქცია ბრძოლად იქცევა.
ნამდვილი საგნის მონაცემებად აღწერას მოდელირება (modelling) ჰქვია. მოდელი ყოველთვის გამარტივებაა: საგნის ყველა დეტალს კი არ ინახავ, არამედ მხოლოდ იმას, რაც შენს პროგრამას სჭირდება.
ნაბიჯი 1: რა ვიცით საგანზე
ვთქვათ, ბიბლიოთეკისთვის პროგრამას წერ და წიგნი უნდა აღწერო. ჩამოწერე ყველაფერი, რაც პროგრამას სჭირდება: სათაური, ავტორი, გამოცემის წელი, ხელმისაწვდომია თუ გატანილი, ჟანრები. ყდის ფერი? ბიბლიოთეკის პროგრამას, სავარაუდოდ, არ სჭირდება, ამიტომ მოდელში არ ჩავწერთ.
ნაბიჯი 2: სწორი ტიპი თითოეულს
ყოველ თვისებას ის ტიპი მიეცი, რომელიც მის შინაარსს შეესაბამება:
- ტექსტი სახელებისთვის და აღწერებისთვის:
title,author. - რიცხვი იმისთვის, რასაც ითვლი ან ადარებ:
year. წელი ტექსტად რომ შეინახო,"2015" < "999"true იქნებოდა. - ლოგიკური კი/არა კითხვებისთვის:
isAvailable. სახელიis-ით დაიწყე, რომ კითხვასავით წაიკითხებოდეს. - მასივი იმისთვის, რაც შეიძლება ერთზე მეტი იყოს:
genres.
let book = {
title: "ვეფხისტყაოსანი",
author: "შოთა რუსთაველი",
year: 1712,
isAvailable: true,
genres: ["პოემა", "კლასიკა"]
};
console.log(book.genres[0]); // პოემა
console.log(book.genres.length); // 2book.genres[0] მარცხნიდან იკითხება: წიგნის ჟანრები, პირველი. 1712 აქ წიგნის პირველი ნაბეჭდი გამოცემის წელია.
ნაბიჯი 3: ობიექტი ობიექტში
ზოგი თვისება თვითონ რამდენიმე ნაწილისგან შედგება. ავტორს, მაგალითად, შეიძლება ჰქონდეს სახელი და დაბადების წელი. ასეთ დროს თვისების მნიშვნელობა ობიექტი ხდება:
let book = {
title: "დათა თუთაშხია",
author: {
name: "ჭაბუა ამირეჯიბი",
born: 1921
},
isAvailable: false
};
console.log(book.author.name); // ჭაბუა ამირეჯიბიწერტილები ჯაჭვად იკითხება: წიგნის ავტორის სახელი. ასეთ სტრუქტურას ჩადგმული (nested) მონაცემები ჰქვია. ნუ ჩადგამ ზედმეტად ღრმად: ორი-სამი დონე ჩვეულებრივ საკმარისია.
ნაბიჯი 4: ერთი ფორმა ყველასთვის
როცა საგანი ბევრია, მაგალითად ბიბლიოთეკის ყველა წიგნი, ყველა ობიექტს ერთი და იგივე თვისებები უნდა ჰქონდეს. ასე ერთი ციკლი და ერთი ფუნქცია ყველა წიგნზე იმუშავებს:
let library = [
{ title: "ვეფხისტყაოსანი", year: 1712, isAvailable: true },
{ title: "დათა თუთაშხია", year: 1975, isAvailable: false }
];
for (const b of library) {
console.log(`${b.title} (${b.year}) — ${b.isAvailable ? "თაროზეა" : "გატანილია"}`);
}სცადე თავად
გაუშვი, მერე დაამატე ბიბლიოთეკაში მესამე წიგნი იმავე ფორმით და დაბეჭდე, რამდენი წიგნია თაროზე.
ხშირი შეცდომები
- ყველაფერი ტექსტად.
year: "1975"დაisAvailable: "კი"მერე გამოთვლებს და შედარებებს აფუჭებს. რიცხვი რიცხვად, კი/არა ლოგიკურად. - ერთზე მეტი რამ ერთ ტექსტში.
genres: "პოემა, კლასიკა"ძნელი დასამუშავებელია. რაც შეიძლება ბევრი იყოს, მასივში შეინახე. - ზედმეტი დეტალი. მოდელში ჩაწერე მხოლოდ ის, რაც პროგრამას სჭირდება. ყოველი ზედმეტი თვისება შესავსები და შესამოწმებელია.
სავარჯიშო
აღწერე შინაური ცხოველი ობიექტით pet: სახელი, სახეობა, ასაკი (რიცხვი), აცრილია თუ არა (ლოგიკური) და სათამაშოების სია (მასივი, სულ მცირე ორი). დაბეჭდე წინადადება: ფისო არის კატა, 3 წლის, 2 სათამაშო აქვს.
💡 მინიშნება
სათამაშოების რაოდენობა: pet.toys.length. წინადადება შაბლონური სტრიქონით ააწყე.
✅ ამოხსნის ნახვა
let pet = {
name: "ფისო",
species: "კატა",
age: 3,
isVaccinated: true,
toys: ["ბურთი", "თაგვი"]
};
console.log(`${pet.name} არის ${pet.species}, ${pet.age} წლის, ${pet.toys.length} სათამაშო აქვს.`);მინი-ქვიზი
1რომელი ტიპი ჯობს თვისებას year (გამოცემის წელი)?
წლებს ვადარებთ და ვითვლით, ამიტომ რიცხვი.
2let b = { author: { name: "ილია", born: 1837 } }; რას დაბეჭდავს console.log(b.author.born);?
ჯაჭვი: b-ის author-ის born.
3რა არის მოდელირება?
მოდელი ყოველთვის გამარტივებაა.
შეჯამება
- პროგრამა მონაცემების დაგეგმვით დაიწყე: რა უნდა შეინახო და რა ფორმით.
- ტექსტი სახელებისთვის, რიცხვი გამოთვლებისთვის, ლოგიკური კი/არა კითხვებისთვის, მასივი სიებისთვის.
- რთული თვისება შეიძლება ობიექტი იყოს:
book.author.name. - ერთი სახის ყველა ობიექტს ერთნაირი თვისებები უნდა ჰქონდეს.