[Daqq tal-mużika] Doug LLOYD: Kull dritt. Tip ta 'suġġett stramba, right? Numri magic. What fenka hu jfisser meta hu jitkellem dwar in-numri magic? Ukoll, xi wħud mill-programmi li konna bil-miktub fil CS50 s'issa kellhom xi stramb numri tip ta 'jintefa fihom. Forsi għal raġunijiet aħna ma kompletament jifhmu dritt issa. Per eżempju, fil-problema Mario, aħna limitat l-għoli tal-piramida fuq 23. Aħna espliċitament qal inti ma tistax tmur ogħla minn 23. Imma dak ma 23 jfisser? Ukoll, jekk inti taqra l- spec b'attenzjoni, inti tista raw li l- raġuni għandna limitat dan fid-23 ta ' huwa minħabba l-għoli standard ta 'tieqa terminal huwa 24. U hekk jekk ikollna l piramida jkun taller minn dan, jista 'tagħmel dan ħaġa stramb fejn hija tmur barra l-iskrin. U inti taf, dak li ma Dan ifisser fil-kuntest, id-dritt? T-tifsira tal-23 immedjatament ovvji lil xi ħadd li tħares lejn programm tiegħek u forsi għandu differenti tieqa terminal daqs? Probabbilment le. Jidher bħal, OK. Well, għaliex hi biss inqas minn 23? B'mod ġenerali, huwa tip ta drawwa ħażina fil-fatt jiktbu kostanti fil-kodiċi tiegħek. Meta tagħmel dan, meta inti fil-fatt tagħmel jiktbu kostanti fis kodiċi tiegħek, kultant s imsejħa użu numri magic, li huwa xi ħaġa aħna ġeneralment jridu jippruvaw u jevitaw. Per eżempju, ejja tagħti ħarsa fil din il-funzjoni sempliċi hawn. Ovvjament hemm l-ebda data tip C imsejħa karta jew gverta. Hekk biss jkollhom miegħi. Huwa xi ftit ta ' pseudocode mħallta fil hawn. Din hija funzjoni msejħa jittrattaw biljett li apparentement tieħu gverta kif parametru tagħha, u rieda output lili karta waħda. U jien tagħmel xi ħaġa hawn fejn I jkollhom loop li tmur 0-52, u I jittrattaw karta. Well, konna ltqajna magic Numru fil hawn, id-dritt. Inti tara dak in-numru magic hija? Jew aktar importanti, do you tara x'inhi l-problema hawn? Partikolarment jekk dan huwa biss funzjoni waħda fil-fajl tagħha stess fil- folder li fih mazz ta 'differenti fajls, li kull wieħed minnhom ma ħaġa oħra għal gverta ta 'karti. Forsi shuffles minnhom, jew jittratta idejn ta 'ħames karti minflok karta waħda. Inti tara dak l- problema tista 'tkun hawn? Inti tara l-għadd magic Stajt injettat fil-kodiċi? Huwa 52, id-dritt. Bħal, intuwittivament inti probabilment taf, OK. Bħal gverta standard ta karti fih 52 cards. Iżda fil-programm tagħna, huwa biss tip ta 'floating madwar fil hemmhekk. Huwa simili kollha f'daqqa hemm 52. Mod wieħed biex issolvi din problema hija li dan isir. Aħna espliċitu ħafna issa ssejjaħ out-daqs gverta kif 52. Hija tagħti hija ftit aktar intuwittivi li jfisser meta fil-linja għal aktar tard aħna mbagħad ngħidu, i huwa inqas mid-daqs gverta. Huwa biss tidher aħjar milli qal 52. Issa dan ma attwalment tiffissa l-problema. Hija ma tagħti xi simbolika li jfisser il-kostanti. Iżda ma tip ta 'fatt jintroduċu problema oħra li jistgħu ma jkunux immedjatament apparenti. Anki jekk dan il-varjabbli huwa ddikjarat globally-- Tiftakar dak li ifisser li meta aħna niddikjaraw varjabbli globalment versus lokalment? Anki jekk aħna tiddikjara varjabbli globalment, dak li jekk hemm funzjoni oħra fil suite tagħna ta 'funzjonijiet li jittrattaw manipulazzjoni karta li involontarjament bidliet daqs gverta, jew dan iżid lilha mill 1 jew jonqos sal-1. Dan jista 'jespliċitaw trouble, id-dritt? Speċjalment jekk aħna qed jittrattaw ma 'sett ta 'karti fejn jsir ċaqliq-gverta mimlija hija meħtieġa. Jekk id-daqs gverta hija naqset b'1, per eżempju, sa 51, aħna mhux qed attwalment jsir ċaqliq l-karti kollha possibilment. Aħna qed tħalli wieħed minnhom out. U li l-valur jista 'forsi jkun mbassra jew sfruttati minn attur bad. C jipprovdi dak li sejjaħ direttiva Preprocessor, li hija magħrufa wkoll bħala makro għall ħolqien kostanti simboliku. U fil-fatt, inti stajt diġà raw direttiva Preprocessor, anki jekk int ma smajtu imsejħa li ma #include. Huwa eżempju ieħor ta makro jew direttiva Preprocessor. Il-mod biex jinħolqu kostanti simboliċi, jew tagħti isem lil kostanti sabiex ikollha aktar li jfisser, huwa kif ġej. #define, isem, sostituzzjoni. Verament importanti aside hawn tassew mgħaġġla. Tpoġġix b'waqfa u virgola fi l-aħħar tal #defines tiegħek. Allura huwa #define, isem, sostituzzjoni. Meta program tiegħek hija miġbura, x'inhu dak li attwalment jiġri huwa l-kumpilatur jekk tmur li jmorru permezz-kodiċi tiegħek u jissostitwixxi kull każ ta il-kelma "name" ma kwalunkwe inti jitqiegħdu kif sostituzzjoni. Analogu, jekk #include huwa tip tal simili għal ikkupjar u pasta, allura #define huwa tip ta simili biex isibu u jissostitwixxi, jekk inti stajt qatt jintużaw li karatteristika fil- kelma ipproċessar programm, per eżempju. Għalhekk, per eżempju, jekk I #define pi bħala 3.14159265, jekk int aħjar matematikament inklinati u f'daqqa waħda tara 3.14159265 jtajru madwar fil-kodiċi tiegħek, inti probabilment taf li jitkellem dwar pi. Imma forsi nistgħu tagħtiha a ftit tifsira aktar simbolika. U nistgħu minflok ngħidu #define pi bħal dik f'gidma ta 'numri li jien mhux ser iżommu qari aktar u aktar. U x'inhu jiġri mbagħad fl jikkompilaw żmien huwa meta l-programm huwa kkompilata, l-ewwel ħaġa li se jiġri huwa se jmorru permezz u din se tissostitwixxi kull darba jara kapital P, kapital I, dan ser litteralment tibdilha 3.14 u l-bqija, sabiex inti ma għandekx tip li kull ħin waqt program tiegħek xorta għandu l-funzjonalità li inti jistennew, għaliex inti qed jaħdmu ma manipulazzjoni, multiplikazzjoni, diviżjoni, tkun xi tkun mill pi. Inti mhux limitati għal dan sostituzzjoni għal numri biss. Per eżempju, I jistgħu #define kors kif l CS50 sekwenza. F'dan il-każ, meta l- programm hija miġbura, #define se jgħaddu mill- kodiċi, jissostitwixxu kull darba jara "kors" ma 'l-CS50 sekwenza. Int ser ikollok avviż hawn ukoll li I spiss #define kollha tiegħi definit simboliku kostanti, biex ngħidu hekk, huma dejjem fil-limiti kollha. Huwa konvenzjoni. Mhuwiex meħtieġ. Ir-raġuni ġeneralment nies se jużaw kapitali kollha meta jkunu qed #defining huwa biss li jagħmilha verament ċara li dan l-element partikolari ta 'kodiċi tiegħi huwa kostanti definit. Jekk kien lowercase, huwa possibbli li jista 'jkun konfuż ma' varjabbli. U li probabbilment mhix ħaġa tajba li tagħmel. Allura dan partikolari soluzzjoni hija ħafna aħjar minn jew ta 'dawk ta' qabel. Jekk I ewwel #define daqs gverta 52, imbagħad issa użu tiegħi ta '52, jew id-daqs gverta hawn, huwa ħafna aktar intuwittivi u ħafna aktar sikuri. Inti ma tista 'timmanipola kostanti. Inti ma tistax tgħid 52 plus plus. Li mhux se jissarfu sa 53. Inti ma tistax tbiddel 52 sa xi ħaġa. Tista 'bidla varjabbli li l-valur huwa 52, li kienet l-ewwel jiffissaw kellna qabel. U inti tista 'żżid dak il-varjabbli sa 53. Imma inti ma tistax tgħid 52 plus plus u jkollhom li għarrieda jduru 52 fis 53. 52 huwa dejjem 52. U għalhekk inti ma tistax tbiddel involontarjament daqs gverta hawn billi timmanipula dan, Ieħor sekondarji tajba effett ta 'dan għalkemm huwa li huma inti taf li ma pajjiżi kollha madwar id-dinja użu gverta ta 'karti ta' daqs 52? Per eżempju, huwa verament komuni fil Ġermanja li jużaw daqs gverta ta '32, fejn dawn strixxa out xi tal-karti ta 'valur inqas. U f'dan il-każ, I riedu port suite tiegħi ta 'funzjonijiet li jittrattaw manipulazzjoni karta lill-Ġermanja. I jistgħu fl-ewwel istanza aħna wera, ikollhom imorru u tissostitwixxi każijiet kollha ta '52 fil-kodiċi tiegħi ma 32. Iżda hawnhekk, jekk I #define daqs gverta kif 32 fuq nett tal-kodiċi tiegħi, jekk I bżonn biex jibdlu, nista biss jmorru u l-bidla li ħaġa waħda. Recompile kodiċi tiegħi, u kollha ta ' f'daqqa dan tinfirix permezz. Fil-fatt, nistgħu nbiddlu gverta daqs għal xi valur li rridu. Nista jinteressawk fil- logħba tal Pickup daqs gverta? Jien Doug Lloyd. U dan huwa CS50.