>> [MUSIC nagpe-play]
DOUG LLOYD: Lahat ng karapatan.
Uri ng isang kakaibang topic, di ba?
Magic numero.
Ano usang babae niyang sabihin kapag siya ay pakikipag-usap tungkol magic numero?
Well, ilan sa mga programa na namin ang nakasulat sa CS50
sa ngayon ay nagkaroon ng ilang mga kakatwang numero ng uri ng itinapon sa kanila.
Marahil para sa mga kadahilanang hindi kami ganap na maunawaan ngayon.
Halimbawa, sa ang problema Mario, tayo capped ang taas ng pyramid sa 23.
Tahasan naming sinabi mo hindi maaaring pumunta mas mataas kaysa sa 23.
>> Ngunit ano ang ibig sabihin ng 23?
Well, kung ikaw basahin ang pagsasapalaran maingat, ikaw
maaaring nakita na ang dahilan capped namin ito sa 23
ay dahil ang standard na taas ng isang terminal na window ay 24.
At kaya kung mayroon kaming ang pyramid na mas matangkad kaysa sa,
maaaring ito gawin ito kakaiba bagay kung saan ito ay tumatakbo off ang screen.
At alam mo, kung ano ang ginagawa na ang ibig sabihin sa konteksto, di ba?
>> Ay ang kahulugan ng 23 agad maliwanag sa isang tao na tumitingin sa iyong mga programa
at marahil ay may ibang laki ng window ng terminal?
Hindi siguro.
Tila gusto, OK.
Well, kung bakit ito lamang mas mababa sa 23?
Sa pangkalahatan, ito ay uri ng isang masamang ugali talaga
na magsulat ng constants sa iyong code.
Sa paggawa nito, kapag ang tunay na gagawin magsulat ng isang pare-pareho sa iyong code,
kung minsan ito ay tinutukoy bilang gamit magic numero, na kung saan ay isang bagay na
kami ay karaniwang gusto mong subukan at iwasan.
>> Halimbawa, sabihin tumagal ng isang pagtingin sa simpleng pag-andar na ito dito.
Malinaw na walang data uri sa C tinatawag card o deck.
Kaya lamang madala sa akin.
Ito ay isang maliit na piraso ng pseudocode mixed in dito.
Ito ay isang function na tinatawag na pakikitungo card na tila
tumatagal ng isang deck ng mga parameter nito, at kalooban output sa akin ng isang solong card.
>> At ako ng paggawa ng isang bagay dito kung saan ako magkaroon ng isang loop na tumatakbo mula 0 hanggang 52,
at harapin ko ang isang card.
Well, namin nakuha ng isang magic numero sa dito, right.
Huwag mong makita kung ano ang magic number ay?
O mas mahalaga, gawin mo tingnan mo kung ano ang problema dito?
Lalo na kung ito ay isang function na lamang
sa sarili nitong file sa isang folder na naglalaman ng
ng grupo ng mga iba't-ibang mga file, ang bawat isa ay
ang ginagawa ng iba pang bagay sa isang deck ng mga baraha.
Siguro ito shuffles mga ito, o ang trato ng isang kamay ng limang card sa halip ng isang solong card.
>> Huwag mong makita kung ano ang maaaring maging dito problema?
Nakikita mo ba ang magic number Na iturok ko sa code?
Ito ay 52, sa kanan.
>> Tulad ng, intuitively mo marahil alam, OK.
Tulad ng isang standard na deck ng mga card ay naglalaman ng 52 card.
Ngunit sa aming programa, ito lang uri ng lumulutang sa paligid sa doon.
Ito ay tulad ng lahat ng isang biglaang mayroong isang 52.
>> Ang isang paraan upang malutas ito problema ay upang gawin ito.
Kami ay labis na malinaw ngayon pagtawag out ang laki deck bilang 52.
Ito ay nagbibigay ito ng isang maliit na mas magaling ibig sabihin kapag sa para sa loop
mamaya sa ating sasabihin, i Mababa sa laki deck.
Ito lamang tila mas mahusay kaysa sa sinasabi 52.
Ngayon na ito ay tunay na ayusin ang problema.
Ito ay magbibigay sa ilang mga symbolic ibig sabihin ay sa pare-pareho.
Ngunit ito ay hindi ang uri ng tunay na ipakilala ang isa pang problema
na maaaring hindi agad maliwanag.
Kahit na ang variable na ito ay ipinahayag globally--
pagpapabalik sa iyo kung ano ito ibig sabihin kapag ipinapahayag namin
isang variable globally kumpara sa local?
Kahit na ipinapahayag namin ang isang variable globally, ano kung mayroong
isa pang function sa ang aming suite ng mga function
na pakikitungo sa pagmamanipula card na hindi sinasadyang pagbabago laki deck,
o ito ay nagdaragdag sa pamamagitan 1 o nababawasan ito ng 1.
Na maaaring spell problema, di ba?
Lalo na kung kami ay pagharap sa isang hanay ng mga baraha kung saan shuffling ang buong deck
ay kinakailangan.
Kung size deck ay nabawasan sa pamamagitan ng 1, halimbawa, sa 51,
hindi kami talaga shuffling lahat ng mga card marahil.
Kami ay umaalis sa isa sa kanila out.
At ang halaga na maaaring marahil ay hinulaang o pinagsamantalahan sa pamamagitan ng isang masamang artista.
>> C nagbibigay ng kung ano ang tinatawag na isang preprocessor directive, na
ay tinatawag ding isang macro para sa paglikha symbolic constants.
At sa katunayan, na sa iyo na nakita ng isang preprocessor directive,
kahit na hindi mo pa naririnig ito tinatawag na may # include.
Ito ay isa pang halimbawa ng isang macro o preprocessor direktiba.
>> Ang paraan upang lumikha ng mga symbolic constants, o pagbibigay ng pangalan sa isang pare-pareho
upang ito ay may higit ibig sabihin, ay ang sumusunod.
# tukuyin, pangalan, kapalit.
Talagang mahalaga muna dito talagang mabilis.
Huwag maglagay ng isang tuldok-kuwit sa sa dulo ng iyong # tinutukoy.
Kaya ito ay ang # tukuyin, pangalan, kapalit.
>> Kapag ang iyong programa ay pinagsama-sama, kung ano talaga ang mangyayari
ay ang compiler kung pagpunta upang pumunta sa pamamagitan ng iyong code
at palitan ang bawat pagkakataon ng ang salitang "pangalan" sa kahit anong ikaw
ilagay bilang kapalit.
Analogously, kung #include ay uri ng mga katulad na pagkopya at pag-paste,
pagkatapos # tukuyin ang uri ng katulad sa hanapin at palitan,
kung ka na ginagamit ang tampok na iyon sa isang word processing program, halimbawa.
>> Kaya halimbawa, kung ako # tukuyin pi bilang 3.14159265,
kung ikaw ay mas mahusay na mathematically hilig at ikaw bigla
makita 3.14159265 paglipad sa paligid sa iyong code,
ikaw ay malamang na malaman ito ay ang pakikipag-usap tungkol sa mga pay.
Ngunit marahil maaari naming bigyan ito ng isang maliit na mas symbolic kahulugan.
At maaari naming halip sabihin #define pi bilang na katiting ng numero
na hindi ako pagpunta sa panatilihin nang paulit-ulit ang pagbabasa.
>> At kung ano ang nangyayari sa mangyayari pagkatapos ay sa itala oras ay kapag ang programa ay
pinagsama-sama, ang unang bagay na ang mangyayari ay ito ay pumunta sa pamamagitan ng
at ito ay palitan sa bawat oras nakikita ito capital P, capital ko,
Makikita ito literal palitan ito 3.14 at iba pa, kaya na kayo
Hindi mo na kailangang i-type ito sa bawat oras habang ang iyong programa pa rin
ay ang pag-andar na iyong asahan, dahil ikaw ay nagtatrabaho
sa pagmamanipula, multiply, paghahati, ano man ito ay sa pamamagitan ng pay.
>> Hindi ka limitado sa mga ito pagpapalit para sa mga numero lamang.
Halimbawa, maaari akong # tukuyin Syempre bilang mga string CS50.
Sa kasong ito, kapag ang programa ay pinagsama-sama,
Makikita # tukuyin pumunta sa pamamagitan ng code, palitan sa bawat oras
nakikita ito "kurso" sa mga string CS50.
>> Mapapansin mo dito rin na madalas ko
# tukuyin ang lahat ng mga tinukoy na aking symbolic constants, kaya na magsalita,
ay palaging sa lahat ng takip.
Ito ay isang convention.
Ito ay hindi kinakailangan.
Ang dahilan dito ay karaniwang mga tao ay gagamit lahat ng capitals kapag sila ay #defining
ay lamang upang gawin itong tunay na malinaw na ito partikular na elemento ng aking code
ay isang tinukoy na pare-pareho.
Kung ito ay lowercase, posible na maaaring ito ay malito sa isang variable.
At iyon ay marahil hindi isang magandang bagay na gawin.
>> Kaya ito partikular na solusyon ay lubhang mas mahusay
kaysa sa alinman sa mga nakaraang mga bago.
Kung ako unang #define size deck 52, pagkatapos ay ngayon ang aking paggamit ng 52, o laki deck dito,
ay mas madaling maunawaan ng maraming at ng maraming mas ligtas.
Hindi mo maaaring manipulahin ang isang pare-pareho.
Hindi mo maaaring sabihin 52 plus plus.
Iyan ay hindi pagpunta sa convert ito sa 53.
Hindi mo maaaring baguhin 52 sa isang bagay.
>> Maaari mong baguhin ang isang variable na ang halaga ay 52,
na kung saan ay ang unang fix namin ay bago.
At maaari mong dagdagan na variable sa 53.
Ngunit hindi ka maaaring sabihin 52 plus plus at Mayroon na biglang i-52 sa 53.
52 ay palaging 52.
At para makita mo na hindi sinasadyang baguhin size deck dito sa pamamagitan ng pagmamanipula ng mga ito,
>> Isa pang magandang side epekto ng ito bagaman ay
na ikaw ay malaman na hindi lahat ng mga bansa sa buong mundo
gumamit ng isang deck ng mga baraha ng laki 52?
Halimbawa, ito ay tunay na karaniwan sa Germany na gumamit ng isang laki deck ng 32,
kung saan sila alisin ang ilang mga ng mas mababang halaga cards.
At sa kasong ito, ako nais na port ng aking suite
ng pag-andar na pakikitungo sa pagmamanipula card sa Germany.
Kaya kong sa unang pagkakataon namin nagpakita, kailangang pumunta at palitan
lahat ng mga pagkakataon ng 52 sa aking code sa 32.
>> Ngunit dito, kung # tukuyin ko laki deck bilang 32 sa pinakatuktok ng aking code,
kung kailangan ko upang baguhin ito, maaari ko pumunta lamang sa at baguhin na ang isang bagay.
Recompile aking code, at lahat ng isang biglaang ito kumakalat sa pamamagitan ng.
Sa katunayan, maaari naming baguhin ang deck sukat sa anumang halaga na gusto namin.
>> Maaari ba akong interes sa iyo sa isang laro ng size deck pickup?
>> Ako Doug Lloyd.
At ito ay CS50.