1 00:00:00,000 --> 00:00:02,350 >> [موسیقی] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 داگ لوید: بسیار خوب. 4 00:00:06,360 --> 00:00:07,770 نوع یک موضوع عجیب و غریب، درست است؟ 5 00:00:07,770 --> 00:00:09,050 اعداد سحر و جادو. 6 00:00:09,050 --> 00:00:12,012 چه DOE منظور او وقتی که او صحبت کردن در مورد اعداد سحر و جادو؟ 7 00:00:12,012 --> 00:00:14,220 خب، برخی از برنامه های که ما در CS50 نوشته ام 8 00:00:14,220 --> 00:00:16,660 تا کنون برخی عجیب و غریب داشته اند تعداد نوع آنها در پرتاب می شود. 9 00:00:16,660 --> 00:00:19,680 شاید به دلایل ما نمی در حال حاضر به طور کامل درک کنید. 10 00:00:19,680 --> 00:00:23,950 برای مثال، در مشکل ماریو، ما ارتفاع این هرم در 23 رساند. 11 00:00:23,950 --> 00:00:26,880 ما به صراحت گفت: نمی توانید به بالاتر از 23. 12 00:00:26,880 --> 00:00:28,702 >> اما چه 23 چیست؟ 13 00:00:28,702 --> 00:00:30,410 خوب، اگر شما خواندن تنظیمات دقت، شما 14 00:00:30,410 --> 00:00:32,493 ممکن است دیده می شود که دلیل ما آن را در 23 پوش 15 00:00:32,493 --> 00:00:36,160 این دلیل است که ارتفاع استاندارد از یک پنجره ترمینال 24 است. 16 00:00:36,160 --> 00:00:38,860 و به این ترتیب اگر ما هرم بلندتر از آن است، 17 00:00:38,860 --> 00:00:41,290 آن ممکن است این چیز عجیب و غریب انجام که در آن اجرا می شود روی صفحه نمایش. 18 00:00:41,290 --> 00:00:45,140 و شما می دانید، چه که به معنای در زمینه، درست است؟ 19 00:00:45,140 --> 00:00:48,880 >> آیا معنای 23 بلافاصله آشکار به کسی که در برنامه های خود را به نظر می رسد 20 00:00:48,880 --> 00:00:51,550 و شاید یک مختلف اندازه پنجره ترمینال؟ 21 00:00:51,550 --> 00:00:52,330 احتمالا نه. 22 00:00:52,330 --> 00:00:53,080 آن را مانند به نظر می رسد، OK. 23 00:00:53,080 --> 00:00:55,005 خب، چرا، این فقط کمتر از 23 است؟ 24 00:00:55,005 --> 00:00:56,880 به طور کلی، این نوع از یک عادت بد در واقع 25 00:00:56,880 --> 00:00:58,940 به ثابت را به کد خود را. 26 00:00:58,940 --> 00:01:02,190 در انجام این کار، هنگامی که شما در واقع انجام ارسال یک ثابت را به کد خود را، 27 00:01:02,190 --> 00:01:05,630 آن را گاهی اوقات به عنوان مراجعه کننده با استفاده از اعداد سحر و جادو، چیزی است که 28 00:01:05,630 --> 00:01:08,030 ما به طور کلی می خواهم به تلاش و جلوگیری از. 29 00:01:08,030 --> 00:01:12,830 >> به عنوان مثال، اجازه دهید یک نگاه در این تابع ساده است. 30 00:01:12,830 --> 00:01:15,726 بدیهی است هیچ اطلاعات وجود دارد نوع در C به نام کارت یا عرشه. 31 00:01:15,726 --> 00:01:16,600 پس فقط با من داشته باشد. 32 00:01:16,600 --> 00:01:18,910 این یک کمی از این شبه مخلوط در اینجا. 33 00:01:18,910 --> 00:01:21,050 این یک تابع به نام است مقابله کارت که ظاهرا 34 00:01:21,050 --> 00:01:26,570 طول می کشد یک طبقه را به عنوان پارامتر، و خروجی به من یک کارت تک. 35 00:01:26,570 --> 00:01:30,990 >> و من انجام کاری که در آن من در اینجا یک حلقه است که 0-52 اجرا می شود، 36 00:01:30,990 --> 00:01:33,394 و من برخورد یک کارت. 37 00:01:33,394 --> 00:01:35,310 خب، ما سحر و جادو کردم تعداد در اینجا، درست است. 38 00:01:35,310 --> 00:01:38,790 آیا میدانید چه تعداد سحر و جادو است. 39 00:01:38,790 --> 00:01:42,280 و یا مهمتر از آن، شما انجام ببینید که چه مشکل این است که اینجا هستید؟ 40 00:01:42,280 --> 00:01:44,310 به خصوص اگر این فقط یک تابع است 41 00:01:44,310 --> 00:01:48,030 در فایل خود را در یک پوشه ای که حاوی 42 00:01:48,030 --> 00:01:49,970 یک دسته از مختلف فایل های، که هر کدام 43 00:01:49,970 --> 00:01:51,670 می کند چیز دیگری که به یک دسته کارت. 44 00:01:51,670 --> 00:01:57,310 شاید آن را شافل، و یا معاملات دست از پنج کارت به جای یک کارت تک. 45 00:01:57,310 --> 00:01:59,420 >> آیا شما آنچه را ببینید مشکل در اینجا می تواند؟ 46 00:01:59,420 --> 00:02:03,220 هنوز تعداد سحر و جادو شما را ببینید من را به کد تزریق کرده اید؟ 47 00:02:03,220 --> 00:02:04,390 آن را 52، درست است. 48 00:02:04,390 --> 00:02:06,440 >> مانند، به طور مستقیم شما احتمالا می دانید، OK. 49 00:02:06,440 --> 00:02:09,740 مانند عرشه استاندارد از کارت شامل 52 کارت است. 50 00:02:09,740 --> 00:02:12,570 اما در برنامه های ما، آن را فقط نوع شناور در اطراف وجود دارد. 51 00:02:12,570 --> 00:02:15,280 آن را مانند همه ناگهانی یک 52 وجود دارد. 52 00:02:15,280 --> 00:02:18,290 >> یکی از راه های حل این مشکل این است که برای انجام این کار. 53 00:02:18,290 --> 00:02:22,724 ما بسیار به صراحت در حال حاضر فریاد اندازه عرشه 52. 54 00:02:22,724 --> 00:02:25,390 آن را می دهد و آن را بصری کمی بیشتر به این معنی که در حلقه for 55 00:02:25,390 --> 00:02:28,650 بعد از ما پس از آن می گویند، من کمتر از اندازه عرشه است. 56 00:02:28,650 --> 00:02:32,666 این فقط به نظر می رسد بهتر از گفتن 52. 57 00:02:32,666 --> 00:02:34,290 در حال حاضر این کار در واقع مشکل را حل. 58 00:02:34,290 --> 00:02:38,460 آن را به برخی از نمادین به این معنی که به ثابت است. 59 00:02:38,460 --> 00:02:40,820 اما آن را در واقع نوعی از معرفی یکی دیگر از مشکل 60 00:02:40,820 --> 00:02:43,770 که ممکن است بلافاصله آشکار. 61 00:02:43,770 --> 00:02:45,859 حتی اگر این متغیر اعلام globally-- 62 00:02:45,859 --> 00:02:47,650 آیا شما آنچه در آن یاد یعنی زمانی که ما اعلام می کنیم 63 00:02:47,650 --> 00:02:50,500 یک متغیر در سطح جهانی در مقابل محلی؟ 64 00:02:50,500 --> 00:02:53,340 حتی اگر ما یک متغیر در سطح جهانی، اگر وجود دارد 65 00:02:53,340 --> 00:02:55,500 تابع دیگر در مجموعه ما را از توابع 66 00:02:55,500 --> 00:02:59,750 که در برخورد با دستکاری کارت که سهوا تغییر اندازه عرشه، 67 00:02:59,750 --> 00:03:02,727 یا آن را افزایش می دهد آن را توسط 1 یا آن را توسط 1 کاهش می یابد. 68 00:03:02,727 --> 00:03:04,060 که می تواند ایجاد مشکل نماید، درست است؟ 69 00:03:04,060 --> 00:03:08,261 به خصوص اگر ما در حال برخورد با یک مجموعه از کارت های که در آن برروی آن بکشید عرشه کامل 70 00:03:08,261 --> 00:03:08,760 مورد نیاز است. 71 00:03:08,760 --> 00:03:12,804 اگر اندازه عرشه کاهش یافته است 1، برای مثال، برای 51، 72 00:03:12,804 --> 00:03:14,970 ما در واقع نمی برروی آن بکشید تمام کارت احتمالا. 73 00:03:14,970 --> 00:03:16,500 ما در حال ترک یکی از آنها را. 74 00:03:16,500 --> 00:03:21,680 و شاید که ارزش می تواند پیش بینی و یا سوء استفاده توسط یک بازیگر بد است. 75 00:03:21,680 --> 00:03:24,920 >> C فراهم می کند آنچه به نام دستور پیش پردازنده که 76 00:03:24,920 --> 00:03:27,764 همچنین یک ماکرو برای نام ایجاد ثابت نمادین است. 77 00:03:27,764 --> 00:03:30,180 و در واقع، شما در حال حاضر دیده می شود یک دستور پیش پردازنده، 78 00:03:30,180 --> 00:03:32,916 حتی اگر شما آن شنیده نشد به نام که با کد: #include. 79 00:03:32,916 --> 00:03:37,150 این یک مثال دیگر از یک ماکرو است و یا بخشنامه پیش پردازنده. 80 00:03:37,150 --> 00:03:41,290 >> راه را برای ایجاد ثابت نمادین، و یا دادن یک نام به یک ثابت 81 00:03:41,290 --> 00:03:43,740 به طوری که آن را تا بیش به این معنی که، به شرح زیر است. 82 00:03:43,740 --> 00:03:47,030 # تعریف، نام، جایگزینی. 83 00:03:47,030 --> 00:03:49,140 واقعا مهم کنار اینجا واقعا سریع است. 84 00:03:49,140 --> 00:03:54,180 آیا یک نقطه و ویرگول در قرار داده نشده پایان #defines خود را. 85 00:03:54,180 --> 00:03:57,310 پس از آن # تعریف، نام، جایگزینی است. 86 00:03:57,310 --> 00:03:59,540 >> هنگامی که برنامه خود را وارد شده است، چه واقع اتفاق می افتد 87 00:03:59,540 --> 00:04:01,740 کامپایلر اگر رفتن است به طریق کد خود را به 88 00:04:01,740 --> 00:04:06,770 و جایگزین هر نمونه از کلمه "نام" با هر آنچه شما 89 00:04:06,770 --> 00:04:08,860 قرار دادن به عنوان جایگزینی. 90 00:04:08,860 --> 00:04:13,060 همین قیاس، اگر # شامل مرتب سازی بر اساس از شبیه به کپی و چسباندن، 91 00:04:13,060 --> 00:04:15,700 پس از آن # تعریف مرتب سازی بر اساس به پیدا کردن و جایگزینی، 92 00:04:15,700 --> 00:04:19,180 اگر شما تا کنون که از ویژگی های در استفاده می شود برنامه پردازش کلمه، برای مثال. 93 00:04:19,180 --> 00:04:26,345 >> بنابراین برای مثال، اگر من # تعریف PI به عنوان 3.14159265، 94 00:04:26,345 --> 00:04:28,720 اگر شما بهتر ریاضی هستید تمایل شما به طور ناگهانی و 95 00:04:28,720 --> 00:04:31,640 3.14159265 پرواز را ببینید در اطراف در کد خود را، 96 00:04:31,640 --> 00:04:33,517 شما احتمالا می دانید آن را در مورد PI صحبت کردن. 97 00:04:33,517 --> 00:04:35,850 اما شاید ما می توانیم آن را به یک را کمی معنای نمادین بیشتر است. 98 00:04:35,850 --> 00:04:39,850 و ما می توانید به جای # تعریف می گویند PI که لقمه از شماره 99 00:04:39,850 --> 00:04:42,110 که من قصد دارم به نگه داشتن خواندن بیش از بیش. 100 00:04:42,110 --> 00:04:45,560 >> و چه اتفاقی خواهد افتاد پس از آن در زمان کامپایل است زمانی که برنامه 101 00:04:45,560 --> 00:04:48,530 وارد شده، اولین چیزی که خواهد افتاد آن است آن را از طریق رفتن 102 00:04:48,530 --> 00:04:51,520 و آن را در هر زمان جایگزین آن را می بیند P سرمایه، سرمایه من، 103 00:04:51,520 --> 00:04:55,610 آن را به معنای واقعی کلمه را جایگزین آن را با 3.14 و غیره، به طوری که شما 104 00:04:55,610 --> 00:04:58,090 لازم نیست که به نوع آن در هر زمان در حالی که برنامه های خود را هنوز هم 105 00:04:58,090 --> 00:05:00,631 دارای قابلیت های که شما انتظار می رود، چرا که شما در حال کار 106 00:05:00,631 --> 00:05:05,090 با دستکاری، ضرب، تقسیم، هر چه که توسط Pi است. 107 00:05:05,090 --> 00:05:08,230 >> شما به این محدود نمی تعویض فقط برای شماره. 108 00:05:08,230 --> 00:05:12,279 به عنوان مثال، من می توانم # تعریف البته به عنوان CS50 رشته. 109 00:05:12,279 --> 00:05:14,070 در این مورد، زمانی که برنامه وارد شده است، 110 00:05:14,070 --> 00:05:16,236 # تعریف را از طریق رفتن کد، جایگزین هر زمان 111 00:05:16,236 --> 00:05:19,900 آن را "البته" می بیند با CS50 رشته. 112 00:05:19,900 --> 00:05:21,720 >> شما اینجا هستید متوجه خواهید شد همچنین که من بارها 113 00:05:21,720 --> 00:05:26,090 همه # تعریف من تعریف نمادین ثابت، پس به صحبت می کنند، 114 00:05:26,090 --> 00:05:28,130 همیشه در همه کلاه. 115 00:05:28,130 --> 00:05:28,960 این یک قرارداد است. 116 00:05:28,960 --> 00:05:30,170 این مورد نیاز است. 117 00:05:30,170 --> 00:05:33,900 دلیل به طور کلی مردم استفاده خواهد تمام مراکز زمانی که آنها #defining 118 00:05:33,900 --> 00:05:37,590 فقط به آن را واقعا روشن است که این عنصر خاص از کد من 119 00:05:37,590 --> 00:05:38,820 ثابت تعریف شده است. 120 00:05:38,820 --> 00:05:43,730 اگر آن را با حروف کوچک بود، آن را ممکن است ممکن است آن را با یک متغیر اشتباه گرفته شود. 121 00:05:43,730 --> 00:05:46,120 و این احتمالا به یک چیز خوبی است. 122 00:05:46,120 --> 00:05:48,910 >> بنابراین این خاص راه حل خیلی بهتر است 123 00:05:48,910 --> 00:05:50,550 از هر کدام از آنهایی که قبلی. 124 00:05:50,550 --> 00:05:59,950 اگر من # تعریف اول اندازه 52، پس از آن اکنون استفاده من از 52، و یا اندازه عرشه در اینجا، 125 00:05:59,950 --> 00:06:01,850 بسیاری بیشتر بصری و خیلی امن تر است. 126 00:06:01,850 --> 00:06:03,280 شما می توانید یک ثابت دستکاری نیست. 127 00:06:03,280 --> 00:06:05,259 شما نمی توانید بگویید 52 به علاوه به علاوه. 128 00:06:05,259 --> 00:06:06,800 که نمی آن را تبدیل به 53. 129 00:06:06,800 --> 00:06:09,390 شما می توانید 52 به چیزی تغییر نمی کند. 130 00:06:09,390 --> 00:06:12,470 >> شما می توانید یک متغیر تغییر که ارزش 52، 131 00:06:12,470 --> 00:06:14,870 که برای اولین بار ثابت ما را قبل از. 132 00:06:14,870 --> 00:06:17,000 و شما می توانید افزایش که متغیر به 53. 133 00:06:17,000 --> 00:06:21,100 اما نمی توان گفت 52 به علاوه به علاوه و که ناگهان به نوبه خود 52 به 53. 134 00:06:21,100 --> 00:06:23,350 52 همیشه 52. 135 00:06:23,350 --> 00:06:28,860 و بنابراین شما نمی توانید سهوا تغییر اندازه عرشه در اینجا با دستکاری آن، 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> یکی دیگر از طرف خوب اثر این است هر چند 138 00:06:32,390 --> 00:06:38,310 که شما آگاه هستند که نمی همه کشورها در سراسر جهان 139 00:06:38,310 --> 00:06:40,690 استفاده از یک دسته کارت از اندازه 52؟ 140 00:06:40,690 --> 00:06:45,630 به عنوان مثال، آن را واقعا مشترک آلمان به استفاده از یک اندازه عرشه از 32، 141 00:06:45,630 --> 00:06:48,020 که در آن آنها نوار برخی از کارت های ارزش پایین تر است. 142 00:06:48,020 --> 00:06:50,960 و در این مورد، من به پورت مجموعه من می خواستم 143 00:06:50,960 --> 00:06:55,390 از توابع است که با برخورد دستکاری کارت به آلمان است. 144 00:06:55,390 --> 00:06:59,440 من می توانم در وهله اول ما نشان داد، باید به و جایگزین 145 00:06:59,440 --> 00:07:03,570 همه موارد از 52 در کد من با 32. 146 00:07:03,570 --> 00:07:07,940 >> اما در اینجا، اگر من # تعریف اندازه عرشه 32 در بالا بسیار از کد من، 147 00:07:07,940 --> 00:07:11,730 اگر من نیاز به آن را تغییر دهید، من می توانم فقط بروید و تغییر آن یک چیز است. 148 00:07:11,730 --> 00:07:15,010 کامپایل مجدد کد من، و همه از ناگهان آن را منتشر طریق. 149 00:07:15,010 --> 00:07:18,850 در واقع، ما می توانید عرشه تغییر اندازه به هر مقدار ما می خواهیم. 150 00:07:18,850 --> 00:07:22,500 >> آیا من می توانم شما را در یک علاقه بازی وانت اندازه عرشه؟ 151 00:07:22,500 --> 00:07:23,430 >> من داگ لوید هستم. 152 00:07:23,430 --> 00:07:25,840 و این CS50. 153 00:07:25,840 --> 00:07:27,772