[MIZIK jwe] Doug Lloyd: Tout dwat. Kalite yon sijè etranj, dwa? Nimewo majik. Ki sa ki DOE li vle di lè li se ap pale de nimewo majik? Oke, kèk nan pwogram yo ke nou te ekri nan CS50 byen lwen tèlman te gen kèk etranj nimewo kalite jete nan yo. Petèt pou rezon nou pa fè sa antyèman konprann kounye a. Pou egzanp, nan pwoblèm nan Mario, nou capped wotè nan piramid la nan 23. Nou te di ou klèman pa ka ale pi wo pase 23. Men, sa ki 23 vle di? Bon, si w ap li a espèk ak anpil atansyon, ou ta ka gen pou wè ki nan rezon ki fè nou capped li nan 23 se paske wotè nan estanda nan yon fenèt tèminal se 24. Se konsa, si nou gen nan piramid gen pi wo pase sa, li ta ka fè sa sa a etranj kote li kouri sou ekran an. E ou konnen, ki sa fè sa vle di nan yon kontèks, dwa? Se siyifikasyon an nan 23 imedyatman evidan ak yon moun ki moun ki parèt nan pwogram ou an e petèt gen yon diferan fenèt tèminal gwosè? Pwobableman pa. Li sanble tankou, OK. Oke, poukisa se li jis mwens pase 23? An jeneral, li nan kalite nan yon abitid move aktyèlman yo ekri konstan nan kòd ou a. Nan fè sa, lè ou aktyèlman fè ekri yon konstan nan kòd ou a, li nan pafwa refere yo kòm lè l sèvi avèk nimewo majik, ki se yon bagay nou jeneralman vle eseye, epi evite. Pou egzanp, kite a pran yon gade a fonksyon sa a ki senp isit la. Li evidan gen nan pa gen done kalite nan C rele kat oswa pil. Se konsa, jis pote avè m '. Li se yon ti kras nan pseudocode melanje nan isit la. Sa a se yon fonksyon rele fas kat ki aparamman pran yon pil kòm paramèt li yo, ak volonte pwodiksyon m 'yon kat sèl. Apre sa, mwen ap fè yon bagay isit la kote mwen gen yon riban ki kouri ki ant 0 a 52, ak mwen fè fas yon kat. Oke, nou te gen yon majik Nimewo nan isit la, dwat. Ou wè sa ki nimewo a majik se? Ou pi enpòtan, ou wè sa ki pwoblèm nan se isit la? Patikilyèman si sa a se jis yon fonksyon nan dosye pwòp li yo nan yon katab ki gen yon pakèt moun sou diferan dosye, chak nan yo ki fè yon lòt bagay nan yon pil kat la kat. Petèt li melanz yo, oswa kontra yon men nan senk kat olye pou yo yon kat sèl. Ou wè sa ki la pwoblèm ta ka isit la? Ou wè nimewo a majik Mwen te sou fòm piki nan kòd la? Li nan 52, dwat. Tankou, entwitif pwobableman ou konnen, OK. Fè tankou yon pil kat estanda nan kat gen 52 kat. Men, nan pwogram nou an, li nan jis kalite waf alantou nan la. Se tankou tout nan yon toudenkou gen nan yon 52. Youn nan fason yo rezoud sa a pwoblèm se fè sa. Nou ap trè klèman kounye a rele pil gwosè a kòm 52. Li bay li yon ti kras pi plis entwisyon sa vle di lè nan nan pou riban pita sou nou Lè sa a di, m se mwens pase gwosè pil. Li jis sanble pi bon pase li di 52. Koulye a, sa a aktyèlman ranje pwoblèm nan. Li bay kèk senbolik sa vle di konstan nan. Men, li fè sa kalite aktyèlman prezante yon lòt pwoblèm ki pa ta kapab imedyatman aparan. Menm si sa a varyab se te deklare globally-- ou sonje ki sa li vle di lè nou deklare yon varyab globalman kont lokalman? Menm si nou deklare yon varyab globalman, ki sa si gen nan yon lòt fonksyon nan suite nou an nan fonksyon ki kontra avèk kat manipilasyon ki inadvèrtans chanje gwosè pil, oswa li ogmante li pa 1 oswa diminye li pa 1. Ki ta ka eple pwoblèm, dwa? Espesyalman si nou ap fè fas ak yon seri nan kat kote mélanger pil la plen obligatwa. Si yo gwosè pil diminye pa 1, pou egzanp, pou 51, nou ap pa aktyèlman mélanger tout kat yo pètèt. Nou ap kite youn nan yo deyò. Epi sa te kapab petèt gen valè prevwa oswa eksplwate pa yon aktè move. C bay sa k ap rele yon preproseseur direktiv, ki tou yo rele yon macro pou kreye konstan senbolik. Ak an reyalite, ou te deja wè yon direktiv preproseseur, menm si ou pa t 'tande li rele ke ak # enkli. Li nan yon lòt egzanp nan yon macro oswa preproseseur direktiv. Fason ki yo kreye konstan senbolik, oswa bay yon non nan yon konstan konsa ke li gen plis sa vle di, se jan sa a. # defini, non, ranplasman. Vrèman enpòtan sou kote isit la reyèlman rapid. Pa mete yon virgules a nan fen # defini ou yo. Se konsa, li # defini, non, ranplasman. Lè yo fin fè pwogram ou an, sa ki aktyèlman k ap pase se du a si pral yo ale nan kòd ou a epi ranplase chak egzanp nan pawòl Bondye a "Non" ak tou sa ou mete kòm ranplasman. Analoji, si # enkli se sòt a menm jan ak kopye ak kole, Lè sa a, # defini se sòt de menm jan ak jwenn ak ranplase, si ou te janm itilize ki karakteristik nan yon pwogram pwosesis mo, pou egzanp. Se konsa, pou egzanp, si mwen # defini pi kòm 3.14159265, si w ap pi bon matematik enkline epi ou toudenkou wè 3.14159265 vole alantou an kòd ou a, pwobableman ou konnen li la ap pale de pi. Men, petèt nou ka bay li yon ti kras siyifikasyon plis senbolik. Apre sa, nou ka olye di # defini pi tankou sa gren nan nimewo ke mwen pa ale nan kenbe lekti sou yo ak sou. Ak sa ki k ap pase yo rive Lè sa a, konpile tan se lè pwogram lan se konpile, premye bagay la ki pral rive se li pral ale nan epi li pral ranplase chak fwa li wè kapital P, kapital mwen menm, li pral literalman ranplase li ak 3.14 ak sou sa, se konsa ke ou pa bezwen tape li chak tan pandan y ap pwogram ou an toujou gen fonksyonalite a ke ou espere, paske w ap travay ak manipile, miltipliye, divize, tou sa li se pa pi. Ou pa limite a sa a sibstitisyon pou chif sèlman. Pou egzanp, mwen te kapab # defini kou kòm CS50 nan fisèl. Nan ka sa a, lè a Pwogram konpile, # defini pral ale nan nan Kòd, ranplase chak fwa li wè "Kou" ak CS50 nan fisèl. Ou pral avi isit la tou ke mwen souvan # defini tout defini m 'senbolik konstan, se konsa pale, yo toujou nan tout kapsil. Li se yon konvansyon. Li pa nan yo mande yo. Rezon ki fè la jeneralman moun ki pral sèvi ak tout kapital lè yo ap #defining se jis fè li vrèman klè ke sa a eleman patikilye nan kòd m ' se yon konstan defini. Si li te miniskil, li nan posib ke li ta ka dwe bay konfizyon avèk yon varyab. Epi sa a, pwobableman pa yon bon bagay yo dwe fè. Se konsa, patikilye sa a solisyon se pi bon pase swa nan yo menm ki anvan yo. Si m 'premye # defini pil gwosè 52, Lè sa a, kounye a itilize m 'lan nan 52, oswa gwosè pil isit la, se yon anpil plis entwisyon ak yon anpil pi an sekirite. Ou pa ka manipile yon konstan. Ou pa ka di 52 plis plis. Sa pa k ap pase yo konvèti li nan 53. Ou pa ka chanje 52 nan yon bagay. Ou ka chanje yon varyab ki gen valè 52, ki te ranje nan premye nou te gen anvan. Epi ou ta ka ogmante varyab sa a 53. Men, ou pa ka di 52 plis plis ak gen ki toudenkou vire 52 nan 53. 52 se toujou 52. Se konsa, ou pa ka inadvèrtans chanje pil gwosè isit la pa manipile li, Yon lòt bò bon efè nan menm si sa a se ki moun ou ye konnen ke pa tout peyi atravè mond lan sèvi ak yon pil kat la kat nan gwosè 52? Pou egzanp, li vrèman komen nan Almay yo sèvi ak yon gwosè pil kat la 32, kote yo dezabiye soti kèk nan kat yo valè pi ba yo. Ak nan ka sa a, mwen te vle pò chanm mwen nan fonksyon ki fè fas ak manipilasyon kat nan peyi Almay. Mwen te kapab nan egzanp nan premye nou te montre yo, yo gen yo ale epi ranplase tout sikonstans nan 52 nan kòd mwen an avèk 32. Men, isit la, si mwen # defini gwosè pil kòm 32 nan tèt la anpil nan kòd m 'yo, si mwen bezwen chanje li, mwen kapab jis ale ak chanje sa yon sèl bagay. Compile Kòd m 'yo, ak tout nan yon toudenkou li Propagation nan. An reyalite, nou ka chanje pil gwosè nan nenpòt valè nou vle. Èske mwen ka enterese w nan yon jwèt la gwosè pil vin chèche? Mwen se Doug Lloyd. Lè sa a se CS50.