>> [მუსიკის დაკვრა]
DOUG LLOYD ყველა უფლება.
უცნაური თემაზე, არა?
Magic ნომრები.
რა საერთოდ იგი ნიშნავს, როდესაც ის ვსაუბრობთ ჯადოსნური ნომრები?
ისე, ზოგიერთი პროგრამები რომ ჩვენ წერილობით CS50
ჯერჯერობით არ გვქონდა უცნაური ციფრები სახის დააგდეს მათ.
ალბათ მიზეზი, ჩვენ არ მთლიანად გვესმოდეს, ახლა.
მაგალითად, მარიო პრობლემა, იხურება სიმაღლე პირამიდის 23.
ჩვენ მკაფიოდ განაცხადა, რომ თქვენ ვერ აღემატება 23.
>> მაგრამ რა 23 ნიშნავს?
ისე, თუ წაიკითხა სპეც ყურადღებით, თქვენ
შეიძლება არ ჩანს, რომ მიზეზი ჩვენ დაფარული იგი 23
იმიტომ, რომ სტანდარტული სიმაღლე ტერმინალის ფანჯარა 24.
ასე რომ, თუ ჩვენ გვაქვს პირამიდის უნდა გადააჭარბოს, რომ
ეს შეიძლება ამის გაკეთება უცნაური რამ სადაც იგი გადის off ეკრანზე.
და თქვენ იცით, რა ეს იმას ნიშნავს, რომ კონტექსტში, უფლება?
>> მნიშვნელობა აქვს 23 მაშინვე აშკარა მათ, ვინც უყურებს თქვენი პროგრამა
და იქნებ აქვს სხვადასხვა ზომა ტერმინალის ფანჯარაში?
ალბათ, არა.
როგორც ჩანს,, OK.
ისე, რატომ არის ეს უბრალოდ ნაკლებია, ვიდრე 23?
ზოგადად, ეს არის სახის ცუდი ჩვევა რეალურად
დაწერა მუდმივები თქვენს კოდი.
ამგვარად, როდესაც თქვენ ნამდვილად წერენ მუდმივი თქვენი კოდი,
ის ზოგჯერ მოხსენიებული, როგორც გამოყენებით ჯადოსნური ნომრები, რასაც
ჩვენ ზოგადად შევეცდები და თავიდან ავიცილოთ.
>> მაგალითად, მოდით შევხედოთ ამ მარტივი ფუნქცია აქ.
ცხადია, არ არსებობს მონაცემები ტიპი C მოუწოდა ბარათი ან deck.
ასე რომ მხოლოდ აგებს ჩემთან ერთად.
ეს ცოტა pseudocode შერეული აქ.
ეს არის ფუნქცია მოუწოდა გაუმკლავდეთ ბარათი, რომელიც, როგორც ჩანს,
იღებს deck, როგორც მისი პარამეტრი და დაბეჭდავს ჩემთვის ერთი ბარათი.
>> და მე ვაკეთებ რაღაც აქ, სადაც მე აქვს loop, რომელიც ეშვება 0-დან 52,
და მე გაუმკლავდეთ ბარათი.
ისე, ჩვენ მივიღეთ ჯადოსნური ნომერი აქ, მარჯვნივ.
ნუ ხედავთ, რა ჯადოსნური ნომერი?
ან კიდევ უფრო მნიშვნელოვანია, თქვენ რა პრობლემა აქ?
განსაკუთრებით, თუ ეს მხოლოდ ერთი ფუნქცია
საკუთარი ფაილი საქაღალდე, რომელიც შეიცავს
bunch სხვადასხვა ფაილი, რომელთაგან თითოეული
ჯერ კიდევ ერთი რამ deck ბარათების.
შესაძლოა, ეს ურევს მათ, ან ეხება ხელით ხუთი ბარათების ნაცვლად ერთი ბარათი.
>> ნუ ხედავთ, თუ რა პრობლემა შეიძლება იყოს აქ?
ხედავთ ჯადოსნური ნომერი მე გაუკეთეს შევიდა კოდი?
ეს არის 52, მარჯვნივ.
>> მსგავსად, ინტუიციურად თქვენ ალბათ იცით, OK.
ისევე როგორც სტანდარტული deck ბარათები შეიცავს 52 ბარათები.
მაგრამ ჩვენი პროგრამა, უბრალოდ სახის მცურავი გარშემო არსებობს.
ეს იგივეა, უეცრად იქ არის 52.
>> ერთი გზა, რათა მოგვარდეს ეს პრობლემა ის არის, რომ ამის გაკეთება.
ჩვენ ძალიან მკაფიოდ ახლა მოუხმო გემბანზე ზომა 52.
ეს აძლევს მას ცოტა უფრო ინტუიტიური რაც იმას ნიშნავს, როდესაც ამისთვის მარყუჟის
მოგვიანებით ჩვენ მაშინ ამბობენ, i ნაკლებია, ვიდრე გემბანზე ზომა.
უბრალოდ, როგორც ჩანს, უკეთესი, ვიდრე ამბობდა 52.
ახლა ეს არ რეალურად დაფიქსირება პრობლემა.
ეს არ მისცეს გარკვეული სიმბოლური რაც იმას ნიშნავს, რომ მუდმივი.
მაგრამ ეს იმას სახის რეალურად წარმოგიდგინოთ კიდევ ერთი პრობლემა
რომ არ შეიძლება მაშინვე აშკარა.
მაშინაც კი, თუ ეს ცვლადი ცხადდება globally--
თქვენ გავიხსენოთ, თუ რა იმას ნიშნავს, როდესაც ვაცხადებთ
ცვლადი გლობალურად წინააღმდეგ ადგილობრივად?
მაშინაც კი, თუ ჩვენ განაცხადოს ცვლადი მსოფლიო მასშტაბით, რა, თუ არ არის
კიდევ ერთი ფუნქცია ჩვენი კომპლექტს ფუნქციები
რომ გარიგება განყოფილებიდან მანიპულირება რომ უნებლიედ ცვლის გემბანზე ზომა,
ან ზრდის მას 1 ან ამცირებს მას 1.
ეს შეიძლება სიტყვიერად პრობლემები, არა?
მით უმეტეს, თუ ჩვენ საქმე კომპლექტი ბარათები, სადაც თვლიან სრული deck
არ არის საჭირო.
თუ deck ზომა შემცირდება 1, მაგალითად, 51,
ჩვენ რეალურად არ თვლიან ყველა ბარათი შესაძლოა.
ჩვენ ტოვებს, მათ შორის ერთი out.
და რომ ღირებულება შესაძლოა იყოს წინასწარმეტყველებს და ექსპლუატაციაში ცუდი მსახიობი.
>> C უზრუნველყოფს რასაც preprocessor დირექტივა, რომელიც
ასევე მოუწოდა მაკრო შექმნის სიმბოლური მუდმივები.
და სინამდვილეში, თქვენ უკვე ჩანს preprocessor დირექტივა,
მაშინაც კი, თუ თქვენ არ გამიგია მოუწოდა, რომ მოიცავს.
ეს არის კიდევ ერთი მაგალითი იმისა, მაკრო ან preprocessor დირექტივა.
>> გზა შექმნა სიმბოლური მუდმივები ან იძლევა სახელი მუდმივი
ისე, რომ მას აქვს უფრო მეტი რაც იმას ნიშნავს, ასეთია.
განსაზღვრავს, სახელი, ჩანაცვლება.
ძალიან მნიშვნელოვანია, განზე აქ მართლაც სწრაფი.
არ დააყენოს მძიმით ბოლოს თქვენი # განსაზღვრავს.
ასე რომ, ეს განსაზღვრავს, სახელი, ჩანაცვლება.
>> როდესაც თქვენი პროგრამა შედგენილია, რა ხდება
არის შემდგენელი თუ აპირებს გავლა თქვენი კოდი
და შეცვლის ყველა ინსტანციის სიტყვა "სახელი" რასაც თქვენ
ბოლო შეცვლის.
ანალოგიურად, თუ # include არის ერთგვარი ანალოგიური გადაწერა და pasting,
შემდეგ განსაზღვრავს სახის მსგავსი იპოვოს და შეცვლის,
თუ თქვენ ოდესმე გამოიყენება, რომ ფუნქცია სიტყვა დამუშავების პროგრამა, მაგალითად.
>> ასე მაგალითად, თუ მე # განსაზღვრავს pi როგორც 3.14159265,
თუ თქვენ უკეთესი მათემატიკურად დახრილი და თქვენ მოულოდნელად
იხილეთ 3.14159265 საფრენი გარშემო თქვენი კოდი,
ალბათ, იცით, ეს ლაპარაკი pi.
მაგრამ იქნებ ჩვენ შეგვიძლია ეს ცოტა უფრო სიმბოლური მნიშვნელობა აქვს.
და ჩვენ შეგვიძლია ნაცვლად ამბობენ, განსაზღვრავს pi, როგორც, რომ mouthful ნომრები
რომ მე არ ვაპირებ, რომ შევინარჩუნოთ კითხულობს მეტი და მეტი.
>> და რა მოხდება მაშინ შედგენა დრო, როდესაც პროგრამა არის
შედგენილი, პირველი, რაც მოხდება ეს გაივლიან
და იგი ჩაანაცვლებს ყველა დროის ის ხედავს დედაქალაქში P, დედაქალაქის I,
ის ყველაფერს სიტყვასიტყვით შეცვალოს იგი 3.14 და ასე შემდეგ, ასე რომ თქვენ
არ უნდა აკრიფოთ ეს ყოველ დროს თქვენი პროგრამა ჯერ
აქვს ფუნქცია, რომ თქვენ ველოდოთ, რადგან თქვენ სამუშაო
ერთად მანიპულირება, გამრავლებით, გამყოფი, რაც არის pi.
>> თქვენ არ შემოიფარგლება ეს ცვლილება ნომრები მხოლოდ.
მაგალითად, მე ვერ # განსაზღვრავს რა თქმა უნდა, როგორც სიმებიანი CS50.
ამ შემთხვევაში, როდესაც პროგრამა შედგენილია,
განსაზღვრავს გაივლიან კოდი, შეცვალოს ყოველ ჯერზე
ის ხედავს "რა თქმა უნდა," სიმებიანი CS50.
>> თქვენ შეამჩნევთ აქ ასევე, რომ მე ხშირად
განსაზღვრავს ყველა ჩემს განსაზღვრული სიმბოლური მუდმივები, ასე ვთქვათ,
ყოველთვის ყველა Caps.
ეს კონვენცია.
ეს არ არის საჭირო.
ამის მიზეზი, ზოგადად, ადამიანი გამოიყენებს ყველა დედაქალაქში, როდესაც ისინი #defining
არის მხოლოდ, რომ მას მართლაც ნათელია, რომ ამ კონკრეტულ ელემენტის ჩემი კოდი
არის განსაზღვრული მუდმივი.
თუ ეს იყო ამას, ეს შესაძლებელია, რომ ეს შეიძლება იყოს დაბნეული ერთად ცვლადი.
და ეს, ალბათ, არ არის კარგი საქციელი.
>> ასე რომ, ამ კონკრეტულ გამოსავალი არის ბევრად უკეთესი
ვიდრე რომელიმე წინა პირობა.
თუ მე პირველად განსაზღვრავს გემბანზე ზომა 52, მაშინ ახლა ჩემი გამოყენება 52, ან გემბანზე ზომა,
არის უფრო ინტუიტიური და ბევრი უფრო უსაფრთხო.
თქვენ არ შეგიძლიათ მანიპულირება მუდმივი.
თქვენ ვერ ვიტყვი, 52 plus plus.
ეს არ აპირებს გარდაქმნას იგი 53.
თქვენ ვერ შეცვლის 52 რაღაც.
>> თქვენ შეგიძლიათ შეცვალოთ ცვლადი რომლის ღირებულება არის 52,
რომელიც იყო პირველი სარემონტო გვქონდა ადრე.
თქვენ შეიძლება გაიზარდოს რომ ცვლადი 53.
მაგრამ ვერ ვიტყვი, 52 plus plus და აქვს, რომ მოულოდნელად იქცეს 52 მხოლოდ 53.
52 ყოველთვის 52.
და ასე რომ თქვენ ვერ უნებლიედ შეცვლა გემბანზე ზომა აქ მანიპულირება,
>> კიდევ ერთი კარგი მხარე ეფექტი, თუმცა არის
რომ თუ იცის, რომ არ ყველა ქვეყნის მთელს მსოფლიოში
გამოყენება deck ბარათების ზომა 52?
მაგალითად, ეს მართლაც საერთო გერმანია გამოიყენოთ deck ზომა 32,
სადაც ისინი ზოლები ზოგიერთი ქვედა ბარათები.
და ამ შემთხვევაში, მე სურდა პორტში ჩემი სუიტა
ფუნქციები რომ გაუმკლავდეთ ანკეტა მანიპულირება გერმანიაში.
შემეძლო, პირველ რიგში, ჩვენ აჩვენა, უნდა წავიდეს და შეცვლის
ყველა ინსტანციის 52 ჩემი კოდი 32.
>> მაგრამ აქ, თუ მე # განსაზღვრავს გემბანზე ზომა 32 ძალიან ზევით ჩემი კოდი,
თუ მე უნდა შეცვალოს იგი, შემიძლია უბრალოდ წასვლა და ცვლილება, რომელიც ერთი რამ.
გადააკომპილეთ ჩემს კოდი, და ყველა უეცრად იგი ვრცელდება მეშვეობით.
ფაქტობრივად, ჩვენ შეგვიძლია შევცვალოთ deck ზომა ნებისმიერი მნიშვნელობა გვინდა.
>> შემიძლია დაგაინტერესოთ in a თამაში გემბანზე ზომა პიკაპი?
>> მე Doug Lloyd.
და ეს არის CS50.