[Powered by Google Translate] [სემინარი] [JavaScript ჩარჩო: რატომ და როგორ?] [Kevin შმიდი] [ჰარვარდის უნივერსიტეტი] [ეს არის CS50.] [CS50.TV] Hi, ყველასთვის. კეთილი JavaScript ჩარჩო სემინარს. ჩემი სახელი Kevin და დღეს მე ვაპირებ ვისაუბრებთ JavaScript ფარგლებში, და მიზანი ამ სემინარზე არ არის მისაღებად თქვენ უნდა, ვთქვათ, დაეუფლონ კონკრეტულ ფარგლებში თავისთავად მაგრამ გადმოგცეთ ფართო შესავალი რამოდენიმე ფარგლებში და აჩვენებს ამიტომ ჩვენ ოდესმე გვინდა გამოვიყენოთ ფარგლებში. სანამ ამის გაკეთება, მე უზრუნველყოფს მცირე ფონზე JavaScript, და მაშინ ჩვენ მას იქ. ჩვენ ვაპირებთ დავიწყოთ განხორციელებით დავალებები. აი ჩვენი ამოცანა სია დღეს. ეს არის სახის მხიარული. ჩვენ უნდა განვახორციელოთ დავალებები in JavaScript. ეს არის ის, რაც ხდება ასე, ისე, რომ ჩვენი პირველი მიზანია. ჩვენ არ ვაპირებთ გამოვიყენოთ ფარგლებში გაგვაჩნია. ჩვენ ვაპირებთ კოდი JavaScript და მიიღეთ დავალებების სია მუშაობა. მაშინ ჩვენ ვაპირებთ გასაუმჯობესებლად დიზაინი გამოყენების გარეშე ფარგლებში. ჩვენ ვაპირებთ განვიხილოთ სხვადასხვა ნივთები შეგვიძლია მხოლოდ JavaScript მარტო იმისათვის, რომ ჩვენი დავალებები უფრო მოფიქრებული. მაშინ ჩვენ ვაპირებთ იმისათვის, რომ ზოგიერთ jQuery, და მაშინ ჩვენ ვაპირებთ შევხედოთ იგივე დავალებები, უბრალოდ განხორციელდა სხვადასხვა ჩარჩოების და ჩვენ განვიხილავთ  დადებითი და Cons გზაზე. დავიწყოთ ახორციელებს, რომ დავალებები. ვთქვათ ჩვენ, ამ HTML. მე ვაპირებ, რომ ეს პატარა პატარა. როგორც ხედავთ, მაქვს პატარა თავით, რომელიც ამბობს, Todo და პატარა ყუთი სად შეიძლება შევა აღწერილობა Todo და შემდეგ ახალი პუნქტის ღილაკს, მოდით შევძლოთ არაკონტროლირებად ახალი Todo ამ სიას. მიეცით JavaScript ფარგლებში სემინარი, და მე მოხვდა ახალი პუნქტის. მივიღებ ამ JavaScript მზადყოფნაში, რომელიც ამბობს, განახორციელოს მე. გვაქვს ამის შესრულება. მოდით შეამოწმეთ კოდი ამ ორივე HTML და JavaScript. აი ჩვენი HTML. როგორც ხედავთ აქ, აქ არის ჩვენი პატარა Todos მა. ეს იყო, რომ თამამი რამ ზედა, და მაშინ ჩვენ გვაქვს შეტანის ყუთი placeholder, და მერე იქ გარკვეული ატრიბუტია ამ ღილაკს რომ მოუწოდებს ამ ფუნქციის addTodo. ვინმეს აქვს სურთ რას, რომ დაჭერით არის ფიქსირდება? [სტუდენტური inaudible საპასუხოდ] კარგი, მე დაჭერით არის ერთგვარი, როგორიც ღონისძიება, ისევე როგორც დაწკაპვა მხოლოდ მოვლენა, და იმას თუ რას ვაკეთებთ არის ჩვენ ჩვევების შემთხვევაში ამ ღილაკს, რათა შესრულდეს, რომ ფუნქცია. AddTodo არის ამ ღონისძიების კურატორმა for დაჭერით რომ ღილაკს. როგორც ხედავთ, როდესაც მე დააწკაპუნეთ ახალი პუნქტის ღილაკს on დაჭერით ღონისძიება იღებს მოქმედებს, და ამ ფუნქციას იღებს მოუწოდა. მოდით შევხედოთ ფუნქციას. როგორც ხედავთ, აქ არის ჩემი JavaScript კოდი ჯერჯერობით. რა ზედა არის გლობალური მონაცემთა სტრუქტურის ჩემი დავალებები. როგორც ჩანს მასივი. უბრალოდ ცარიელი მასივი. და მაშინ მე მაქვს addTodo ფუნქცია, რომელიც ჩვენ ვნახეთ, ადრე, და მხოლოდ ხაზი კოდი იქ არის ეს მზადყოფნაშია მოყვანილი. ეს შეტყობინებები განხორციელება ჩემთვის, შემდეგ კი მაქვს 2 ამოცანების ხელთ. მე უნდა დაემატოს Todo რომ გლობალური მონაცემთა სტრუქტურის, ხოლო შემდეგ მინდა შევაჩერო გარეთ დავალებები. არაფერი ძალიან მიეცით უბრალოდ არ არის, მაგრამ JavaScript შეიძლება უცხო ერთად, ასე რომ მე ვაპირებ წასვლა ნელი და განიხილოს საფუძვლები JavaScript, რომ გზა. მოდით მივცეთ ამ გოლით. ვთქვათ შესატანი რაღაც ამ ყუთში. უბრალოდ აკრეფილი რაღაც აქ, ტექსტი. როგორ შემიძლია დასალაგებლად მისასვლელი რომ ტექსტის მეშვეობით JavaScript? გახსოვდეთ, რომ JavaScript, ერთ ერთი ფუნდამენტური თვისებები არის ის, რომ ეს გვაძლევს ამ პროგრამული ხელმისაწვდომობის DOM. ეს საშუალებას გვაძლევს, რათა შეამოწმონ ელემენტები და მათი თვისებების ამ ფაქტობრივი HTML. ჩვენ გავაკეთოთ, რომ შიშველი ძვლები JavaScript ჩვენ შეიძლება რეალურად გამოიყენოთ ფუნქცია JavaScript მოუწოდა getElementByID. მინდა შესანახად ტექსტი რომ აკრეფილი იქ რამდენიმე ცვლადი, ასე რომ მე ვაპირებ ვთქვა ახალი ცვლადში new_todo, და მე ვაპირებ მიიღოს, რომ ელემენტს. ეს არის ფუნქცია,. GetElementByID. ახლა კი მე მისაღებად ელემენტს ით, ამიტომ გვჭირდება ID, რომ ტექსტში ყუთი, ასე რომ მე თუ გავითვალისწინებთ, რომ ეს ID new_todo_description. ასე მე ვაპირებ მისაღებად ელემენტს. ეს არის ჩემი არგუმენტი ამ ფუნქციის დაზუსტება, რომელიც ID მისაღებად. ასე რომ, ეს არის ის ელემენტი, HTML, და მას აქვს თვისებები. ვნახე ეს. ისინი ატრიბუტები. ატრიბუტია ტექსტი ელემენტს, რომელიც ინახავს მომხმარებლის შეტანის ეწოდება ღირებულება. მე გადაარჩინა ღირებულება, რომ ტექსტში ყუთი ახლა ამ ცვლადში new_todo. ახლა პროგრამული შესვლის ცვლადი, რომელიც სახის cool რადგან ახლა შემიძლია გააკეთოთ შემიძლია დაამატოთ ეს ჩემი დავალებები. ჩვენ ყველაფერს გააკეთებს ამის JavaScript-და არ ინერვიულოთ თუ თქვენ უცხო ერთად ამ, მაგრამ გადის ეს todos.push რადგან ეს სახელი ჩემს გლობალური მონაცემთა სტრუქტურის აქ, და მე ვაპირებ დააყენებს new_todo. ეს არის დიდი, რადგან ახლა მე დასძინა, რომ ეს ჩემს JavaScript წარმომადგენლობა, რომ დავალებები. მაგრამ ახლა როგორ მივიღებ უკან HTML? მე უნდა იპოვოს სახის დააყენებს უკან. სხვა სიტყვებით, I ტიპის უნდა მიაპყროს ამ. რა ჩვენ ვაპირებთ ამის გაკეთებას, ჩვენ ვაპირებთ, შემუშავდეს დავალებები. მე უნდა განახლდეს სხვა HTML შესახებ, რომ გვერდზე, და როგორც ხედავთ, მე დაუტოვებიათ ამ პატარა კონტეინერი აქ, ამ divider გვერდზე, რომლის ID არის Todos, და მე ვაპირებ დააყენოს დავალებების სია არსებობს. პირველი მე ვაპირებ გარკვევა ეს იმის გამო, ვთქვათ, იყო ძველი დავალებები არსებობს. მე მისაღებად, რომ ელემენტს ით ისევ, და მე წვდომის შიდა HTML იმ ელემენტს, და მე ვაპირებ მიანიშნა, რომ. თუ ჩვენ არ ეს კოდი როგორც არის, ჩვენ მინდა ვხედავ ცარიელი არაფერი არსებობს, და ახლა მინდა, რომ დაიწყოს გაწევის ჩემი ახალი დავალებები. მე ძირითადად აპირებს wipe out ჩემი დავალებები. ახლა შიდა HTML შიგნით რომ Todos div სრულიად ნათელია, და ახლა უნდა დაიწყოს დასძინა ჩემს სიაში. პირველი, რაც მინდა დავამატო, უკან არის უწესრიგო სია tag, რომლებიც ძირითადად აღნიშნავს, რომ ეს არის დაწყების უწესრიგო სია. ახლა ყველა ელემენტის ჩემს Todos მასივი მინდა ბეჭდვა ის შიგნით რომ HTML. მინდა დამატება ის რომ ბოლოში ამ სიაში. ისევე, როგორც C, შემიძლია for ციკლი, და მე ვაპირებ, რომ დაიწყოს დასაწყისში ჩემი სია ზე ელემენტს 0, და მე ვაპირებ წავიდეთ ყველა გზა ხანგრძლივობა სიაში. ჩვენ შეგვიძლია რეალურად მიიღონ ხანგრძლივობა როდის JavaScript გამოყენება სიგრძის ქონება. ძირითადად მე ვაპირებ, რომ რამე ძალიან ჰგავს შიგნით აქ ბეჭდვა, რომ ელემენტს. შემიძლია კვლავ წვდომის Todos div, შიდა HTML ქონებას რომ, და მე ვაპირებ დამატების შესახებ ამ ახალი სიის ელემენტი, და რომ იქნება გარშემორტყმული ამ li tag, და მე ვაპირებ concatenate ერთად + ოპერატორი, და ეს შ ელემენტის ჩემი Todos მასივი, და შემდეგ მე ვაპირებ ახლოს რომ აქვს. ახლა ყველა ელემენტის ჩვენ დავამატებთ ახალ სიაში ჩანაწერი. და მაშინ რიგში, ჩვენ ნამდვილად უნდა დახუროს off რომ აქვს. მე უბრალოდ უნდა დახუროს off, რომ უწესრიგო სია აქვს. იღებთ ფიქრობს, როგორ მუშაობს? ეს ხსნის სრული სია. ეს დასძენს ინდივიდუალური ელემენტების Todos სია სია, და მაშინ, რომ იხურება მთელი სია, და ეს არის ჩემი addTodo ფუნქცია. მე ძირითადად დაიწყოს მიღების Todo ეხლა ტექსტში ყუთი. დავამატო რომ Todos მასივი, და მერე ხელახლა გაწევა დავალებები. ახლა კი შეგიძლიათ ნივთები ჩემს სიაში. ეს არის ერთგვარი მღელვარე, რადგან სულ რამდენიმე ხაზი კოდი ჩვენ ძირითადად გააკეთა დავალებები, სადაც შეგვიძლია დაამატოთ საკითხი. დიდი. სწორედ ასეთი ძირითადი შესავალი JavaScript. არ ინერვიულოთ ძალიან ბევრი შესახებ სინტაქსი არის, მაგრამ ამაზე კონცეპტუალურად. ჩვენ გვქონდა HTML. ჩვენ გვქონდა ტექსტში ყუთი გვერდზე რომ ძირითადად საშუალებას შეტანის დავალებების ელემენტის დამატება. და მაშინ ჩვენ JavaScript მოიტანონ, რომ Todo, რომ ტექსტში ყუთი. ჩვენ შენახული, რომ შიგნით JavaScript მასივი, რომელიც ძირითადად მოსწონს პროგრამული წარმომადგენლობა, რომ დავალებები, და მერე იბეჭდება ის. ეს არის todos.js. ეს არის ერთგვარი ზემოთ, მაგრამ როგორ შეგვიძლია ეს კიდევ უფრო? ისე, როგორც ხედავთ, ეს არ მოსწონს სრული დავალებები. მაგალითად, მე ვერ აღსანიშნავად რომელიმე ამ საკითხი, როგორც არასრულყოფილი, მიყვარს თუ მინდოდა reprioritize ნივთები ან წაშლა საკითხი. ეს არის კარგი, მაგრამ ჩვენ ეს კიდევ უფრო. მე არ ვაპირებ გაიგო ძალიან ბევრი შესახებ და დასძინა, დამატებით თვისებები, მაგრამ ვერ მიიღოს, რომ შემდგომი. ვისაუბროთ იმაზე დასძინა კიდევ ერთი ფუნქცია ამ დავალებების სია, რაც უნდა, რათა შეამოწმოს ინდივიდუალური დავალებების პუნქტის და არ იყოს გადმოკვეთა out, ასე რომ ძირითადად ამბობდა მე ვაკეთებ ამას. მოდით შევხედოთ ზოგიერთი კოდი, რომელიც შეიძლებოდა მიზნის მისაღწევად, რომ. გავითვალისწინოთ, რა მე გაკეთდეს ზედა არის მე დასძინა ახალი გლობალური მასივი მოუწოდა სრული. მე ძირითადად გამოყენებისას შესანახად თუ არა ნივთები დავალებების სია არის სრული თუ არა. ეს არის ერთი გზა ამის გაკეთება. თუ გავითვალისწინებთ განხორციელების, ჩვენების, ძირითადად, თუ მე შევა Todo და მე დააჭიროთ ამ გადართვა ღილაკს იგი გადაკვეთს out, ასე რომ ყველა პუნქტის ამ სიაში აქვს ან სრული ან არასრული სახელმწიფო და მე გამოყენებით მორიგი მასივი იმას რომ. ძირითადად ყოველი Todo ამ Todos მასივი არსებობს პუნქტის სრული მასივი, რომელიც ძირითადად მიუთითებს თუ არა, რომ არის სრული თუ არა. მე მქონდა, რათა საკმაოდ მინიმალური ცვლილებები ამ კოდექსით, ასე რომ აქ ჩვენი addTodo ფუნქცია. გავითვალისწინოთ რომ აქ ვარ ზრდის ეს onto მასივი, და მაშინ მე უბიძგებს 0 რომ სრული მასივი, ძირითადად პარალელურად, რომ ახალი Todo ბიძგი ვთქვა მე დასძინა ამ ელემენტის, და ეს ერთად ამ მნიშვნელობის, რაც იმას ნიშნავს, რომ ეს არასრული. და მაშინ მე redrawing დავალებები. Now, შეამჩნევთ, მე დასძინა ამ drawTodoList ფუნქცია. ეს იღებს a lot of the კოდი, რომ ჩვენ გვქონდა ადრე, , ძირითადად, კლავიშს გამოყავს out box და შემდეგ ამახვილებს new to-გასაკეთებელ სამუშაოთა ნუსხაში. მაგრამ, შეამჩნევთ, რომ შიგნით of ამ for loop ვაკეთებთ a little უფრო მეტი ახლა. ჩვენ ძალიან, ძირითადად, შემოწმების თუ არა item შესაბამისი to შ Todo აქ არის სრული, და სხვა მრავალი ლოკაცია behaving განსხვავებულად in ამ 2 გარემოებათა მიუხედავად. იმ შემთხვევაში, თუ it არის ის, სრული, გვსურს სხვებისათვის თან იქვე დასძინა, ამ del tag, , რომელიც ძირითადად გზით თქვენ შეგიძლიათ მიიღონ, რომ strike through effect გადახაზვის to-გასაკეთებელ სამუშაოთა ნუსხაში ​​შემთხვევაში, თუ იგი არის ის, სრული, , და თუ მას მაინც არ არის, ჩვენ არა ვართ მათ შორის, იგი. და, ამგვარად,, რომ kind of ზრუნავს ამაზე, და, რომ არის ერთ ერთი საშუალებაა, რათა მიზნის მისაღწევად. და მაშინ შეამჩნევთ, მაშინ, როდესაც მომხმარებელი იმოქმედებს ერთი ასეთი ჩვენ გადართვის დასრულების status of იგი. როდესაც მომხმარებელი დაწკაპუნებით, ჩვენ თვალსაჩინოს გავხდით, რევერსი: თუ არა იგი ბმული, რომლითაც ამ დასრულებული თუ, არ, და შემდეგ ჩვენ თვალსაჩინოს გავხდით, მეთოდით გადასინჯვის იგი. ეს kind of სამუშაოების დროს. ჩვენ გვყავს ამ ფუნქციების, რომ განახორციელოს out მათი საკუთარი ამოცანები, და ეს არის okay. Is there ყველაფერი, რასაც ჩვენ შეეძლო ამის გაკეთება უკეთესი about ეს, თუმცა? როგორც შენიშნეთ, რომ ჩვენ გვაქვს ამ 2 გლობალურ მასივები. იმ შემთხვევაში, თუ ეს გახდა იმის C, და ჩვენ ჰქონდა 2 მასივები, რომ kind of წარმოდგენილია მონაცემები, რომ იყო sort of თან დაკავშირებული in ზოგიერთ გზა , თუ რა იქნებოდა ჩვენ ვიყენებთ in C-დან დააკავშიროთ ამ 2 fields შევიდა რაღაც, რომ encapsulates ორივე საჯარიმო დარტყმები of ინფორმაცია? Anybody გვინდა, რომ გააკეთოს წინადადების გამოგზავნის? [სტუდენტური inaudible საპასუხოდ] თუ ზუსტად, ასე რომ,, რომლის გამოყენება შეიძლებოდა გამოიყენოთ ზოგიერთი kind of struct, და თუ თქვენ ვფიქრობ, რომ back to, ვთქვათ, pset 3, გვახსოვდეს,, რომ ჩვენ გვქონდა ლექსიკონში, და შემდეგ, რომ ჩვენ გვქონდა თუ არა word იყო პირველითგან ლექსიკონში, და ყველა, რომ information იყო დააყენა ერთად შიგნით of გარკვეული მონაცემების სტრუქტურა. One, რაც შემიძლია გავაკეთოთ ერთად ეს კოდი, რათა თავიდან ავიცილოთ, რომელსაც გააჩნია these 2 სხვადასხვა მასივები , ის მსგავს საჯარიმო დარტყმები of information არის მე შემიძლია დააკავშიროთ მათ into გაგაჩნია JavaScript-ის object. მოდით, ყველამ ერთად მიიღოს look at, რომ. როგორც შენიშნეთ I მხოლოდ და მხოლოდ გვაქვს ერთი array at top ახლა უკვე და რა მე გაკეთდეს is-და ეს არის just გაგაჩნია JavaScript-ის syntax for sort of ქმნის ლიტერატურული მობილური of object, და შეამჩნია არსებობს 2 properties, ასე რომ,, რომ ჩვენ გვაქვს Todo, და ეს ინახებოდა ერთად, რამდენად მიზანშეწონილია complete ან არასრული. ეს არის ძალიან ანალოგიური კოდი. ჩვენ ძალიან გამოყენებით გაგაჩნია JavaScript-ის ობიექტები. ეს kind of აუმჯობესებს things. Like კი ახლა, ყველა ამ fields of მასთან დაკავშირებული სხვა ინფორმაციის, რომელშიც ინახება ერთად რედაქტირება. როდესაც ჩვენ go to ბეჭდვა it out, ჩვენ შეგვიძლია წვდომისათვის სფეროებში. როგორც შენიშნეთ, რა არის ჩვენი ვაკეთებთ Todos [i]. Complete ნაცვლად იმისა, of შემოწმების წინაშე სრული array ცალკე, და შეამჩნია როდესაც ჩვენ გვინდა, რომ მიიღოთ to-ამის გაკეთება string გვსურს სხვებისათვის საყრელად to-ამის გაკეთება საკუთრების of, რომ Todo, ასე რომ ეს kind of ხდის sense იმიტომ, რომ ყოველ item ვიზიტორების these intrinsic properties ამის შესახებ. მას აქვს Todo, და მას აქვს, რამდენად მიზანშეწონილია complete ან არ. Not too many ცვლილებების ჩვენება there ფუნქციურად just დასძინა, ზოგიერთი უფრო მეტი იმ კოდი. ეს არის გაუმჯობესების on ზოგიერთი ფრონტზე, უფლება? I ნიშნავს იმას,, ჩვენ factored out design bit. ახლა ჩვენ გვაქვს objects to, ძირითადად, encapsulate ამ მონაცემთა. Is there არაფერი უფრო მეტი, რომლის გამოყენება შეიძლებოდა ამის გაკეთება from აქ in terms of გაგაჩნია JavaScript-ის? Like notice, რომ ეს კოდი უფლება აქ ის მიღების &, რომ მათი შიდა HTML of div არის a little, I გამოიცნოს,, long. აქ არის document.getElementByID ("Todos"). InnerHTML. ერთი რამ,, რომლის გამოყენება შეიძლებოდა გავაკეთოთ, რათა გააკეთოს ეს კოდი გამოიყურებოდეს a little მეგობრულად ასე რომ მე აღარ ექნებოდათ იმისათვის, რომ შევინარჩუნოთ სკროლის მარცხენა და მარჯვენა, უკან და მეოთხე, არის I შეეძლო ესარგებლა library, როგორიც არის jQuery. მოდით, ყველამ ერთად სანახავად out სემინარი 2, და ეს არის იგივე კოდექსი, მაგრამ ეს კეთდება with jQuery. თქვენ შეიძლება არ გქონდეთ too ნაცნობი with jQuery, , არამედ სამართლიანი ვიცით, რომ jQuery არის sort of ბიბლიოთეკა ამისთვის გაგაჩნია JavaScript-ის , რომ იღებს მას უფრო ადვილია, უნდა გააკეთოს, რამ, როგორიცაა ხელმისაწვდომობის ინდივიდუალურ ელემენტებს, of DOM. Here ნაცვლად იმისა, of ამბობდა, document.getElementByID ("Todos"). InnerHTML I შეგიძლიათ გამოიყენოთ much cleaner way in jQuery, , რომელიც არის მხოლოდ იმისათვის, რომ გამოიყენოთ სელექციონერები. როგორც ხედავთ, ეს კოდი საერთოდ მიიღოთ a little cleaner, ძალიან მსგავსია ფუნქციურად, მაგრამ, რომ არის ის,, იდეა მისაღებია. ჩვენ ვნახეთ & couple of things, ასე რომ შორს, ასე რომ, ჩვენ დაიწყო, with just raw გაგაჩნია JavaScript-ის განხორციელება უკვე დაიწყო. ჩვენ დასძინა, new თვისებები და გვიჩვენა, თუ როგორ ჩვენ მას შეუძლია, გააუმჯობესოს it with უბრალოდ, რა, რომ ჩვენ გვაქვს in JavaScript. ვინმეს აქვს იხ. ნებისმიერი სირთულე with ამ design? რომელშიც ბასტრიკინი აღნიშნავს, I გამოიცნოს,-or არ ემთხვეოდეს სირთულეები, მაგრამ ნება-ის ფეხბურთელი ვთქვა, ჩვენ კი კომპენსაციას არ ვაკეთებთ to-გასაკეთებელ სამუშაოთა ნუსხაში ​​პროექტის ფარგლებში, და ხვალ ჩვენ გადავწყვიტეთ, გვინდოდა, რათა სასურსათო სიაში ან shopping ლენტა პროექტის ფარგლებში. ბევრი ამ features are ძალიან მსგავსი იყო. Lot of things ჩვენ გვინდა, რომ მისაღებად out of გაგაჩნია JavaScript-ის are ძალიან საერთო, და ეს ხაზგასმით ავლენს, მოთხოვნილება გარკვეული kind of way of მიღების ამ უფრო ადვილია, უნდა გააკეთოს. მე მქონდა, რომ აშენდეს up ყველა of ამ HTML ხელმისაწვდომობის, ყველა ამ DOM წვდომის, ისევე, როგორც მე ვაპირებ, რათა წარმოადგინოს to-გასაკეთებელ სამუშაოთა ნუსხაში ​​with ამ მოდელის. და შეამჩნია I ვარ, პასუხისმგებელი, როგორც გაგაჩნია JavaScript-ის developer for ინახავდა მოქალაქე HTML და გაგაჩნია JavaScript-ის, რომ მე გვყავს in sync. Nothing ავტომატურად გააკეთა, რომ გაგაჩნია JavaScript-ის წარმომადგენლობის ან იმ to-do ლენტა get უბიძგა out to HTML. Nothing აღასრულებენ,, რომ გარდა for me. მე მქონდა რომ ჩაწეროს draw to-do ლენტა ფუნქცია. და, რომ შესაძლოა არ იყოს-I ნიშნავს იმას,, ის არის გონივრულ to გავაკეთოთ, რომ, მაგრამ ეს შეიძლება იყოს tedious ზოგჯერ. თუ თქვენ გაქვთ უფრო დიდი პროექტი, რომელიც, შეიძლება იყოს რთულია. ფორმატების გათვალისწინებით, one of the მიზნებისათვის of ჩარჩოსთან არის ის, რომ გაამარტივოს, რომ პროცესი და sort of factor out ამ საერთო-I გამოიცნოს, თქვენ შეიძლება ითქვას,-design შაბლონებს , რომ ადამიანები, ზოგადად აქვს გარკვეული kind of way of გვერდია წარმოადგენს მონაცემები, შესაბამისად, თუ არა, რომ არის ის, friends ფაილების საკუთარი სია, თუ არა, რომ არის ის, map information ან რაღაც ან to-do საქმიანობათა სიაში შედის. ზოგიერთი ადამიანი გვყავს ზოგადად way of გვერდია წარმოადგენს information, და ისინი ზოგადად გვჭირდება იმისათვის, რომ შევინარჩუნოთ იმას, რომ ინფორმაციის sort of in sync შორის, თუ რა, ასევე მომხმარებლის ხედავს, in ზოგიერთი kind of view, რომ ვთქვათ in terms of, როგორიც არის the model view controller, რომ თქვენ დაინახა, in lecture, გამო, მერე კი მოდელზე, რომლებიც ამ შემთხვევაში არის ამ გაგაჩნია JavaScript-ის მასივი. ჩარჩოსთან მისცეს us way, რათა გადაჭრას, რომ პრობლემის მიმართ. ახლა ნება-ის ფეხბურთელი მიიღოს look at განხორციელების of ამ to-გასაკეთებელ სამუშაოთა ნუსხაში in a ჩარჩო მოუწოდა angularjs. ეს არის იგი. როგორც შენიშნეთ ეს შეესაბამება on a slide. მე არ მაქვს to გადახვევა to მარცხენა და მარჯვენა. That, ალბათ, რომელიც არ არის great მიზეზი იმისთვის, რომ რეკომენდაცია განცხადება გამოყენებით ჩარჩო, , მაგრამ notice ვარ მე ever წვდომის ინდივიდუალურ HTML ელემენტებს, აქ? სული მაქვს, I ever აპირებს წუთზე ის DOM? უჭერთ თუ არა ვხედავთ რაიმე document.getElementByID ან რამე მაგდაგვარს, რომ? No, ეს არის ის, ლიდერობის შენარჩუნებისთვის შეცვალა. Angular ეხმარება us შენარჩუნება DOM და ჩვენი გაგაჩნია JavaScript-ის წარმომადგენლობის of something kind of in sync, ასე რომ, შემთხვევაში, თუ იგი არის ის, არ შედის, js file, იმ შემთხვევაში, თუ there არ არის გზა of პროგრამულად საყრელად to ყველა, რომ HTML content from the გაგაჩნია JavaScript-ის თუ როგორ ვართ ჩვენ, შენახვა ამ in sync? იმ შემთხვევაში, თუ ეს არ არის in the. Js ფაილი, ის ის მიიღო, რომ იყოს in HTML, უფლება? ეს არის ახალი მობილური of the HTML file, და შეამჩნია ჩვენ 've დასძინა, a lot აქ. როგორც შენიშნეთ there არის ის, these new თვისებებია, რომლითაც რესპოდენტებმა, რომ ვთქვა, ng-click და ng-განმეორებით. Angular-ის ფეხბურთელი მიდგომა, რათა გადაჭრის ამ პრობლემის გამოსწორება of სირთულეები, in design არის ის, რომ, ძირითადად, გააკეთოს HTML much უფრო მძლავრი. Angular არის way of რომლებმაც მისცეს საშუალება, გაძლევთ, რათა HTML გარკვეულწილად უფრო ექსპრესიული,. For მაგალითად, შემიძლია ვთქვა, რომ მე ვაპირებ რომ გვაკავშირებს ან, სავალდებულოა ამ ტექსტის მიმართ box to ცვლადი ფარგლებში ჩემი Angular გაგაჩნია JavaScript-ის კოდი. ეს ng-model does უბრალოდ, რომ. That, ძირითადად, ამბობს, რომ & item შიგნით of ამ ტექსტის მიმართ box, just ასოცირებას, რომ with ცვლადი new_todo_description ფარგლებში გაგაჩნია JavaScript-ის კოდი. ეს არის ის, ძალიან ძლიერი იმიტომ, რომ მე არ გაქვთ to არსებითათ go to the DOM to მიიღონ, რომ information. მე არ მაქვს to ვთქვა, document.getElementByID. მე არ მაქვს to გამოიყენოთ jQueries, როგორიც არის DOM ხელმისაწვდომობის. მე შემიძლია გაიგივებას ცვლადი, და შემდეგ მაშინ, როდესაც მე შეცვალოთ, რომ variable ფარგლებში გაგაჩნია JavaScript-ის · პროფილი · პირადი ინახებოდა in sync ერთად HTML, , ასე რომ, რომელიც აადვილებს პროცესის of მქონე to go უკან და მეოთხე შორის ორი. აქვს თუ არა, რომ მიიღოს sense? და შეამჩნია იქ არ არის HTML ხელმისაწვდომობის კოდი. ჩვენ 've მხოლოდ გააკეთა HTML უფრო ძლიერი, და ახლა, for მაგალითი, ჩვენ არ შეუძლია გააკეთოს რამ, როგორიცაა ამ, მოეწონა, როცა you ღილაკის ამ, დარეკეთ ამ ფუნქციის იმ უფლებამოსილების ფარგლებში of todos.js, და ჩვენ შეეძლო ამის გაკეთება რომ მანამ, სანამ, მაგრამ არსებობს სხვა რამ,, ისევე, როგორც ამ ng-მოდელი, და შეამჩნია ამ ng-განმეორებით. რას მოვიგებ ფიქრობთ, ამ does? აქ არის ის, ჩვენი უწესრიგო სია from ეს ადრე იყო. ჩვენ გვყავს ul tags, , მაგრამ ვარ მე ever გაწევის, რომ ლენტა შიგნით of the გაგაჩნია JavaScript-ის კოდი? მე არ ever არსებითათ გაწევის, რომ საქმიანობათა სიაში შედის. როგორ does this მუშაობს? Well, way Angular ახორციელებს ამ არის ეს ეწოდება repeater. ძირითადად ეს ნათქვამია, რომ მე მინდა, რომ ბეჭდვა ამ HTML სრული გამოყენება ყოველი Todo შიგნით of my Todos მასივი. Inside of todos.jr there არის Todos array უფლება აქ, და ეს will tell Angular go მეშვეობით, რომ array, და სრული გამოყენება ყოველი ელემენტს თქვენ თვითონაც ხომ ხედავთ მე მინდა გაძლევთ ამობეჭდოთ ამ HTML. ეს არის kind of awesome იმიტომ, რომ მე შეგიძლიათ მხოლოდ ამის გაკეთება ამ გარეშე გადასვლის წერენ for loop, , რომელიც ძალიან დიდი to-do ლენტა, რომ იყო მხოლოდ 30 lines of კოდი შეიძლება არ იქნებოდა ყველაზე ბენეფიციალურ რამ არ ვთქვა, , მაგრამ, თუ თქვენ გაქვთ მრავალსართულიანი შენობის დიდი პროექტი, ამ შეიძლება მიიღოს ძალიან მოსახერხებელია. ეს არის ერთ ერთი გადაწყვეტა to ამ პრობლემის გამოსწორება, მიღების HTML უფრო ძლიერი, და, რომ საშუალებას აძლევს us იმისათვის, რომ შევინარჩუნოთ გაგაჩნია JavaScript-ის და HTML in sync. არსებობს სხვა შესაძლო გზები, რათა გადაჭრას ამ პრობლემის გამოსწორება, და არა ყოველ ჩარჩო does this. Not ყოველ ჩარჩო მუშაობს along ამ ხაზების. Some ჩარჩოსთან გვაქვს სხვადასხვა მიდგომების, და თქვენ შეიძლება აღმოაჩინოთ,, რომ თქვენ სარგებლობენ პროგრამირებაშიც in one ჩარჩო over the სხვა. მოდით შევხედოთ one more. ეს არის იმ to-გასაკეთებელ სამუშაოთა ნუსხაში ​​კოდირებული up in ჩარჩო მოუწოდა მთავარი საყრდენია. მე ვაპირებ to go მეშვეობით ამ სწრაფად. დავიწყებ with პირველი HTML ადრე ჩვენ იქ გადადითო. One მეორე. და იწყება იმ HTML,, როგორც თქვენ შეამჩნევთ,, ჩვენი HTML არის ძალიან მსგავსია to, თუ რა ეს იყო ადრე, ასე რომ, არ არის ძალიან ბევრი new on, რომელიც front. თუმცა ჩვენ ის js ფაილი არის a little განსხვავებული. მთავარი საყრდენია kind of ვიზიტორების ამ იდეას, ან აშენებს on the იდეა, , რომ a lot of, თუ რას ვაკეთებთ with, ვთქვათ, ჩვენი გაგაჩნია JavaScript-ის პროექტების არის ვიფიქროთ იმაზე, models და კოლექციების of ამ მოდელების. ეს შეიძლება იყოს, მაგალითად, ფოტო, კინო და კოლექციების of photos, ან იდეა, of friend და კოლექციების of friends. And oftentimes, როდესაც გვსურს სხვებისათვის დაპროგრამების გაგაჩნია JavaScript-ის applications ჩვენ თვალსაჩინოს გავხდით, დაალაგოთ ძიების შედეგად of წარმოადგენს იდეა, of, რომელსაც აქვს საქართველოში collection of friends მოახერხა და როგორღაც in გაგაჩნია JavaScript-ის, და მთავარი საყრდენია აძლევს us ამ ფენას on დაბრუნება of გაგაჩნია JavaScript-ის-ის ფეხბურთელი არსებული მასივები და ობიექტების უნდა გააკეთოს, უფრო მძლავრი რამ ერთად, რომ სულ უფრო ადვილად. Here I 've განისაზღვრება, to-do მოდელი, კარტები გაქვთ და არ ინერვიულოთ too ბევრი შესახებ სინტაქსის, , მაგრამ შეამჩნია რომ ის, რაც არის ერთ ერთი განსაკუთრებული properties of გაუკეთებდით ამ მასალას? მას აქვს მართებული: გსურთ ნაგულისხმევი მინდვრიდან. მთავარი საყრდენია საშუალებას აძლევს ჩემს, რომ ხელოვნურად მიუთითოთ უკვე off bat ნებისმიერი new to-გავაკეთოთ, რომ I შექმნათ აპირებს იმ დოკუმენტალური აქვს ეს ნაგულისხმევი პასუხები. ახლა მე შეგიძლიათ Customize ამ, მაგრამ მიმდინარეობს შეუძლია, რომ ხელოვნურად მიუთითოთ ნაგულისხმევი პასუხები არის nice, და ეს არის სახის of მოსახერხებელია, რადგან ეს არ არის რაღაც ეს არის ის,, როგორიც არის , რომლებიც თან ახლავს გაგაჩნია JavaScript-ის, და ახლა მე არ მაქვს to არსებითათ ვთქვა, რომ Todos are არასრული. მე შემიძლია ვთქვა, უფლება off bat, რომ Todos ვაპირებთ, რომ ძალიან არ იქნება მონიშნული როგორც არასრული. როგორც შენიშნეთ შემდეგ კი, თუ რა არის გაუკეთებდით ამ მასალას? Now I have a to-გასაკეთებელ სამუშაოთა ნუსხაში, და რომ არის ის, კოლექციის შექმნის საშუალებას. როგორც შენიშნეთ საველე ასოცირდება, რომელიც ამბობს, model Todo. ეს არის my way of ვეუბნებოდი, ძალას, რომლითაც მე ვაპირებ to იქნეს, რომ ამაზე დავფიქრდეთ collection of these ინდივიდუალურ Todos. ეს არის, ძირითადად, the model სტრუქტურის for my პროგრამა. Here I გვყავს ეს იდეა, of შეგროვების, და ძირითადად ნივთები შეიცავდა in, რომ collection ისინი ყველა შემთხვევაში აპირებს, რომ იყოს these Todos, და, რომ არის ძალიან ბუნებრივი in ამ sense იმიტომ, რომ მე ამის გაკეთება გვყავს Todos, და მე აქვს მათ in a კოლექციის შექმნის საშუალებას. მოდით შევხედოთ a little უფრო მეტი of ამ. Here არის მთავარი საყრდენია view. მეორე, რაც, რომ მთავარი საყრდენია ამბობს, არის ის, რომ a lot of the მოდელები, რომ you წერა ვარგა შესახებ, ან მაშინაც კი, კოლექციების ვაპირებთ, რომ ძალიან გვჭირდება, რომ გვქონდეს ზოგიერთ გზა of მიმდინარეობს ნაჩვენები. ჩვენ გვჭირდება to render, რომ პროფილაქტიკა უნდა-do ფაილების საკუთარი სია, და ჩემი სურვილი იქნებოდა არა იგი be nice, თუ ჩვენ შეუძლია, წარმოადგინოს, თითოეული model ან ასოცირებას ამასთან თითოეული model ამ view , რომელიც საშუალებას აძლევს us to I გამოიცნოს, დააკავშირებს ორი ერთად? მაშინ, როდესაც ადრე ჩვენ-ს ქონდა to გამოიყენოთ for loop, რომ იქნებოდა აწარმოებს მეშვეობით ყოველ Todo in ჩვენს სიაში და შემდეგ ბეჭდვა it out აქ ჩვენ შეგვიძლია, ძირითადად, დაკავშირება იგი with ამ მოდელის. ეს არის to-do view. ეს რომელიც ასოცირდება ასევე სრულიად Todo, ჩვენ აღმოვაჩინეთ ადრე. Now ყოველ Todo არის displayable ან renderable by this to-ამის გაკეთება view. როგორც შენიშნეთ some of სფეროებში. რას მოვიგებ ფიქრობთ, ამ tagName არის, tagName: li? დამახსოვრება წლამდე, როდესაც ჩვენ სურდა to render Todo ჩვენ მოგვიწევდა არსებითათ დააწყვილოთ ჩვენი Todos with ამ li ტეგით. Now გვსურს სხვებისათვის სიტყვებზე დაყრდნობით, რომ, სადაც ეს Todo არის ვაპირებთ ვიცხოვროთ აპირებს იმ დოკუმენტალური იყოს შიგნით of li ტეგით. და აწ ჩვენ ასევე ასოცირებით მოვლენების with ჩვენი Todos. Every Todo ვიზიტორების this one მოვლენაა. თუ თქვენ დააჭირეთ საკმაოდ ბევრი toggle ღილაკს,, რომ არის ის, რაც მე დიდი ამბობდა, there, შემდეგ კი, ძირითადად, აღსანიშნავად the Todo, როგორც საპირისპირო of, თუ რა ეს იყო ადრე და შემდეგ ხელახლა-გავუწიოთ განაცხადი. ეს არის kind of იმდენად მსგავსია, კოდი ეს ადრე იყო. დამახსოვრება, როდესაც ჩვენ marked მას, როგორც ან საერთოდ საპირისპირო or- და შემდეგ ჩვენ ხელახლა-გაწეულ იქნა იგი. , მაგრამ შეამჩნია ახლა უკვე ამ ღონისძიების გამოყენებული, რათა იყოს რაღაც, რომ იყო in HTML. It იჯდა there. გამოსახულებიან ღილაკს-ს ქონდა on click. როდესაც თქვენ დააჭირეთ ღილაკს, it kind of does stuff to მითითებული up, რომ Todo, რომ იყოს არასრული. Here we 've ასოცირდება, რომ event of დაწკაპვით, რომ toggle button and უკან შემობრუნება აქვთ განზრახული, რამდენად მიზანშეწონილია on ან off ერთად ამ view. ეს არის a nice way of ადგენს რეგიონის up ამ ღონისძიების ისე, რომ იგი არის ის, ძალიან მჭიდროდ გამოხატავთ თანხმობას to this view, და ასე შემდეგ შეამჩნევთ, this one more. I გვაქვს ეს render მეთოდით, არიან და ჩვენ არ უნდა გაიაროს, იმ დეტალებზე. ეს არის სახის of მსგავსია იმისა, რაც, რომ ჩვენ გვქონდა ადრე, , მაგრამ შეამჩნია მე არ looping through არაფერს. მე არ ოფსეტური ბეჭდვის, რომ ul tag ეს არის ის, sort of ამბობდა, მე ვაპირებ to ბეჭდვა ყველა of ელემენტებს. მე დიდი, რომელიც უზრუნველყოფს ფუნქციონალობას გაწევის გარკვეული this one to-ამის გაკეთება item. ეს არის ძალიან ძლიერი concept იმიტომ, რომ, ძირითადად, ჩვენი to-გასაკეთებელ სამუშაოთა ნუსხაში ​​შედგება of ყველა ამ Todos, და იმ შემთხვევაში, თუ ჩვენ შეგვიძლია, ძირითადად, დააკონკრეტა, way to render ერთი იმ Todos , მაშინ ჩვენ შეგვიძლია გვაქვს ჩვენი მძლავრი მთავარი საყრდენია per se გაუწიოს ყველა of Todos ზე დარეკვით render მეთოდი on the ინდივიდუალურ Todos. ეს არის კონცეფციას, რომ არის სასარგებლო აქ. ახლა კი კარგი კითხვა აგრეთვე ვთხოვო არის, თუ როგორ არის ამ განაცხადის მიმდინარეობს-მა გაიტანა ერთად? იმის გამო, რომ, რომ ჩვენ გვაქვს უნარი to render one Todo, მაგრამ, თუ როგორ, ჩვენ რას წარმოდგენა შეგექმნათ of მრავალჯერადი Todos? მოდით, ყველამ ერთად მიიღოს look at, რომ. ეს არის ბოლო ნაწილი. როგორც შენიშნეთ, რომ ჩვენ გვაქვს to-do ლენტა view აქ, და შეამჩნია ეს ასევე view. და დაახლოებოდა over couple of რამ, ამ initialize მეთოდი დაერქმევა, როდესაც ჩვენ პირველი შექმნა ამ to-do საქმიანობათა სიაში შედის. როგორც ხედავთ, ის არის, როგორიც არის ქმნის to-ამის გაკეთება სიაში და ასოცირებით with ამ view. And შემდეგ კი I დასძინა, ფუნქციების აქ ასე, ძირითადად,, როდესაც თქვენ დაამატოთ item- ამ არის მსგავსი to addItem მეთოდი დავინახეთ, before- მე ვაპირებ, რომელიც მის შესაქმნელად new Todo object, და შეამჩნია მე დიდი, ფაქტობრივად, დარეკვისას ამ new Todo მეთოდი, ასე რომ ეს არის იმ პირობით by ხერხემალი, and I შეგიძლიათ გადასცეთ in my properties აქ. და აწ ყოველ Todo, რომ შევქმნა გამოყენებით ეს ხელს მიიღონ, რომ ფუნქციონალობას, რომ ჩვენ დაინახა, ეს ადრე იყო. როგორც შენიშნეთ მე დიდი გაწმენდით out text box before-a small little დეტალურად- და შემდეგ მე დიდი თან იქვე დასძინა, ამ კოლექციის შექმნის საშუალებას. ეს ს ცოტა დააკლდა,, როგორც ჩანს, weird იმიტომ, რომ ადრე ჩვენ just-ს ქონდა to გავაკეთოთ, რომ todos.push, და შემდეგ ჩვენ გაკეთებულ იქნა მოდელი, და ეს შეუძლია, როგორც ჩანს უფრო რთული for this კერძოდ პროექტის ფარგლებში, და თქვენ შეიძლება აღმოაჩინოთ, რომ მთავარი საყრდენია ან მაშინაც კი, Angular ან ნებისმიერი სხვა ჩარჩო ს ჯერ არ ვარიანტს თქვენს კერძოდ პროექტის, მაგრამ მე ვფიქრობ, რომ ეს მნიშვნელოვანია, რათა ვიფიქროთ იმაზე, , თუ რა ეს იმას ნიშნავს, on a უფრო ფართო მასშტაბით for უფრო დიდი პროექტებს, იმიტომ, რომ თუ, რომ ჩვენ გვქონდა უფრო დიდი პროექტი, სადაც ჩვენ განმავლობაში იყვნენ რამდენიმე მართლაც complex შეგროვების, რაღაც უფრო სიღრმისეულსა მეტია, ვიდრე უბრალოდ to-ამის გაკეთება ფაილების საკუთარი სია, ასე ვთქვათ მეგობრების სიაში ან რამე მაგდაგვარს იმაში, რომ ეს შეეძლო მოსვლა in handy იმიტომ, რომ ჩვენ შეეძლო ორგანიზება ჩვენი კოდი in a ნამდვილად მოსახერხებელი გზა, in a იმგვარად, რომ გახდიდა მას უფრო ადვილია, for somebody else , ვისაც სურდა უნდა შეარჩიო up ერთი პროექტი განხორციელდა, ავაშენოთ upon. თქვენ შეგიძლიათ ხედავენ, რომ ეს უზრუნველყოფს a lot of სტრუქტურა. და მაშინ მე დიდი დარეკვისას გამოიტანოს on ამ addItem. გვერდის გენერირება,, როგორც თქვენ შეგიძლიათ იხილონ და თუ თქვენ ჩვენგან არ აქვს to ხელი მოკიდეთ ჩანგალს ამ full სინტაქსის, , მაგრამ, ძირითადად,, თითოეული model ეს სურვილი რამდენად მოვუწოდებთ ინდივიდუალურ render მეთოდის გამოყენებით. ეს არის ის, sort of, სადაც ეს რაც შეეხება, ის. მოდით, უბრალოდ დააკონკრეტა,, თუ როგორ უნდა გავუწიოთ ინდივიდუალურ Todos, და შემდეგ მოდი ყველა ერთად წებო მათ ერთად, როგორც მთელი. , მაგრამ ეს ის უზრუნველყოფს way of აბსტრაქცია, იმიტომ, რომ მე შეიძლება შეიცვალოს გზა მე გადაწყვიტოს, to render ინდივიდუალურ Todos, and I არ მოუწევდა შეცვალოთ ნებისმიერი of ამ კოდი. ეს არის ის, kind of cool. ვინმეს აქვს გაქვთ რაიმე შეკითხვები გაგაჩნია JavaScript-ის ჩარჩოსთან? [Student inaudible კითხვაზე] Oh, ვარ დარწმუნებული,, ეს არის ის, great question. კითხვაზე იყო, თუ როგორ, ვფიქრობთ, ავტორმა შეიცავდეს ჩარჩოსთან? ყველაზე პოპულარულები გაგაჩნია JavaScript-ის ჩარჩოსთან are ძირითადად, მხოლოდ js files , რომ თქვენ შეგიძლიათ შეიცავდეს at დაბრუნება of თქვენი კოდი. როგორც შენიშნეთ in head სამგზავრო ულუფა of my HTML მე მაქვს ყველა ამ script tags, და მათი საბოლოო script tag არის კოდი, რომ ჩვენ 've დაწერილი. და მაშინ 3 ჩარჩო კოდები are just ასევე script tags. მე დიდი მათ შორის, მათ თავი შეიკავონ, თუ რა ის მოუწოდა CDN, , რომელიც საშუალებას იძლევა me, რომ მიიღოთ it from somebody else ამ ეტაპზე ამ მაგრამ ყოველ ჩარჩო ვიზიტორების ამ-you შეგიძლიათ საკმაოდ ბევრი იპოვოს content for a კერძოდ გაგაჩნია JavaScript-ის library არ არის შესაძლებელი on ზოგიერთი CDN ან რამე მაგდაგვარს, რომ, და შემდეგ თქვენ შეიძლება შეიცავდეს these script tags. აქვს თუ არა, რომ მიიღოს sense? Cool. Those are 2 სხვადასხვა მიდგომები. Those are არ არის ერთადერთი მიდგომები to გადაჭრის ეს პრობლემა. არსებობს ბევრი სხვადასხვა რამ, რომ somebody შეეძლო ამის გაკეთება, და არ არსებობს არის ასევე უამრავი ჩარჩოსთან out არსებობს. კუთხოვანი and მთავარი საყრდენია იმიტომ არ ვამბობ, მთელი ამბავი. Good luck with თქვენი საბოლოო პროექტებს, და დიდი მადლობა გითხრათ very much. [CS50.TV]