[Мусиц плаиинг] Даг Ллоид: У реду. Помало чудан теме, зар не? Магиц Нумберс. Шта срна он мисли кад је говоримо о Магиц Нумберс? Па, неки од програма да смо написали у ЦС50 До сада су имали нека чудна Број врста бачена у њима. Можда из разлога што не у потпуности сада разумем. На пример, у Марио проблему смо капом висину пирамиде на 23. Ми вас експлицитно рекао Не могу да идем већи од 23. Али шта значи 23? Па, ако прочитате спец пажљиво, хвала можда видели да је Разлог што га капом на 23 е јер је стандардне висине оф прозору терминала је 24. И тако, ако имамо пирамида бити виши од тога, то може да уради ову чудну ствар где се води са екрана. И знате, шта то значи у контексту, зар не? Да ли је значење 23 одмах јасно некоме ко гледа свој програм а можда има другачији Величина прозор терминала? Вероватно не. Чини се као, у реду. Па, зашто је само мање од 23 је? У принципу, некако је од лоше навике у ствари написати константе у вашем коду. На тај начин, када заправо раде написати константа у вашем коду, то је понекад називају користећи Магиц Нумберс, што је нешто смо углавном желе да пробају и избегну. На пример, хајде да погледамо на овом једноставном функцији овде. Очигледно нема података Тип у Ц зове картицу или палубу. Дакле, имајте са мном. То је мало Псеудокод микед овде. Ово је функција названа бавити картицу која очигледно узима шпил као своју параметар, и воља излаз за мене једној картици. И ја радим нешто овде где сам има петљу да иде од 0 до 52, и ја се бавим картицу. Па, имамо магију број овде, у реду. Да ли видите шта је магичан број је? Или што је још важније, зар не видим шта је овде проблем? Посебно ако је ово је само једна функција у свом датотеку у фасцикла која садржи гомила другачији фајлова, од којих свака чини још једну ствар шпил карата. Можда их Схуффлес, или се бави руку од пет карата, уместо једној картици. Да ли видите шта је Проблем би могао бити овде? Да ли видите магични број Ја сам убризгава у коду? То је 52, у реду. Као, интуитивно што вероватно знате, у реду. Као стандардни шпил картица садржи 52 карте. Али у нашем програму, то је само врста лебди тамо. То је као одједном има 52. Један од начина да се реши ово Проблем је да то урадите. Ми смо веома јасно сада дозива величину палубе као 52. То даје јој мало више интуитивно значи кад у фор петљу касније смо онда рећи, је мање од палубе величине. Изгледа боље него рећи 52. Сада се то заправо реши проблем. То не даје неки симболични значење на константу. Али то врста ствари увести још један проблем да можда неће бити одмах очигледни. Чак и ако ова варијабла је проглашен глобалли-- Да ли се сећате шта је то значи кад изјављујемо променљива глобално наспрам на локалном нивоу? Чак и ако смо декларисали променљиву глобално, шта ако постоји Друга функција у наш пакет функција које се баве манипулацијом картице да нехотице промене децк величине, или га повећава за 1 или смањује за 1. То би могло спелл ​​невоље, зар не? Поготово ако имамо посла са сетом картица гдје се мувају пуну палуби је обавезно. Ако се смањује величина палуба за 1, на пример, до 51, Ми заправо не мувају све карте могуће. Одлазимо једног од њих. И та вредност могла би се предвидјети или експлоатисана од стране лош глумац. Ц обезбеђује оно што се зове препроцесор директива, која Такође зове макро за креирање симболичке константе. А у ствари, које сте већ видео препроцессор директиву, чак и ако нисте чули позвао да са #инцлуде. То је још један пример макро или препроцесор директива. Начин да се створи симболичне константи, или давање име константа тако да има више значи, је као што следи. #дефине, име, замена. Стварно важно страну овде стварно брзо. Немојте стављати зарез у крај ваших #дефинес. Дакле, то је #дефине, име, замена. Када је састављен ваш програм, шта се заправо дешава је преводилац ако иде проћи кроз кода и замени сваки случај реч "име" са свиме што пут као замена. Аналогно, ако је нека #инцлуде од слично копирање и лијепљење, онда #дефине је некако слично да пронађе и замени, ако сте икада користили тај функција на програм за обраду текста, на пример. На пример, ако #дефине пи као 3.14159265, ако си бољи математички склон и изненада види 3.14159265 летења око у вашем коду, вероватно знате да говори о пи. Али, можда можемо да дам мало више симболично значење. И уместо да каже #дефине ПИ као онај залогај бројева да ја не идем да би читање изнова и изнова. И шта ће се онда десити у састави време када је програм саставио, прва ствар која ће се десити је да ће проћи кроз и она ће заменити сваки пут види Цапитал П, капитал И, буквално ће га заменити 3.14 и тако даље, тако да се не морате да куцате да сваки Време док ваш програм и даље има функционалност која вас Очекујем, јер радите са манипулише, множи, поделе, шта год да је по пи. Нисте ограничени на ово замена за само бројеви. На пример, могу да #дефине Наравно као стринг ЦС50. У овом случају, када се Програм је састављен, #дефине ће ићи кроз Код заменити сваки пут види "ток" са стринг ЦС50. Приметићете овде и да сам често #дефине све моје дефинисана симболичка константе, да тако кажем, су увек у свим капе. То је конвенција. Није потребно. Разлог углавном људи ће користити све престоницама када су #дефининг је само да би се заиста јасно да ова елемент мог кода је дефинисан константа. Ако је мала слова, могуће је да можда треба мешати са променљиву. И то је вероватно није добра ствар. Дакле, ово посебно решење је много боље него било који од претходних. Ако сам први пут #дефине величина палуби 52, затим сад ми је коришћење 52 или палубе величине овде, је много више интуитиван и много сигурније. Не можете манипулисати константа. Не можете рећи 52 плус плус. То неће претворити га у 53. Не можете да промените 52 на нешто. Можете да промените променљиву чија је вредност 52, који је био први фикс смо раније имали. А ти би могао повећати да променљива до 53. Али не можеш рећи 52 Плус Плус и има да изненада претворити у 52 53. 52 је увек 52. И тако да не можете нехотице променити палуба величина овде да манипулишу, Још једна добра страна Ефекат ове, иако је да ли сте свесни да не све земље широм света користе шпил карата величине 52? На пример, стварно је уобичајено у Немачка користити на палуби величину 32, где су стрип неке доњих вредности картица. И у овом случају, желео да порта мој пакет функција који се баве манипулација картица у Немачку. Могао бих у првом степену смо показала, да идем и замени све инстанце 52 у мом коду са 32. Али овде, ако #дефине палуба величина као 32 на самом врху мог кода, ако треба да се мења, ја могу само идите и промените ту једну ствар. Рецомпиле свој код, а сви Одједном се шири кроз. У ствари, можемо да променимо децк величина на било коју вредност коју желимо. Могу ли да вас интересовати игра палуби величине пицкуп? Ја сам Доуг Лојд. А ово је ЦС50.