Doug LLOYD: Kaip jums pradėti dirbant su funkcijų, Kitas dalykas yra tai taps Labai svarbu suprasti, kuris yra kintamo sritį sąvoka. Taigi apimtis yra būdingas kintamojo kuris apibrėžia iš kurių funkcijų kad kintamasis gali būti atvertas. Yra du pagrindiniai sferos C, vietos kintamieji ir globalių kintamųjų. Dabar, vietos kintamieji gali tik būti atvertas per funkcijų , kurioje jie sukurta. Jie negali būti prieinama kiekvienas kitas funkcija, kuri yra jūsų programoje, tik funkcija kurioje jis buvo sukurtas. Globalių kintamųjų, iš kita vertus, gali būti atvertas pagal bet kurį žodį programos funkcija. Ir dėl šios priežasties yra nes jie nėra sukurtas viduje bet konkrečią funkciją. Mes pareiškiame juos už visas funkcijas, kurios reiškia, kad kiekvienas funkcija žino kur tai yra ir gali prieiti ir manipuliuoti. Iki šiol žinoma jūs gana daug dirbo tik su vietos kintamųjų. Štai Kurių pavyzdys labai, labai paprastas pagrindinė funkcija ir labai paprasta papildoma funkcija, kad mes parašyta. Šiuo atveju, x, kuris Aš spalvos žalia tik atkreipti dėmesį į vietovę arba tos kintamojo apimtis, yra vietinė su funkcija triguba. Pagrindinis negali remtis x ne visiems. Jis nežino, kas tai yra. Jokia kita funkcija, iš tiesų, jei mes turėjo papildomas funkcijas, čia gali kreiptis į x. Be to, rezultatus, kurie aš mėlynos spalvos, yra vietos tik pagrindinis. Tik pagrindinis žino, ką kintamasis rezultatas. Trivietis negali naudoti jį. Dabar, kaip jau minėjau, globalių kintamųjų egzistuoja. Jei deklaruoja, kad kintamasis ne bet kokia funkcija, visi iš funkcijų programa gali kreiptis į jį. Taigi šiuo atveju aš paryškinamas žalia pasaulinė kintamasis deklaracija. Be šiuo atveju, kintamasis būtų paskelbti yra vadinamas pasaulio, tik būti labai aišku, apie tai. Tai tipo plūdės. Ir aš priskirti jai vertę 0.5050. Jūs pastebėsite, kad pagrindinė ir triviečiai, aš galiu kreiptis į pasauliniu mastu. Ir iš tiesų, jei aš einu per programą kaip nurodyta, pagrindiniai pirmieji kvietimai triviečiai, triviečiai daugybos pasauliniai 3, kuris nustato jo vertę iki 1,5-ką, 1.51 ar kažkas panašaus, ir tada pagrindinis taip pat spausdina vertę Global. Taigi pagrindinė nebus atsispausdinti 0.5050, tai bus išspausdinti pasaulinius kartus 3, 1.51. Taigi, jūs turite būti atsargūs, kai dirbate su globaliais kintamaisiais. Nors jie labai lankstus kad galėtų perduoti informaciją aplink taip, kad kiekvienas funkcija gali jį naudoti, ji taip pat gali turėti tam pavojingų pasekmių jei viena funkcija pokyčių kintamųjų vertė Prieš tikėtis, kad ji turi būti pakeista. Kodėl šis skirtumas svarbu? Kodėl mums rūpi, ar kai kurių kintamųjų yra vietos ir kiti pasaulio? Na, didžioji dalis, vietos kintamieji C yra tai, kas vadinama praėjo vertės kai mes padaryti skambinimo funkcijos. Ką tai reiškia? Na, kai kintamasis yra perduodama pagal vertę, į callee, kuris Kitaip tariant funkciją būdas kad gauna kintamąjį, kad gauna praėjo kaip indėlį, ji iš tikrųjų negauna, kad pati kintamąjį. Ji gauna savo jo kopija dirbti. Tai tikrai svarbus skirtumas. Mes tik pamačiau antrą prieš kad su globalių kintamųjų, jei mes manipuliuoti pasaulio kintamasis vieną funkciją, poveikis tuo, kad viena funkcija atlieka iki kiekvieno kito funkcija. Bet su vietos kintamųjų, tai netiesa. Kiekvienas funkcija, kai tai gauna kintamuosius kaip pirkimo gauti kopijas šių kintamųjų, ne patys kintamieji. Taigi, kas yra šalutinis poveikis, kad? Tai reiškia, kad kintamojo skambinantysis, funkcija, kad yra todėl skambinimo funkcijos, yra nepakitusi, jei nepaisyti. Pavyzdžiui, šiuo kodu foo yra nepasikeitę. Žiniasklaida rūšys yra lygus 4, skambinkite trivietis Kažkoks, viduje triviečiai, mes tikimės, kad rūšys būtų dauginama iš 3 ir grįžo, bet ten tikrai jokio poveikio. Čia, nors labai subtilus skirtumas. Tai tikrai turi poveikį norime. Ar matote, kodėl? Mes privalomais foo pagrindiniame šiuo metu. Taigi int rūšys yra lygus 4, rūšys lygus Trivietis rūšys, kai mes padaryti, kad skambinti, Trivietis gauna savo kopiją Kažkoks, savo kopiją 4. Ji sako grąžinti 4 kartus 3 arba bet kokiomis kintamasis gauna praėjo laikais 3. Ir tada mes priskirti grąžą vertė trigubas į foo dar kartą. Taigi tai iš tiesų būtų perrašyti foo. Tai yra vienintelis būdas tai padaryti tai su vietos kintamąjį. Taigi dabar, jei mes pridėti dar linija kodą čia lemiamomis pabaigos atsispausdinti iš foo vertę, tai iš tiesų atsispausdinti 12. Kintamojo apimtis paprastai yra ne per daug problemų Jei pavadinti visus savo kintamieji skirtingi dalykai. Bet jis gali gauti natūra bjaurus jei tas pats kintamasis pavadinimas pasirodo daugelio funkcijų, kuri įvyks daug. Jei kada do dirbti realus pasaulis, kur dirbate bendradarbiavimo programas ir žmonių iš įvairių komandų dirba kartu rašyti tą patį programa arba tas pats rinkinys programų, jie dažnai pakartotinai kintamasis pavadinimai, ypač paplitusios pavyzdžiui, x, y, i, j, ir taip toliau. Bet kai kintamieji turi tuo pačiu pavadinimu, apimtis klausimai gali gauti šiek tiek sudėtingesnis išanalizuoti. Pavyzdžiui, ar žinote, kas būtų išspausdinti šio konkretaus programos pabaigoje? Paimkite minutę. Pristabdyti vaizdo įrašą ir skaityti per šią programą. Jūs galite pamatyti viršuje mes turi funkciją deklaraciją nors funkcija vadinama prieaugis. Ši funkcija trunka vieną parametras, sveikas, ką vadiname x. Ir tai išveda sveikasis skaičius. Štai grąža tipas pradžioje. Tada mes turime pagrindinę, iš linijų pora kodo pagrindiniame, iš kurių paskutinė yra spausdinimo ataskaita. Ir atminkite, kad tai klausimas čia. Kas yra iš tikrųjų bus atspausdintas šios funkcijos pabaigos? Ir tada mes iš tikrųjų turėti apibrėžimas prieaugio žemiau. Taigi užtrukti keletą minučių, žingsnis po kodas, atsekti dalykus. Ar žinote, kas bus spausdinamos būtent šio programos pabaiga? Gerai. Tikimės, kad jūs imtis keletą sekundžių išbandyti ir išanalizuoti šį vieną iš. Darom kartu. Taigi aš užbraukta prieaugis s deklaracija, ten viršuje. Tai buvo natūra išsiblaškymas. Tai ne savo kintamasis. Ji neturi savo apimtį. Tai tiesiog funkcija deklaracija, todėl tikslais bando išanalizuoti, kas yra vyksta šioje programoje, mes taip pat sėkmingai gali tik išvengti. Dabar turime šiuo atveju, Priežastis ši problema yra sudėtinga yra todėl, kad mes turime vietinių kintamųjų tiek pagrindinis ir prieaugis, kiekviena iš kurių vadinamas x. Ir, žinoma, šio klausimo esmė yra bando süss iš kur X keitė ir kaip ji gauti pasikeitė. Taigi aš spalvos kiekvienu atveju X tai vietos iki pagrindinio raudona. Ir aš spalvos kiekvieną atvejį x, vietinė prieaugio mėlyna. Pranešimas toje trečiojoje eilutėje iš esmės, Y lygus prieaugį X, kad prieaugis yra nėra praėjo pagrindinė s x, arba raudonas x. Šąla praėjo jo kopiją. Ir tai tik ketina dirbti su kad jo kopija, mėlyna x. Jei esate matematiškai linkę, jums gali Vietoj to, maniau apie tai, kaip x sub m, pagrindinės ir sub x I padala. Bet tai tas pats idėja. x sub m, arba raudona x s ankstesniame skaidrę, yra kintamieji, kurie yra local-- yra x, o kad atvejis yra vietos į pagrindinį, o I x sub, arba mėlynos kintamieji praėjusiais skaidrę, yra X atvejų, kad yra vietos prieaugio. Taigi, jums buvo suteikta galimybė išsiaiškinti, kas ši funkcija spausdinami pabaigoje? Aš Doug Lloyd, ir tai yra CS50.