DAVID Malan: Në rregull. Kjo është CS50, dhe kjo është fundi i javës së nëntë. Ka qenë një shakullinë mbi ditët e fundit. Dhe problemi vendosur shtatë, në qoftë se ju jeni gju thellë në të, të kuptojnë se ka mjaft bit e re që është në atje. Por le të shohim nëse ne nuk mund të pjesë çdo gjë së bashku këtu për pak kohë para se atëherë veering off në ende një tjetër drejtim dhe duke parë ku tjetër mund të shkojmë. Pra deri tani, ne kemi biseduar për HTML. Ne kemi folur në lidhje me CSS. Ne kemi biseduar për PHP. Ju keni filluar të përjetojnë SQL. Sot, ne do të flasim pak për JavaScript. Por si të bëjë të gjitha këto ndryshëm Gjuhë të përshtaten së bashku? Pra, kemi biseduar javën e kaluar në lidhje me Nocioni i të paturit e një server. Pra, le të vetëm të tërheqë këtë drejtkëndësh si një web server këtu. Dhe një web server shërben siguri fotografi. Dhe disa nga ato fotografi mund të jetë fotografi HTML. Pra, një nga gjërat që një web server mund të nxjerr nga goja mund të jetë një fotografi që ne do të nxjerrë vetëm si kjo përmban disa HTML. Pra, në kushtet e laik, çfarë ckemi HTML ju lejojnë të bëni? Audienca: Page look nice. DAVID Malan: OK, të bëjë një faqe të duken bukur, edhe pse unë mendoj se kam provuar që ndryshe. Pra HTML do të ju lejojnë të nxjerr faqet strukturore, dhe kjo ju lejon të lloj aesthetically të shënojë një faqe, shënuar deri përmbajtjen statike, kështu që ju atëherë mund ta shohin me një shfletues web. Por kjo është çelësi. Është përmbajtje statike. Ju shkruani atë, se e ruani, dhe pastaj ju anije atë. Dhe web server pastaj shërben ajo deri në vizitorët tuaj. Por ne stilizoj gjëra duke përdorur një ndryshme Gjuha e krejt. Ne kemi filluar të përdorim një atribut stil Etiketimet e caktuara. Dhe atribut stil le të vendosur gjëra të tilla si madhësia e shkronjave dhe ngjyra. Dhe ju keni filluar ndoshta për të zbuluar, ose ju së shpejti do të formës së prerë Projektet potencialisht, ende të tjera pronat që ju mund të përdorni në CSS. Dhe kështu në kushtet e laik, çfarë atëherë me të vërtetë e bën CSS? Ata janë vetëm shembuj prej tyre. Çfarë e bën atë të ju lejojnë të bëni këtë HTML nuk duket se nga ajo që ne kemi parë deri tani? Audienca: Definimi stilet me veten. DAVID Malan: Definimi stilet me veten. Pra, të përcaktuar gjëra të tilla si klasat e si ju mund të keni hasur, ose unike identifikojnë nyjet në një dokument në mënyrë që ju mund të stilizoj ato. Por, më saktësisht, unë do të them që CSS me të vërtetë ju lejon të marrin gjërat milje e fundit dhe ju lejon të specifikoni shumë më saktë estetikë, ndërsa HTML për pjesën më lejon të ju strukturë faqet tuaja. Dhe, edhe pse ka disa standarte, si e pamë tag për një tag kreut, e cila me përafërsi bërë gjëra të mëdha dhe të guximshme. Kjo është një përkufizim mjaft të përgjithshme i tag - e madhe dhe të guximshme. Çfarë font size është se? Çfarë ngjyre është kjo? Si të guximshme është se? Dhe CSS ju lejon të imët më shumë mendje gjëra të tilla si se. Si dhe plan urbanistik, si disa e ju e keni parë. Dhe sinqerisht, CSS është pak e një gjuhë të çrregullt. Është shumë e fuqishme në atë që ju mund të bëni fjalë për fjalë çdo faqe interneti që ju keni parë në internet sot me të, por kjo është lloj i një dhimbje në qafë. Dhe disa prej jush kanë shembur kokën tuaj kundër mureve tashmë vetëm për të bërë diçka të trashë si qendër një menu në Problemi vendosur shtatë në qoftë se ju keni marrë për të kjo pikë tashmë. Por e kuptojnë, ato gjëra të merrni më të lehtë kalimin e kohës. Ju filloni në njoftim modele. Dhe përsëri, Google do të jetë miku juaj për mënyrat e ndryshme në të cilat ju mund të zgjidhur probleme të tilla. Dhe unë guxoj të them me CSS, HTML dhe më shumë në përgjithësi, ju mund të zgjidhin problemet në shumë më tepër mënyra, të cilat mund shumë mirë të jetë e saktë, se sa ju mund të në diçka si C, madje edhe tani PHP, ose JavaScript. Nuk janë vetëm shumë të ndryshme mënyra për të hedhur gjëra jashtë. Por kjo filloi të marrë çrregullt, kemi thënë. Vetëm lloj i përzien HTML tuaj dhe CSS juaj me atribut stil ishte pak i lëngshëm. Dhe kështu që ne vend të kësaj tha, lloj abstrakte të folurit, që ju duhet të paktën të fillojnë të faktorit nga CSS tuaj ndoshta. Jo stilin tuaj atributet, por të paktën përdorni tag stil brenda asaj pjesë e web faqes? Audienca: Shef. DAVID Malan: Në kokë. Deri tani, ne vetëm kishte titullin deri atje, por ju gjithashtu mund të shtoni një stil tag, dhe ju mund të bëjnë CSS tuaj afërsisht flet drejtim të lartë të faqes. Por pastaj ne u gjërat një hap më tej dhe ne faktorë që më shumë në një file të veçantë. Dhe kështu këto dy fotografi ishin disi tani lidhura. Dhe me të vërtetë kjo ishte tag që bëri atë. Dhe ajo ishte një nga prob- motivet për factoring nga CSS tonë të gjithë më shumë? Audienca: Reusability. DAVID Malan: Reusability. E drejtë? Ju mund të keni parë në p-vendosur tashmë shtatë se një shumë e faqeve, Faqja blerjen, shitjen faqe, Faqja e portofolit, ndoshta janë strukturuar disi në mënyrë të ngjashme. Ka një logo financave CS50 në krye nëse ju keni vendosur për të ndryshuar atë. Ka një footer në fund të faqeve. Dhe CSS ju lejon pastaj të faktor atë atë në një file të veçantë në mënyrë që nëse ju doni të ndryshojë diçka në nivel global në të gjithë faqen tuaj, ju mund të vërtetë vetëm të ndryshojë atë në një vend. Por ka një çmimi që ju paguani potencialisht duke duke faktorë jashtë CSS dosjen time nga HTML në një të veçantë paraqesin referenca atë me tag, të cilat ne pamë të hënën. Çfarë mund të jetë i dobësitë kjo? Duke menduar përsëri një javë më parë për të, kur ne jemi duke folur për HTTP dhe TCP / IP dhe si internet punon. Diçka këtu? Audienca: Kjo merr më shumë kohë. DAVID Malan: Kjo merr më shumë kohë. Pse? Audienca: [padëgjueshme]. DAVID Malan: Po. Pra, kjo ndoshta merr pak më shumë kohë. Për shkak se një, CSS është padyshim jo në të njëjtën lëndës. Deri tani ju keni për të mos bërë një, por dy kërkesa. Dhe secili prej këtyre kërkesave siç e pamë në Chrome në të ashtu-quajtur Inspector, dhe kemi shikuar në skedën e rrjetit, çdo e ato fotografi kërkon një HTTP kërkesa, të cilat ne pamë merr disa sasinë e kohës. Tani, ndoshta nuk është shumë. Ndoshta është vetëm 20 milisekonda. Ndoshta kjo është 200 milisekonda. Por mendoj se për një faqe si Facebook, ose CNN, apo të Google, të cilat janë shumë më të më të mëdha se shembujt që kemi shikuar deri tani. Këto faqe mund të ketë dhjetëra dosjeve, secila prej të cilave mund të kërkojnë një shkarko fotografish. Pra, gjërat mund të potencialisht të të fillojë për të ngadalësuar. Dhe sidomos këto ditë kur ne të gjithë kanë telefonat celular në xhepat tonë dhe lidhje interneti te ngadalte, që ka për prisni një milliseconds pak më shumë, disa më shumë milisekonda për shtesë fotografi në fakt mund të jetë i ngadalshëm. Latente është fjala që përshkruan lloj duke pritur që ju keni se ju përjetojnë kur duke pritur për disa pjesë e informacionit. Por ka një përmbysur. Pra, kjo nuk është e gjitha një lloj - ai në fakt është pak e një kolovitem këtu. Dobësitë tani, por çfarë mund të bëjmë shfletues në qoftë se ata janë të zgjuar për të shmangur që ka për të kërkuar të njëjtën styles.css paraqesë përsëri mund të jetë për të bërë çfarë? Cache atë. Pra caching - C-A-C-H-E - përgjithësi do të thotë këtu vetëm për të ruajtur kartelën që kërkohet për herë të parë, dhe atëherë kontrolloni cache tuaj për të. Kontrolloni ju jeni lloj enë magazinimit, dhe nëse ju tashmë keni një kopje e styles.css, edhe nëse disa të tjera faqe në p-vendosur, ose ndonjë faqe interneti, kërkon atë përsëri, vetëm për të dhënë përdorues që kopje njëjta kopje e ruajtur. Mos u mërzit duke kërkuar atë. Dobësitë atje, edhe pse, si disa nga ju kanë morën përsipër në p-grup të. Nëse ju bëni një ndryshim në server dhe të ju shkoni përsëri në shfletuesin dhe ju ringarkoni, nganjëherë shfletuesi bën ju një favor dhe nuk bother ri-shkarkimit dosja juaj styles.css sepse, eja, cilat janë shanset se këto stilet që Facebook përdor do të ndryshojë orë për orë ose ditë për ditë? Është shumë e ulët. Ata mund të ndryshojnë me kalimin e kohës, por jo nga minuta ose me ore. Pra, një mashtrim, vetëm FYI kur të bërë web zhvillimin, shpesh mbajnë poshtë ndryshim kyç për shembull dhe pastaj kliko ringarkoni në shfletuesin tuaj, dhe kjo do të zakonisht tregoni shfletuesit ringarkoni çdo gjë, edhe nëse ju tashmë keni ajo në cache. Pra, përsëri, upsides dhe dobësi, por të gjithë ata në fund të fundit të hartuar vendime. Deri tani, ne nuk kemi vetëm të përfundojë tregimin këtu. Nëse unë tani të shkuar mbrapa dhe mbrapa dhe mbrapa dhe mbrapa, kemi filluar për të futur jo vetëm HTML, por PHP. Pra, në kushtet e laik, çfarë ckemi PHP le të bëjmë? Audienca: [padëgjueshme]. DAVID Malan: Çfarë është ajo? Audienca: Prezantoni logjikë në kodin. DAVID Malan: Po, të futur logjikë në kodin tuaj. Pra, kjo është një gjuhë programimi e vërtetë me sythe, dhe variablave, dhe funksionet dhe konditat dhe gjithë gjërat që ne kemi qenë duke përdorur rrugën prapa kur që nga zeroja. Dhe PHP, ne kemi parë, mund të përdoren ose në rreshtin e komandave - ajo nuk duhet të ketë asgjë të bëjë me internet, edhe pse kjo është të vërtetë origjina e saj dhe atë që ajo tenton të jetë e mirë në dhe të favorshme për - por ju mund të përdorni PHP thjesht nga natyra për faktin se ajo ka një të shtypura () funksion, dhe një printf () funksion, ose një jehonë () funksion. Ka bunches mënyra që ju mund të shtypura tekstin me PHP. Prandaj, ju mund të përdorni këtë programimit Gjuha të prodhimit saktësisht atë që ne ishim duke folur për para. Ju mund të gjenerojnë dinamike HTML tuaj. Ndoshta jo të gjithë atë. Ndoshta ju hard gjëra kod, si header, dhe futboll, dhe logo, dhe fletë tuaj stil, dhe të gjithë se. Por, për diçka si p-vendosur shtatë, ku jeni manipulimin e stoqeve dhe duke treguar portofolin e përdoruesit, e cila është do të ndryshojë në mënyrë dinamike, ju mund të me siguri përdorin PHP dhe logjikën që i jep ju si një gjuhë programimi për Prodhimi dinamike subsets e faqes. Pra, kur ju flisni për faqet e internetit dinamike, ose programimit web, kjo është atë që ju jeni të vërtetë duke folur për. Duke përdorur një gjuhë si PHP, ose gjëra i quajtur Python ose Ruby ose Java ose ende gjuhë të tjera, për kërkimin e një bazë të dhënash shpesh, ose në një tjetër server, dhe pastaj fol dinamike jashtë HTML. Tani rezultati përfundimtar, si një mënjanë, është se HTML e faqet e internetit më, duke përfshirë p-vendosur shtatë juaj, është ndoshta do të jetë një rrëmujë e madhe në qoftë se ju shikoni në burim Kodi në një shfletues. Kjo nuk është një punë e madhe. Në këtë pikë, kur ne lidhje me kujdes stil, ne lidhje me kujdes gjëra që ju shkruani. Ne nuk do të kujdeset për gjëra të se ajo që rezultatet tuaja kod. Pra, mos u bëni merak për vulë këtu nëse është e PHP kjo është në fakt kompjuteri sende. Në fund të fundit, shfletuesi nuk do të kujdeset, dhe një njeri nuk do të jetë në kërkim në burim gjithsesi. Ne stafi, për shembull, do të të kërkoni në PHP tuaj. Pra më lejoni të jap një shembull të shpejtë tani e pse tjetër kjo mund të jetë e dobishme. Pra sinqerisht, unë nuk mund të kujtohet fundit kohë kam përdorur C për të zgjidhur një problem në bota reale. Ajo ishte ndoshta në shkollën e diplomuar, kur Unë e nevojshme për të përdorur një gjuhë që ishte mjaft niveli i ulët dhe më dha mundësi për të bërë diçka shumë të lartë kryerjen me të vërtetë të ruani si CPU shumë cikle si unë mund të, në pjesën më të madhe sepse unë kam qenë duke përdorur grupe të mëdha të të dhënave, dhe çdo cikël CPU numërohen. Dhe sinqerisht, madje edhe në gjëra të tilla si telefonat këto ditë dhe pajisje të tjera ku ju nuk e mjaft të ketë sa më shumë kujtesës dhe ju nuk keni mjaft të ketë si më shumë CPU, përdorimit të gjuhëve të shpejta është ende tërheqës. Por në botën e vërtetë, kur ju vetëm duan të hedhin ndonjë program së bashku për të analizuar disa të dhëna, ose ju keni mbledhur një bandë e tërë e regjistrimeve për disa grup studenti dhe ju doni për të shumë shpejt automate email dërguar njëra nga një deri në çdo një prej atyre Registrants, ju jeni duke shkuar për të arritur për një gjuhë të nivelit të lartë se C mënyrë që të flasin. Diçka si PHP ose Python, Ruby ose, ose një gjysmë duzinë të tjerët që ekzistojnë këto ditë. Por ata tre janë ndoshta drejta më të modës tani. Dhe çfarë kjo do të thotë është se ju mund të hapur deri një editor teksti si Gedit ose çdo gjë më tjetër dhe vetëm pastaj të fillojë shkruar kodin, pa pasur nevojë të shqetësuar në lidhje me hartimin, pa pasur nevojë të të vërtetë të shqetësuar në lidhje me menaxhimin e kujtesës, mbajtur në mend se edhe pse pak Pjerrësia përfundimisht do të kthehet të kafshojë ju në qoftë se të dhënat e merr set të mëdha apo problemi merr madh. Por çfarë do të thotë kjo për na është vijim. Më lejoni të shkojnë përpara dhe të drejtuar speller nga problemi vendosur gjashtë. Pra kjo është zbatimi trie bazuar ime që kam përdorur më e madhe Bordi atje ku nuk kam kryer aq mirë. Ne do të kthehemi në një kohë të javës dhe sërish ata të cilët ka fund deri në majë Bordi i madh në ligjëratën tonë të fundit. Por tani për tani, më lejoni të shkoj përpara dhe vetëm drejtuar zgjidhje tim në tekst, dhe ne do të bëjmë King James Bible, dhe këtu ne do të shkojmë. Pra, ata janë të gjithë prej gjoja fjalë misspelled jashtë i King James Bible. Dhe zbatimi ime mori gjysmën e një të dytë në total. Pra, nuk është shumë keq për këtë kompjuter veçanti. Por mendoj se sa kodojnë Unë kisha për të shkruar. Mendoni se sa Kodi keni pasur për të shkruar. Mendoni se sa ore keni shpenzuar në D-sallë ose fjetore tuaj ose kudo në fakt coding deri atë zgjidhje. E pra, në qoftë se unë në fakt kanë një nivel më të lartë Gjuha si PHP, marrë parasysh të çfarë mund të bëj këtu. Së pari, mendoj se kjo është në vend Kodi juaj shpërndarjes. Kjo është një file i quajtur Speller. Ajo është në dispozicion si pjesë e sotme Kodi i Shpërndarjes. Dhe unë jam duke shkuar për të tundë dorën time në shumicën e detajeve, por kjo është në fakt një shembull interesant i sa ju mund të transferoheni një gjuhë si C mbi të PHP. Unë fjalë për fjalë u hap dy dritare tekst, një me C versionin tim të Shkruaj një fjalë, dhe kam filluar atë në përkthimin tim kokë për PHP dhe të shtypni atë duke përdorur funksionet ekuivalente të afërta. Pra, disa nga këto gjëra janë të ndryshme. Ne pamë herën e fundit që PHP nuk e përdor përfshijë në mjaft të njëjtën mënyrë. Ajo përdor kërkojnë në mënyrë tipike, edhe pse përfshijnë ekziston. Përcaktojnë eshte nje pak i ndryshëm nga Përcaktojnë në C #, por kjo është se si kemi bërë një konstante. $ Argc ajo rezulton ekziston në PHP, kështu që ne kemi parë se më parë. Këto janë vetëm variablat, të gjithë të cilat fillojnë me shenja të dollarit. Kujtojnë këto janë vetëm një bandë e pikave lundrues. Pra, histori të gjatë të shkurtër, ju jeni të mirëpritur për të shfletoj nëpër këtë nëse kurioz, kjo është pothuajse një line-për-line konvertimin e Shkruaj një version C në PHP. Dhe ju mund të bëni këtë përsëri për një gjysmë duzinë gjuhë të tjera. Por ajo që është interesante është kjo. Apo çfarë është sinqerisht jashtëzakonisht e dobët është kjo. Më lejoni të shkojnë përpara dhe të shkruani në lidhje me dictionary.php, dhe pretendojnë se unë jam do të shkojnë përpara dhe të ri-zbatuar Problemi vendosur gjashtë këtu. Pra, le të propozojë parë se në këtë fotografi, të cilat do të zbatohen në PHP, aq më lejoni të hapur kodet e mia si kjo. Më lejoni t'ju jap vetes një global ndryshueshme, $ madhësia merr zero. Dhe unë jam duke shkuar për të dhënë veten një tabelë hash. Unë do të përdorin një tabelë hash për këtë gjë. Si unë deklaroj një tabelë hash në PHP? Done. OK. Pra, të hapur afër kllapa kllapa përfaqëson atë në PHP, siç e kemi parë? Një koleksion, por një grup që mund të të jetë një array asociativ. Një array asociativ është një strukturë e të dhënave që Çelësat bashkëpunëtorë me vlera. Tani në thjeshte indeksuar numerikisht array, këto çelësat janë ato? Zero, një, dy, tre, e drejtë? Vjetër sende shkollë kthyer nga C. Por kjo mund të të jetë edhe vargjet, si dhe foo bar, ose Maxwell, ose ndonjë varg të tillë. Kështu që unë mund të levave që në një moment të vetëm. Më lejoni të shkojnë përpara dhe të deklarojë një funksion si - le të bëjmë load () e parë. Pra load function (). Dhe PHP është pak më ndryshe se në fjalë për fjalë që ju shkruani funksion, por ju nuk shkruani një lloj të kthimit. Unë jam duke shkuar për të shkuar përpara dhe të thonë se load () Funksioni duhet të marrë në Argumenti $ fjalor, vetëm si versioni C bëri. Unë jam duke bërë që nga kujtesa. Dhe unë propozoj që unë jam duke shkuar për të bërë këtë. Unë jam thjesht duke shkuar për të bërë foreach. Unë jam duke shkuar për të thirrur një funksion të quajtur skedar (), duke kaluar ne emër te cilat fotografinë, e cila është e ndryshueshme $ $ Fjalor si fjala. Dhe pastaj brenda e mia për lak këtu, unë jam do të shkojnë përpara dhe të ruajtur në tim $ $ Tabela që merr fjala e vërtetë. Done. Oh, prisni. Done. OK. Kjo është load () Funksioni thonë në PHP. Tani, pse e bën atë punë? Dhe unë jam lloj i mashtrimit këtu. Pra, një, foreach pamë shkurtimisht hera e fundit. Ajo thjesht do të thotë që ju mund të iterate mbi një koleksion pa mërzit me I dhe n dhe plus plus, dhe të gjithë se. Fjalori është sigurisht emrin e file, diçka si të mëdha apo të vogla, dy Fjalorët e kemi përdorur për herë të fundit. Dokumentit është një funksion që hap tekstin fotografi, lexon atë në rresht pas rreshti, dhe Duart ju përsëri një koleksion të madh, secilin nga elementet e të cilit është një Linja nga këtë dosje. Pra, kjo është kombinimi i fopen, dhe fread, dhe ndërsa loop, dhe Shkrimi, dhe të gjithë se. Së fundi, si fjala thjesht do të thotë se është variabël unë jam do të ketë qasje në në çdo ripërsëritje në këtë lak. Pra me pak fjalë, kjo do të thotë një avion i linjës këtu të hapur skedarin emri i të cilit është në fjalor, e ndryshueshme, iterate mbi ajo rresht pas rreshti, dhe çdo herë që ju të merrni një linjë, dyqan në një fjalë të ndryshueshme të quajtur, dhe pastaj të bëjë diçka me fjalën. Çfarë doni të bëni? Unë dua të vënë fjalën në tryezën time hash. E pra, unë mund të vënë diçka në tim tabelë hash ashtu si në C duke përdorur kllapa katrore. Ky është emri për tryezën time hash. Unë jam duke shkuar për në indeksin që hash Tabela në këtë vend. Pra, nuk parantezë zero, nuk kllapa një. Quote Bracket mbyll thonjëzat diçka, çfarëdo që është fjala. Dhe ashtu si ju mund të keni në tuaj Puna hash table trie, ju vetëm dyqan efektivisht një Boolean, në mënyrë implicite ose në mënyrë eksplicite. Done. Unë jam ruajtjen vlera e vërtetë. Tani ka disa gjëra të Unë jam prerja qoshet këtu. Teknikisht, nuk do të jetë një Linja bezdisshëm i ri, / n, në fund të secila prej këtyre fjalëve. Kështu që unë ndoshta duhet të thërrasë një funksion PHP pres quajtur (), i cili do të mjaft fjalë për fjalë pres atë off. Dhe unë në fakt duhet të të bëjë një gjë tjetër. Unë ndoshta duhet të Zmadhimi i madhësisë në secilin përsëritje, kështu që unë jam mbajtja globalisht i se çfarë është ajo. Dhe sinqerisht, dhe kjo është një nga Aspektet stupider e PHP, nëse ju jeni duke përdorur një ndryshore globale, ju keni nevojë për në mënyrë eksplicite për të thonë se ju jeni. Kështu që unë jam duke shkuar për të vërtetë shkruani globale $ Madhësia, globale $ tavolinë, dhe tani Funksioni im është i plotë. Pra, nuk është mjaft aq e thjeshtë si më parë, por ndoshta mori më pak kohë sesa C version, ndoshta? OK. Pra, tani le të bëjë kontroll () funksion. Le të shohim nëse kjo të paktën mori orë në fund se ai na mori në C. Pra, më lejoni të shkoj përpara dhe të deklarojë shikoni si një funksion. Merr në fjalën e argumentit, e cila është do të vijnë nga speller. Dhe unë jam vetëm duke shkuar për të kontrolluar nëse pas ndryshueshme, tavolinë isset strtolower parantezë e fjalës - le të balancuar të gjitha kllapa e mia - pastaj kthehen e vërtetë. Else - se ishte me të vërtetë e vështirë pjesë e këtij programi. Tjetër, kthimit të rreme. Done. Kjo është çeku (). Tani, pse e bën këtë punë? E pra, e kam kaluar në një fjalë, cila eshte nje varg. Dy, unë jam duke kontrolluar në brendësi të hash tavolinë, i cili është quajtur $ tryezë. Unë jam duke e detyruar atë për të me të vogla duke telefonuar tolower një funksion mjaft i ngjashëm () në C, por kjo e bën krejt fjalën, jo një karakter të vetëm. Dhe në qoftë se që është vendosur, me fjalë të tjera nuk është një grup vlera, me fjalë të tjera, në qoftë se ajo është e vërtetë, atëherë po, kjo është një fjalë. Sepse unë e vënë atë atje me ngarkesë (). Dhe nëse jo, unë jam duke shkuar për t'u kthyer rreme. Tani të tjerët janë të lehtë. Madhësia Funksioni (), si mund ta bëni këtë? Unë në thelb do të kthehen $ madhësinë. Por unë teknikisht duhet të bëni këtë gjë të bezdisshëm. Dhe në të vërtetë deri dëgjoni, unë ishte prerja e një qoshe shumë. Unë me të vërtetë duhet të bëni globale tryezë $. Por që u tha, shkarkoj). Shkarkoj () është e mahnitshme. Funksioni shkarkoj (). Si mund unë dua për të zbatuar shkarkoj ()? Done. OK. Pra shkarkoj (), menaxhimin e kujtesës është mjekuar plotësisht e për ju në diçka si PHP dhe një shumë i nivelit të lartë gjuhët. Pra, kjo është e mahnitshme. Ashtu si pse dreqin kemi shpenzuar kaluara tetë javë plus në shkrim C me sa duket me të vërtetë i ngadalshëm, me të vërtetë koha Problemet e konsumojnë me dhjetëra orë i punës nën rripa tona? E pra, për një gjë, kjo mund të punojnë gjobë për programe të vogla. Kjo sigurisht sped up my Ora zhvillimit. Por le të shohim se çfarë ndodh në botën reale. Më lejoni të shkojë në këtë directory në një dritare terminali. Ka Speller. Dhe vini re si një mënjanë, dhe ju mund të kanë hasur në këtë grup në zgjidhjen gjashtë apo problem i ngritur shtatë. Ju nuk keni për të në mënyrë rigoroze të përfundojë me fotografi PHP. php. Nëse ju vendosni një rresht si atë të parin në shumë të lartë, që është një linjë të veçantë e sintaksës që në thelb do të thotë të gjetur program të quajtur PHP dhe e përdorin atë për të interpretojnë këtë skedar. Deri tani askush nuk e di se Unë jam drejtimin e një program PHP. Unë mund të kandidojë atë vetëm sikur ajo ishin diçka e përpiluar në C. Por këtu është gjë. Në fakt, le të bëjë këtë përsëri. Dropbox/pset6 /. Ka Speller. OK, 0.44 sekonda. Ajo mori të shpejtë këtë kohë. Tani le të shkojë në versionin e PHP. Gëzohem kontakt. Por thjesht mendoj se sa kohë Kam ruajtur në orët e zyrës. OK. Pra 3,59 sekonda, e cila në fakt nuk do të tingëllojë si i saktë ose. Por kjo është për shkak histori të gjatë të shkurtër, kur ju jeni shtypje nga një sasi të madhe e stuff në ekran, që Vetë ngadalëson gjëra poshtë. Çfarë me të vërtetë mori në CPU aplikim ishte 3,59 sekonda, në Kontrasti në C, e cila mori 0.44 sekonda më së fundi. Kjo është me të vërtetë një urdhër i magnitudë ndryshme. Pra, ku është çmimi që vjen nga? Pse është kaq shumë më e ngadalshme? Pse nuk PHP kryejnë aq dobët? Danielle? Audienca: Ju nuk e bëri me të vërtetë përdorin një tabelë hash. DAVID Malan: Unë nuk e bëri me të vërtetë përdorin një tabelë hash. Kështu që unë lloj i bëri. Pra, kjo është një koleksion asociative. Më shumë gjasa, nëse njerëzit në PHP janë me të vërtetë i zgjuar, ata kanë përdorur nën individualitet një tryezë aktuale hash zbatuar në diçka si C ose C + +. Por. Po. Audienca: [padëgjueshme]. DAVID Malan: Po. Pra, secili nga funksionet e shkrova tani - në fakt, mund të ju them se një herë më shumë një pak louder? Audienca: Secili nga funksionet që ju përfshihet ka shumë më shumë të plotë Kapaciteti se - DAVID Malan: Pra, kjo është shumë e vërtetë. Ka shumë më lart se ne jemi jo të vërtetë duke parë duke u përqendruar vetëm në dictionary.php, të cilën unë vetëm shkruante. Nga ana tjetër, ka një përkthyes të tërë shkon në sfond. Në të vërtetë, kur unë u zhvillua këtë program, ajo nuk ishte drejtimin zero përpiluar dhe ato projektuar për Intel CPU time. Përkundrazi, ajo ishte duke ecur rresht pas rreshti Kodi PHP që duket tamam si ne e shtypur atë. Dhe kështu sa herë që ju përdorni një gjuha e interpretuar, ju të bëjë në fakt paguajnë këtë çmim. Ajo do të marrë disa kohë për të lexuar top tuaj fotografi deri në fund, u largua për të drejtë, dhe pastaj të ekzekutojë çdo vijë përsëri dhe përsëri. Tani, në realitet, sidomos në internet, ju në fakt mund të përshpejtojë këtë proces caching nga rezultatet e Kodi PHP duke u interpretuar. Dhe kjo ka kuptim në internet, sepse në qoftë se ju nuk keni një përdorues si mua këtu, por 1000 ose 10,000 përdoruesit, atëherë ndoshta hera e parë që skedari është arrihen është i ngadalshëm, por më pas kjo është shumë më e shpejtë. Por kjo shumë, përsëri, është një tregti off. Dhe për diçka si një të dhënave kërkimore caktuar, apo edhe diçka e madhe si kjo, përdoruesit e juaj përfundimisht do të të fillojnë të mendojnë se ngadalësim. Gjuhë Pra me pak fjalë, janë interpretuar shumë në modë, shumë popullor, dhe sinqerisht ndoshta janë gjuhët që ju duhet të arrijnë kur për zgjidhjen e problemeve të mëvonshme për CS50. Por të kuptojë se sa ju jeni me të vërtetë duke marrë për të dhënë nën kapuç vërtetë ato disa javëve të fundit në Hash tavolina, dhe pemët, dhe përpiqet, të cilat janë përdorur në fund të fundit që në fakt zbatojë gjëra të tilla si parantezë të hapur, kllapa katrore, të cilat ne tani mund të mirënjohje të marrë për të dhënë. Pra, le të marrin një vështrim tani në këtë kontekst web. Dhe unë u përmend për herë të fundit që ka një bandë e superglobals në PHP që nuk janë me të vërtetë të rëndësishme në vijën komanduese. Ata janë më relevante në kontekstin i përdorur PHP në një kontekst web. Pra, running PHP në një web server në mënyrë që për të gjeneruar të stuff like HTML. Dhe ne lëshoi ​​në $ _GET dhe $ _POST, dhe kjo është ajo ku përdoruesit automatikisht ' input përfundon në qoftë se ju thjesht të paraqesë një formuar në një skedar përfundon në. php në një web server si aplikim. Por le të shohim shkurtimisht në _COOKIE _SESSION $ Dhe $. Në terma laik, çfarë është një cookie si ju e kuptoni atë në kontekstin e duke përdorur web? Audienca: dokumentit në kompjuter. DAVID Malan: Po. Kjo është një skedar në kompjuterin e përdoruesit mbjellë me çfarëdo website ju ndodh që të vizitoni. Pra, kur ju shkoni në Facebook, kur ju shkoni për bankofamerica.com, kur shkoni në google.com, kur ju shkoni në pothuajse çdo faqen e internetit në botë këto ditë, përfshirë cs50.net, një cookie është mbjellë on kompjuterit tuaj, e cila eshte ose një vlerë ruajtur në RAM në tuaj kompjuter në kujtesën e shfletuesit tuaj, ose ndonjëherë me të vërtetë një skedar ruhet në hard drive tuaj. Dhe çfarë është ruajtur në mënyrë tipike në këtë dosje nuk është emri juaj i përdoruesit, nuk tuaj password, zakonisht nuk është diçka ndjeshme nëse e internetit nuk është aq mirë me sigurinë e tyre, por më tepër ajo është një identifikues unik i madh në mesin e gjëra të tjera. Është një numër i madh të rastit mbjellë në tuaj kompjuter, por ju mund të mendoni si lloj i një vule dore virtuale si nga një klub ose disa amusement park që lejon stafi, pronarët e që shërbimit, për të kujtuar se kush jeni. Pra, nëse numri i madh të rastit është si 12345678, edhe pse kjo është padyshim jo shumë të rastit, mendoj se si Vula dorë se kur ju vizitoni facebook.com për herë të parë, ata vulosë atë numër në dorën tuaj. Dhe pastaj për shkak se ju flisni http, ju duke qenë një shfletues, dhe për shkak të Facebook padyshim flet njëjtë si një web server, HTTP protokoll thotë se çdo kohë që ju vizitoni më vonë facebook.com, nëse kjo është një e dytë më vonë, një orë më vonë, edhe të nesërmen, aq kohë sa ju nuk e keni në mënyrë eksplicite Anglisht jashtë, e cila efektivisht është si larja e duarve tuaja. HTTP thotë se ju duhet të paraqesë tuaj t'ia vulosë çdo herë që kthehen në këtë website. Çfarë atëherë Facebook do të është se ata shikoni në atë vulë dore dhe ata thonë, oh, 123456789. Unë nuk e di në shikim të parë se ky është David Malan në Kembrixh, Massachusetts, por ata mund të kontrolloni e tyre Baza e të dhënave dhe të thonë, oh, personi on cilit kompjuter ne mbjellë 123456789 është David Malan nga Kembrixh, Massachusetts. Le të tregojnë se përdoruesi atëherë profilin e tij faqe ose Feed Lajme tij. Por ka një problem këtu, nëse kjo është se si web të vërtetë punon. Le të hidhni një sy në një shembull të shpejtë. Le të shkojë në të vërtetë për të thënë facebook.com. Por, para se të mund të shkojë atje, le të Më të shkojnë përpara dhe të hapur Chrome-së Inspektori poshtë këtu. Më lejoni të shikoni në skedën e rrjetit. Dhe tani le të shkojnë përpara dhe të shtypni në https://facebook.com. Dhe unë jam duke bërë atë mënyrë që ne nuk e shohim të gjithë ata përcjellime dhe mbeturinave kohë duke kërkuar nëpërmjet atyre. Më lejoni hit enter. Dakord. Ne e shohim një bandë e tërë e kërkesave. Ka vjen Facebook. Ka një bandë e tërë e dosjeve. Dhe këtu, për përmendjen e mia kohë latente e fundit, kjo është një shumë e kërkesave HTTP. Por e para është ndoshta më interesante. Pra, le të shkoni poshtë këtu, dhe Unë do të zoom në në një të dytë. Kjo do të jetë lloj i një rrëmujë, por le të shohim. Facebook po dërgon na një tërë bandë e sende. Por ee, interesante. Ata janë mbjelljen e jo një, por katër pulla dore onto duart e mia këtu. Set-cookie, Set-cookie, set-cookie, set-cookie. Dhe ka disa karakteristika këtu. Të gjithë ata të përmendur disa lloj skadimit. Dhe kjo duket si Facebook është duke shpresuar për të kujtuar mua deri në vitin 2015. Pra, kjo është me sa duket koha me të cilën Unë duhet të hyni nga, ose ata do të thjesht automatikisht të marrë Jam nuk vijnë. Pra, kjo është në fakt një të mirë Sasinë e kohës. Dhe ka disa të tjera gjëra të ndodh këtu. Kjo cookie duket të jetë me forcë fshihet duke thënë se ai përfundoi në vitin 1970 para biskota ekzistuar. Pra, shfletuesi është vetëm do të marrë OK, kjo është si larja vulën duart. Por tani kur shfletuesi im bën një kërkesë të mëvonshme - më lejoni të shkoj përpara dhe të bëjë këtë përsëri dhe reload. Tani më lejoni të shkoni përsëri në Kërkesa e lartë dhe të shkojnë poshtë këtu, të kërkojë headers. Vini re këtë. Deri tani unë jam nën jo headers përgjigje, por vini re ai thotë kërkesë headers. Dhe vini re se shfletuesit e mia si pjesë e Kërkesa e tij pas goditur ringarkoni ka dërguar paktën vijim informacionit. Nuk është caktuar-cookie, por cookie. Pra, kjo është vija, HTTP header kështu për të folur, ku shfletuesi im është lloj e pa e ditur tim të paraqitur dora ime për inspektim Facebook. Pra, këto cookie mund të jetë përdorur pastaj për çfarë? Për të mos harroni se kush jeni, apo të kujtohet se si shumë herë ju keni qenë atje, ose me të vërtetë asgjë. Kështu që këtu është counter.php. Dhe më lejoni të zoom në në font. Dhe çdo herë që unë rifreskoni këtë faqe, njoftim ajo duke kujtuar se sa herë Unë kam qenë atje. E pra, kjo nuk është e gjitha që mbresëlënëse. Le të vetëm afër atë tab, dhe tani le të kthehemi në http://localhost/counter.php. Oh, kjo është interesante. Ajo ende mend, madje edhe pse unë mbyllur tab. Dhe sinqerisht, në qoftë se unë të mbyllur shfletuesit, nëse zbatohet në mënyrë të drejtë, unë ende mund të mbani mend se ky përdorues është që ai ose ajo ishte hera e parë, dhe vetëm një herë kam shkuar në menynë Chrome, i cili këtu është këtu, dhe të shkojnë në Historia, dhe klikoni Qartë Shfletim dhënave, si disa nga ju mund të kenë në e kaluara, vetëm atëherë do cookies në të vërtetë të fshihet gjatë web zhvillimit. Pra, nëse ne do të shkojmë - le të mbyll gedit këtu. Dhe nëse ne do të shkojmë tani tek kjo skedë. Më lejoni të shkoni në tonë vhosts / localhost / publik, dhe më lejoni të bëj counter.php. Vini re se kjo është një shumë e program i thjeshtë. Kjo është një website shumë e thjeshtë. Pra, maja e dosjes është vetëm komente. Por këtu është një linjë e re që ju mund të kanë parë tashmë në p-vendosur shtatë, session_start (). Kjo është një linjë e kodit PHP që në thelb tregon web server, e bëjnë të sigurt për të shtypur duart dhe të bëjë Sigurohuni që të kontrolloni pulla dore. Kjo është e gjitha që linjë e bën, dhe kjo e bën gjithë këtë proces për ne. Pastaj vëreni unë kam marrë vetëm dy degë këtu. Nëse counter kyç brenda kësaj ndryshueshme të veçantë globale të quajtur $ _SESSION Është vendosur - me fjalë të tjera, në qoftë se ka disa vlera atje - le të marrë atë dhe ruajtur atë në një lokal ndryshore të quajtur $ counter. Tjetër, le të caktojë $ counter vlera e parazgjedhur e 0. Tani këtu është një aspekt i PHP kjo është si një bekim dhe një mallkim. PHP është pak i lëngshëm. Pra, ndërsa në C, çfarë do Shtrirja e counter kanë qenë qoftë këtu apo këtu? Ajo do të kishte qenë i mbyllur të këtyre formatimin e teksteve kaçurrel. Me mend se çfarë? Në PHP, ai ekziston edhe jashtë atyre të formatimin e teksteve kaçurrel, këtu, dhe këtu, dhe këtu, dhe këtu, dhe edhe poshtë më poshtë. Kështu që unë them ky është një bekim në kuptimin që ju nuk duhet të mendojnë si vështirë sa ne e bëmë javë më parë. Por është gjithashtu një pak e një mallkim në se ska rëndësi se ku ju përdorni një ndryshore në PHP, të paktën në një program si ky, kjo është globalisht të arritshme për mirë apo për keq. Kështu që ju duhet të mbani në mend tani që variablat tuaja nuk mund të pacaktuar. Ju mund të keni përcaktuar ato diku tjetër. Por çfarë jam unë do të bëj në fund të fundit? Unë jam duke shkuar për të ruajtur brenda që globale variable si një vlerë e counter kyç rezultatin e duke bërë kundër plus 1. Pra, kjo është vetëm aritmetike që bën incrementation të atij kundër. Dhe fakti që unë jam ruajtjen që Vlera e kthyer në këtu është do të thotë të thelb Përditëso bazën e të dhënave të mos harroni se përdoruesi 123456789 ka qenë këtu dy herë. Kur unë bëj atë përsëri herën tjetër unë ringarkoni faqe, ajo do të kontrolloni Vula ime dore dhe thonë, oh, 123456789 përdorues ka tani qenë këtu tri herë. Dhe kështu ajo PHP dhe gjuhë të ngjashme janë duke bërë për ne është se ata janë duke parafytyruar se si dhe ku dhe për sa kohë për të ruajtur vlerat në këtë të veçantë superglobal. Dhe kjo superglobal herën tjetër unë vizitoni faqe është lloj i magjike para-populluar, e mbushur me vlera që ishin atje hera e fundit që keni vizituar, nëse kjo ishte një sekondë më parë, një javë më parë, apo në vitin 2013 dhe tani ne jemi duke folur rreth 2015. PHP dhe web server të kujdeset i të gjithë se për ju. Audienca: [padëgjueshme]. DAVID Malan: Ndryshoret në PHP janë në thelb gjithmonë globale nëse nuk ju deklarojë ato në brendësi të një funksioni, dhe atëherë ata janë lokale për të Funksioni i vetëm. Por për shkak se unë nuk kam shkruar asnjë funksionet, ata tani janë në mënyrë efektive globale në të gjithë dosjen time të tërë këtu. Audienca: A ka ndonjë mënyrë për t'i bërë ato lokale? DAVID Malan: A ka ndonjë mënyrë për t'i bërë ato lokale? Vetëm nga ambalazhi ato në funksione. E cila në versionin e fundit të PHP, ju mund ta bëni këtë me një funksion anonim. Por më shumë se në Konteksti i JavaScript. Por përgjigja e shkurtër është jo. Një përgjigje më të gjatë është po. Bukur. Pyetje e mirë quiz. Dakord. Pra, së fundi, faqja në vetvete është në të vërtetë shumë e thjeshtë. Vini re se një herë kam dalë nga modaliteti PHP, kujtojnë që të gjitha të këtij stuff poshtë më poshtë është vetëm do të merrni më pështyu nga papërpunuara të shfletuesit. Cila është e mirë, sepse unë nuk dua të dërgoni disa përdorues HTML, por unë nuk dua për të rinovuar atë dinamike HTML. Dhe një mënyrë unë mund të bëj për të zgjidhur këtë është të bjerë shumë shpejt kthehet në PHP mode, përdorni Open Pyetje Bracket marka shenjë të barabartë, dhe pastaj output vlera i banak. Ose në qoftë se kjo duket pak e fshehtë, kjo shenjë të barabartë është në të vërtetë vetëm disa sheqer sintaktik për këtë printf ($ counter). Por sinqerisht, kjo është vetëm një e shëmtuar pak dhe një pak i bezdisshëm për të tipit. Pra PHP shumë të bukur ofron këtë tipar ku ju mund të them vetëm atë më shumë shkurtimisht në të njëjtën mënyrë. Pra, çfarë po ndodh nën individualitet? Le të shikojmë shpejt në rrjet tab këtu për counter.php. Dhe më lejoni të shkoj përpara dhe e parë le të qartë cookies tuaj. Të dhëna të qarta LET'S shfletim viti fillimi i kohës. Tani le të kthehemi përsëri mbi këtu. Tani le të rifreskoni faqen. Dhe unë jam kthyer në zero. Sepse Vula dora ime ka qenë larë, Unë tani të merrni një cookie të re. Në të vërtetë, nëse unë shoh në skedën e rrjetit dhe shikoni në headers përgjigje, njoftim se pajisja është dërguar mua një cookie emri i të cilit është disi në mënyrë arbitrare, por lloji i arsyeshme, PHPSESSID. Dhe kjo është dërguar mua kjo me të vërtetë numrin e madh të rastit. Kjo nuk është një numër mjaft. Kjo nuk është mjaft heksadecimal. Kjo është një lloj i vargut alfanumerike, por me sa duket kjo është e rastit. Dhe kjo është vula dorë në mënyrë që të flasin se unë jam duke iu referuar. Ndërkohë, nëse unë klikoni dhe pastaj ringarkoni shikoni në këtë linjë të dytë për tim të dytë Kërkesa, vëreni tani që kërkesa ime headers përfshijnë PHPSESSID barabartë kjo, nuk set-cookie, por vetëm cookie. Dhe kjo është paraqitja shfletuesin tim s vulën e dorës sime. Pra, tani si një ngacmues, dhe ne do të flasim më shumë në lidhje me këtë në një javë apo më shumë, por në çfarë mënyre ju bën kjo të pambrojtur, Facebook llogarisë suaj pambrojtur, dhe të tjera të tilla Llogaritë e të dobëta? Audienca: Nëse dikush ka cookie tuaj. DAVID Malan: Po, në qoftë se dikush ka cookie tuaj. Unë do të thotë me të vërtetë, më shumë si disa prej jush mund të keni provuar si në një klub ose një amusement park, në qoftë se ju provoni diçka si kjo për të kopjuar vulën, megjithëse prapa onto ana e një personi tjetër, dhe pastaj ai ose ajo paraqet atë si tyre, në qoftë se ai në fakt duket identike, 123456789, atëherë web server është me sa duket vetëm do të Besoj se që përdoruesi është që ju. Dhe kjo është me të vërtetë një fundamental Kërcënimi çdo kohë që ju të përdorin cookies sepse në qoftë se dikush vetëm Spoofs në mënyrë që të flasin, tuaj të cookie shifrat se çfarë është ajo është, me të vërtetë ose duke kopjuar atë duke shikuar në kompjuterin tuaj dhe duke qenë si, OK. Cookit e Davidit është JJ3JIK dhe kështu me radhë, dhe pastaj ata janë të zgjuar të mjaftueshme për të dini si për të zgjidhur me dorë të dërguar që cookit nga një shfletues ose nga nje Programi ata shkruajnë, ata mund të krejtësisht të hyni në një faqe interneti si ju. Kjo nuk është e vështirë të pretendojë të jetë dikush tjetër nëse ne rishqyrtojnë p-set dy, i cili prezantoi çfarë? Audienca: Kriptografia. DAVID Malan: Pak bit e kriptografisë. Kriptografia thjeshte, te pakten ne Standard Edition, por kripto megjithatë. më pak. Pra, ajo rezulton në qoftë se ju encrypt të gjithë këto headers duke përdorur diçka që ju tani mund të dini më shumë ceremoni si SSL, Secure Socket Layer, ose URL https:/, atëherë të gjitha këto gjëra ne kemi qenë glancing në të vërtetë janë të koduara, që do të thotë se ajo është si ju nuk mund të lexojnë vulën e dorës. Vetëm facebook.com mund, ose google.com, apo në këtë rast, pajisja mund të lexoni atë vulën e dorës. Tragjikisht pse, dhe përsëri, kjo është të gjitha shumë të përshtatshme me sende NSA i vonë, edhe SSL është thyeshëm. Dhe kjo nuk është e vërtetë se e vështirë për të edhe plas se encryption. Jo aq shumë nga plasaritje encryption, por nga tricking shfletues në decrypting të dhënat e para kohe. Por përsëri, ne do t'ju bezdis me atë para se të gjatë. Tani për tani, vetëm të jetë i frikësuar. Është tragjikisht lloj i vërtetë. Dakord. Pra, ku e bën këtë tani na lënë? E pra, le ta bëjmë këtë. Le të shkojnë përpara dhe për të marrë një të shpejtë teaser para se të marrë një pushim. Dhe unë mendoj se ne do të zgjatem pak më të gjatë sot, por ne do të zhyten në diçka krejt të re dhe sexy, e cila do të ngjall oreksin tuaj për edhe më shumë. Pra, kjo është ngacmues. Pra SQL, kemi filluar duke folur për ndonjëherë në mënyrë pak kohë për herë të fundit. Ju do të vërtetë të marrë në duart tuaja të pista me një pjesë e saj në p-vendosur shtatë. Dhe në kushtet e laik, çfarë bën SQL - S-Q-L - bëj për ju? Çfarë është ajo? Po. Audienca: Le të dhënave që ju të aksesit. DAVID Malan: Po. Ajo le të të dhënave juve akses në një bazë të dhënash. Strukturuar Query Language. Dhe kjo është në thelb një gjuhë programimi. Ka karakteristika të saj që ne nuk do të përdorë edhe në klasë. Por ju mund të në mënyrë efektive përcaktojnë funksionet. Ata janë quajtur të ruajtura procedurat në SQL. Por ne do të vazhdojmë atë mjaft e thjeshtë dhe vetëm përdorin atë për disa operacione themelore si zgjedhjen e të dhënave, futjen e të dhënave, përditësimin e të dhënave, dhe fshirjen e të dhënave. Dhe ju mund të vërtetë të mendojnë për një bazë të dhënash, si një bazë të dhënash SQL, si vetëm duke qenë Microsoft Excel. Sepse SQL referohet një relacionale bazës së të dhënave, ku lidhje thjesht do të thotë tavolina. Rreshta dhe kolona. Pra, çdo gjë që ju mund të vënë në një spreadsheet si kjo ose Google Docs, ju mund të vënë në një bazë të dhënash SQL duke deklaruar një tryezë. Tani, si mendoni ju në të vërtetë të hyrë se informacioni? E pra, me komandat apo pyetje si kjo. SELECT, INSERT, UPDATE dhe DELETE. Dhe për pjesën më të madhe, ato janë vetëm katër përbërësit që ju do të duhet të bëjë diçka mjaft të fuqishëm në problem të caktuar shtatë. Tani mbrapa në ditë, ju do të vërtetë ndërveprojnë me një bazë të dhënash në një dritare e zezë dhe e bardhë në terminal një të shpejtë keq si ky. Dhe baza e të dhënave që ne jemi në drejtimin e Pajisja quhet MySQL, e cila është lirë dhe të hapur motor bazës së të dhënave burim. Nëse ju të Google dhe lexuar Wikipedia artikull, ju do të dini se emri është pak e tranzicionit për disa versionet e Linux. Maria bazës së të dhënave është në fakt një pirun mënyrë që të flasin për MySQL. Të gjatë histori e shkurtër, Oracle bleu MySQL. Oracle është një kompani e madhe. Njerëzit janë të shqetësuar se kjo do të mbetet më shumë si burim të hapur, kështu që kjo është vetëm një kopje e MySQL që është ende i lirë, ende burim të hapur, dhe instaluar në Fedora Linux nga default. Por kjo është lloj i një dhimbje në qafë për t'u njohur me një Baza e të dhënave në këtë mënyrë. Pra, ne të përfshijë në pajisje CS50 një mjet i lirë me kod të hapur të quajtur phpMyAdmin. Vetëm një rastësi që është e shkruar në PHP. Nuk ka asnjë themelore nevojë për PHP këtu. Por kjo është vetëm një mjet web-based që ne shkarkohet falas, të instaluar në aplikim, që na lejon të kemi një ndërfaqes grafike të përdoruesit me të cilat për të shqyrtuar p-vendosur shtatë bazën e të dhënave të me të cilat për të krijuar bazat e të dhënave të reja, thonë se për vetë projektin tuaj përfundimtar nëse do të si, dhe në fund të fundit të krijojnë faqet e internetit dinamike si CS50 Financave që ju lejon të query të dhënat dhe përditësimin e të dhënave dinamike. Ju nuk jeni do të duhet të përdorin vetëm një fotografi të thjeshtë teksti ose CSV. Ju në fakt mund të përdorni një bazë të dhënash zgjuar program në mënyrë që ju mund të ekzekutojë shumë pyetje të sofistikuar sesa thjesht leximi me çdo gjë linear. Kështu për shembull, kjo është ajo që ne japim ju nga kutia për p-vendosur shtatë. Kjo është një tabelë me sa duket të paktën tre kolona, ​​njëra prej të cilave është përdoruesit, një nga të cilat është e hash, dhe tjetri i cili është ID. Por gjëja interesante, dhe vetëm për të vë në lojë nga një mendim këtu, emri i përdoruesit është me sa duket tashmë unike, e drejtë? Unë do të thotë, më çdo website, nëse ju keni një emër përdoruesi, ka nuk mund të jetë dy Caesars. Nuk mund të ketë dy MALANS. Nuk mund të ketë dy jharvards. E saj unik. Përndryshe, ata nuk e dinë se cilat jharvard ajo në fakt është. Pra, çfarë mund të jetë motivim për të të paturit e një kolonë e tretë në të majtë ka quajtur ID, e cila duket si një Numri kjo është në mënyrë të ngjashme unik? Ajo ndjen një të tepërta të vogël për mua në shikim të parë. Pse mund të jetë bindës për të pasur jo vetëm të përdoruesve të veçantë, por edhe numrat unik? Audienca: Ata mund të kenë të njëjtën gjë fjalëkalimin. DAVID Malan: Njerëzit mund të ketë të njëjtën fjalëkalimin, i sigurt. Kjo mund të ndodhë absolutisht. Por në qoftë se ata e kanë këtë emër përdoruesi të veçantë, unë do të argumentojnë se kjo nuk ka të vërtetë çështje, sepse në qoftë se ata shkruani në e tyre emrin, unë vetëm duhet të kontrolloni e tyre regjistrohu, hash e tyre të saj. Pse tjetër? Audienca: Faster kërkim. DAVID Malan: Faster kërkim. Pse? Audienca: ID është vetëm një. DAVID Malan: ID është vetëm një karakter, ose për të qenë më të saktë, kjo është një numër, kështu që është ndoshta 32 bit ose diçka të tillë. Ndërsa emri i përdoruesit, me sa duket Jason Deri Hirschhorn-së ka një lloj qesharake të gjatë, dhe ajo do të marrë më shumë më shumë kohë për të string krahasohen H-I-R-S-C-H-H-O-R-N, dhe mbase A / 0 ose diçka të tillë, në mënyrë që për të parë deri Jasonin, krahasuar me vetëm duke thënë se më jep përdoruesit numrin dy. Kjo është 32 bit. Kjo është një INT vetme që ju keni për të krahasuar. Dhe vërtet, kjo është pikërisht arsyeja pse bazat e të dhënave kanë tendencë të caktojë ID unike që rreshtave në to. Tani çfarë lloje të tjera të të dhënave janë atje përveç INT dhe me sa duket vargjet si kjo? E pra, që të jenë më të duhur, Bazat e të dhënave SQL, si MySQL, kanë fushat char. Dhe Char pak, mashtrues nuk është një CHAR vetme. Një fushë CHAR në një bazë të dhënash MySQL është një ose më shumë karaktere, por kjo është një numër të caktuar të karaktereve. Kështu për shembull, nëse unë shkoj për të phpMyAdmin si ju mund të keni tashmë, ose së shpejti do një problem vendosur shtatë, dhe të shkoj në bazën e të dhënave e mia, dhe vetëm për argëtim, le të krijojë një tabelë të re të quajtur të testuar me vetëm dy kolona. Unë atëherë do të klikoni Go. Dhe kjo do të bëhet në mënyrë të drejtë të njohur, sidomos si ju kallajxhi rreth në tuaj. Këtu unë mund të shkruani ID për të krijuar një tabelë të re të tipit INT. Por këtu unë mund të shkruani emrin e përdoruesit për të rikrijojë atë tryezë më parë. Dhe vini re unë kam një bandë e tërë të llojeve të zgjedhur. Dhe kjo edhe është arsyeja pse phpMyAdmin është lloj i bukur. Kjo është lloj i vetë-mësimit në atë ju mund vetëm lloj pikë dhe klikoni, dhe shikoni në menu dropdown, dhe konkludoj nga se ajo që fuqitë SQL ju jep. Dhe me të vërtetë, në qoftë se unë zgjedh CHAR, unë atëherë duhet të specifikojë kohëzgjatjen, ose si shumë vlera, se sa shumë karaktere. Vlerat Pra, shumë të zakonshme janë gjëra të tilla si 255, por kjo është pak më e gjatë. Zakonisht është tetë për një emër përdorues. Por kjo është pak e vogël këto ditë. Pra, ky është një vendim i projektit. A është e 8 karaktere max, 32, 255, 1000? Është me të vërtetë deri te ju. Por një fushë CHAR është një numër fiks. Pra, zgjidhni shumë pak dhe ju jeni lloj i dehur në qoftë se ju doni një emër përdoruesi më të gjatë. Zgjidhni shumë dhe çfarë është dobësitë? Audienca: [padëgjueshme]. DAVID Malan: Kjo është kota. Ashtu si në C, nëse ju keni një të madhe copë e kujtesës se sa ju duhet, ju jeni vetëm humbur kohë dhe të humbur hapësirë. Pra, si një alternativë, ekziston VARCHAR, e cila zgjidh këtë problem duke trajtimin gjatësi jo si një gjatësi të caktuar, por si një gjatësi maksimale, dhe duke përdorur një Numri ndryshueshme të chars, e cila më pas ka tendencë për të përdorur vetëm si shumë karaktere si ju në të vërtetë nevojë. Kjo tingëllon e përsosur. Pse nuk të shpëtoj të Dhënat Char shkruani pastaj? Çfarë mund të jetë i dobësitë duke përdorur VARCHARs, që tingëllon si ajo është një fitore e bukur? Po? Audienca: [padëgjueshme]. DAVID Malan: OK, i mirë. Pra, nëse të gjitha të dhënat tuaja është e njëjtë gjatësia, çfarë është shqetësimi? Audienca: Për shkak se ju jeni të humbur dhënat sipas thënë ata të gjithë. DAVID Malan: Pra, nëse të gjitha të dhënat tuaja është e të njëjtën gjatësi, edhe pse, unë do të argumentoja që duke specifikuar një gjatësi maksimale më VARCHAR nuk është e ndryshme nga duke specifikuar një gjatësi të caktuar në CHAR nëse ju e dini se numri paraprakisht. Por nuk është me të vërtetë, dhe unë do lloj ekstrakt nga ajo përgjigje realitetin se ka ende një max, e cila mund të të jetë i bezdisshëm, sidomos në qoftë se ju ndeshen me emrin e një personi që është jashtëzakonisht të gjatë që ju nuk e keni parashikojnë. Dhe kjo është edhe një pak më pak të efektshme që në fakt kërkoni në VARCHARs si krahasim me karaktere në kërkim, veçanërisht për tavolina të gjata që kanë shumë dhe shumë të dhëna. Pra edhe këtu, tematike është përsëri ka zgjedhje e qartë. Pra, vetëm për të ju jap një ndjenjë të tjera lloje të të dhënave që mund të jetë me interes qoftë për p-vendosur shtatë ose në e ardhmja, ka INT. Ka BIGINT, e cila është si kohë e gjatë. Ajo ka tendencë të jetë 64 bit. Ka dhjetore, të cilat ju do të shihni në set problem, e cila është një shumë përgjigje të pastër për problemet që hasur me noton dhe lundrues pikë pasaktësi. Dhe pastaj nuk ka datetime. Ka fjalë për fjalë një lloj të dhënave që ka të duket si një vit, një muaj, një ditë, dhe një orë, minutë, dhe të dytë. Por bazat e të dhënave SQL gjithashtu kanë gjërat që ne do të thërrasë indekseve. Dhe një indeks është diçka që ju specifikoni kur të krijuar tryezë të të bëjë kërkime dhe operacione të tjera më efikase. Në mënyrë të veçantë, ka diçka të quajtur Indeksi PRIMARY që ju mund të deklaroj si më poshtë. Ne e bëmë këtë për ju me Përdoruesit Tabela ne ju japim. Por vini re në qoftë se unë ishin me dorë rikrijimin Përdoruesit tryezë këtu duke i dhënë atë një emër të përdoruesit. Unë tashmë e specifikuar ID. I specifikuar INT. Unë specifikuar emrin e përdoruesit me maksimumi 32 karaktere. Por nëse do të vazhdojmë scrolling në këtë mënyrë të drejtë dritare të gjerë, njoftimi ka një bandë e gjëra të tjera unë mund të specifikojë. Një, unë mund të specifikoni atribute si, ju e dini çfarë, kjo INT duhet të jetë i panënshkruar. Unë nuk dua numrat negative, kështu që le të bëjnë të panënshkruar. Null nuk është i rëndësishëm këtu, sepse Unë dua çdo përdorues të kanë një numër unik. Unë nuk dua që ajo të jetë null. Por kjo është interesante. Unë mund të specifikoni se ID është ose kyç primar i kësaj baze të dhënash, ose është e unike, ose është e indeksuar, ose teksti i plotë. Pra, për qëllime të sotme, histori e gjatë shkurtër, PRIMARY do të thotë se kjo do të të jetë edhe konceptualisht dhe teknikisht fusha që ne përdorim për të unike të identifikuar përdoruesit. Pra, kur ne të kërkoni përdoruesit, kjo është lloj i një premtimi për të kërkuar ato kryesisht nga që identifikues unik. Dhe baza e të dhënave do të sigurojë se në qoftë se ju kanë një numër të përdoruesit 3, ju nuk mund të fizikisht të futur një tjetër përdorues me atë numër të njëjtë 3. Baza e të dhënave vetëm do të refuzojë për të ruajtur ndryshimet tuaja. E cila është një gjë e mirë, sepse ju mund të të mbrojtur veten nga ju vetë. vete Nga ana tjetër, për emër përdorues. Pra, në radhën e dytë, risjell, është fusha emrin. Pra, në radhën e dytë këtu është emri i përdoruesit, siç kemi bërë më e majtë atje. Pra, çfarë tjetër mund të dua të specifikojë? Unë nuk jam i lejuar, sipas SQL, për të specifikuar dy çelësat primar. ju mund të specifikoni një çelës të përbashkët ku ju shikoni në të dy fushat, por ata nuk mund të individualisht të jetë çelësat primar. Pra, kjo është jashtë diskutimit. Kështu që mund të dua të zgjedhur? E pra, UNIK është e ngjashme në frymë të një kyç primar ku ju specifikoni kjo fushë do të jetë unike, por është e nuk do të jetë një Unë e përdorin gjatë gjithë kohës. Dhe ne nuk jemi duke shkuar për të përdorur këtë një të tillë të gjithë koha për çfarë arsye përsëri? Kjo është më e ngadaltë potencialisht nëse kjo është një emër përdoruesi të gjatë. Është vetëm një humbje kohe. INDEKSI, ndërkohë, specifikon se është e nuk do të jetë unike, por unë do të doja ju për të punuar magjinë tuaj nën individualitet për ta bërë atë më të shpejtë për mua për të kërkoni në këtë fushë. Pra, kjo ndoshta nuk është e rëndësishme këtu. Për emrin e përdoruesit, unë do të argumentojnë se UNIK është një përgjigje e mirë. Por mendoj se kemi bërë përdoruesit më shumë interesante se vetëm përdoruesve, hashes, dhe numrat e ID. Po në qoftë se ne i dha popullit emrat e plotë? Po në qoftë se ne u dha atyre adresat dhe të dhëna të tjera rreth tyre? E pra, në qoftë se ju specifikoni se një kolonë në një bazës së të dhënave është indeksuar, kjo do të thotë se MySQL, Oracle ose, ose çfarëdo bazës së të dhënave ju jeni duke përdorur, duhet të punojnë magjinë e saj dhe të përdorin disa lloj të të dhënave dashuroj struktura si një druri, ose një Trie, ose një tabelë hash, apo diçka për të garantuar se kur ju kërkoni për të dhëna duke përdorur zgjidhni në këtë fushë të veçantë - si më tregoni të gjithëve se jeton në Oxford Street. Një pyetje si kjo. Nëse ju keni specifikuar paraprakisht se ju doni një tregues tek atë fushë, kërkimet do të jetë shumë, shumë më të shpejtë. Nëse ju nuk e specifikoni një indeks, më e mirë ju mund të bëni është një kërkim linear nëse kjo nuk është e renditura. Por nëse ju specifikoni INDEKSI, i zgjuar njerëzit që kanë bërë bazën e të dhënave - njerëzit si ju që tani dinë pemë dhe mundohet dhe tavolina hash - automatikisht do të ndërtojë një të dhënave të tillë Struktura në RAM për të siguruar që ato kërkimet janë shumë më të shpejtë. FULLTEXT ndërkohë është e ngjashme në frymë, por ju lejon të bëni wildcard kërkimet, si më tregoni të gjithëve se jeton në rrugë që fillojnë me letër O për çfarëdo arsye. Ju mund të bëni kërkime wildcard si kjo. Ose, gjëra shumë të forta si shfaqje me të gjithë ata që ka fjalën - më tregoni të gjithë emri i të cilit fillon me një letër të veçantë. Ju mund të kërkoni për fjalë kyçe në këtë mënyrë. Dakord. Pra, mundësitë e projektimit ka potencialisht. Ka edhe të tjerë që unë do të valë duart e mia në. Ajo rezulton se ju mund të keni motorë të ndryshme magazinimit. Dhe kjo është më e errët se sa ne kemi nevojë sigurisht për problemin e ngritur shtatë. By default, ju djema jeni duke përdorur diçka që quhet InnoDB. Ju do të shihni përmend tillë diku në Ndërfaqja e phpMyAdmin 's më i mundshëm. Por e di se ka dizajn të tjera vendimet që janë të potencialit Interesi vijnë projektet përfundimtare nëse ju bëni diçka të web-bazuar. Por le ta bëjmë këtë. Le të shkojnë përpara dhe të vënë këtë në ekran si një ngacmues për një histori që përfshin ju, një shokun, dhe një gotë qumësht. Le të bëjmë një minutë dy apo më shumë pushim këtu. Dhe në qoftë se ju mund të rrinë përreth, le të vijë mbrapa, shikoni pak më shumë në SQL, dhe pastaj pak e JavaScript me p-vendosur tetë në mendje. Dakord. Pra, le të merrni ju të menduarit për një rast qoshe që shumë lehtë mund të lindin në kontekstin e duke përdorur një bazë të dhënash, ose sinqerisht, madje edhe duke përdorur gjëra të botës reale si ATM për të marrë paratë. Kështu që këtu është një frigorifer. Supozoni se ju keni marrë një shumë në fjetore tuaj ose shtëpinë tuaj. Dhe ju keni marrë një shokun, dhe të dy ju të vërtetë si qumësht për shembull. Kështu që ju vijnë në shtëpi nga klasa një ditë. Ai ose ajo nuk është ende prapa. Ju hapur frigoriferin. Ju me të vërtetë duan një gotë të madhe me qumësht. Nuk ka qumësht. Pra, çfarë do të bëni? Ju mbyllni frigorifer. Ju kap çelësat tuaj. Ju dalë në shesh. Dhe ju të merrni në përputhje në CVS në ato gjërat checkout vetë, e cila gjithmonë marrë më shumë se në të vërtetë që ka Cashiers. Gjithsesi. Kështu pra, ndërkohë, dot dot dot, tuaj shokun vjen në shtëpi dhe ai ose ajo në mënyrë të ngjashme ka një etje për disa qumësht. Kështu që ai ose ajo e hap frigoriferin, duket brenda, dhe oh, mallkuar. Nuk ka qumësht. Kështu që ai ose ajo drejton jashtë, ndodh për të shkuar në CVS tjetër, e cila ishte vetëm një bllokuar larg për disa arsye, dhe ai ose ajo merr në rradhë për të blerë qumësht. Ndërkohë, ju vijnë në shtëpi, ai apo ajo vjen në shtëpi, dhe çfarë të bëjmë në fund të fundit ju keni? Dy herë më shumë qumësht. Por ju nuk vërtetë si qumësht se shumë. Deri tani ju keni qumësht aq shumë sa që tani një prej tyre është vetëm do të shkuar kosi përfundimisht. Pra, ky është një problem me të vërtetë keq. E drejtë? Pra, çfarë ka ndodhur? Pra, në thelb, kjo është lloj e një shembull qesharak. Por nën kapuç, ajo që ne kemi pasur ndodhë këtu është dy prej jush kontrolluar gjendja e disa pjesë të kujtesës, frigorifer. Të dy ju kontrolluar shtetin prej rreth ndryshueshme. Ju të dy tërhoqi një përfundim që ju pastaj të vepruar në. Por për fat të keq, ndërsa shokun tuaj ishte në dyqan, shteti i se ndryshueshme ndryshuar, ai ose ajo u kthye dhe tani dëshiron të ndryshojë gjendjen, por ajo tashmë i është ndryshuar për atë apo të saj. Dhe sigurisht, ai ose ajo nuk do të kishte shkuar në dyqan, nëse ata e dinin se keni qenë tashmë në rrugë. Pra, në botën e vërtetë, si mund të ju shmangur këtë problem, duke supozuar që ju keni një frigorifer, ju keni një shokun, dhe në të vërtetë ju pëlqen qumësht? Audienca: Komunikimi. DAVID Malan: Komunikimi. OK. Por si mund të komunikoni? Audienca: Lini një shënim. DAVID Malan: Lini një shënim, e drejtë? Gjithmonë të lënë një shënim, për tifozët e tregojnë. Në rregull, kështu që gjithmonë të lënë një shënim, ose vënë me të vërtetë si një dry apo diçka në frigorifer që mban tuaj shokun nga inspektuar gjendjen e që ndryshueshme. Tani, pse kjo mund të jetë i përshtatshëm për Problemi vendosur shtatë, ose për të ATM-ve. E pra, imagjinoni një botë në një ATM, ku ju mund të jetë në gjendje të shkojnë deri në një ATM makine këtu, dhe një tjetër ATM këtu. Dhe kjo ndodh mjaft shpesh. Dhe mendoj që ju kishte dy karta ATM, e cila është e mundur për të marrë. Dhe ju hyni në të dy makina në mënyrë efektive në të njëjtën kohë, me shpresë ndërsa askush nuk është në kërkim. Dhe pastaj ju shkruani PIN tuaj afërsisht në të njëjtën kohë. Dhe pastaj ju bëni një pyetje të bilancit për të parë se sa të holla keni. Dhe le të thonë se ju keni $ 100 mbetur në llogarinë tuaj. Pra, në thelb të njëjtën kohë, ju thonë se një, zero, zero, të hyjë. Dhe ju shpresojmë të kthehet disa para. Por sa para mund të merrni mbrapa? Tani kompjutera në fund të ditës, veçanërisht në qoftë se ata janë duke folur për të servers, nuk është e detyruar të bëjë gjëra në mënyrë që është pritur. Pra, mendoj se çfarë ndodh, për shkak të pavarësisht rrjetit çështje shpejtësi atje janë, ose çështje CPU ka, ose diçka të tillë, mendoj se ATM pari kontrollon ekuilibrin tuaj dhe sheh, oh, ky person ka 100 $. Por pastaj merr hutuar sepse ndoshta një backup po ndodh dhe kështu që është e ngadalësuar. Apo ndoshta duke kontrolluar, rrjetin Lidhja mori një pak më ngadalë, sepse kjo ndodh vetëm. Ata janë pajisje fizike. Pra ndërkohë, ATM dytë është duke i kërkuar të njëjtën pyetje. Sa të holla i keni Davidi? $ 100 është përgjigje. Por për shkak ATM e parë nuk ka ende dërguar mesazh zbres $ 100, të dy ATM kanë inspektuar kasaforta e bankës, duke parë nuk ka 100 $ atje, dhe tani dy makina janë potencialisht do të nxjerr nga goja një përgjigje. Tani, kjo është e madhe për ju në një kuptim në qoftë se ajo që banka bën në fund të fundit është të ndryshojë shumën që minus 100 nga vendosjen e ndryshueshme e barabartë me tuaj Banka llogari barabartë me 0, në krahasim për të bërë minus 100. Tani në rastin më të keq për bankën - ose në të mirë për bankën, ndërkohë, ata të ju jap $ 200, dhe llogarinë tuaj bankare tani tregon negative $ 100, e cila vërtetë nuk ka të përfitojnë ju në të gjitha. Por çështja është se kjo garë kusht për dy roommates duke u qumësht, ose për dy ATM-ve duke u përpjekur për të marrë para në dorë dhe për të ndryshuar gjendjen e një kasafortë në të njëjtën kohë ekziston ndonjë herë ju keni një bazë të dhënash. Tani në problem të caktuar shtatë, kjo çështje lind në kuptimin se në qoftë se ju blej një Pjesa e aksioneve Facebook, dhe pastaj për shkallës ju blini një pjesë të dytë të Aksioneve Facebook, ju duhet të bëni një vendim si programues. Në mënyrë që të vendosë se si për të rinovuar bazës së të dhënave, shanset janë që ju jeni do të kanë një rresht për atë magazinë, dhe kjo është një mënyrë për ta zbatuar atë. Dhe ju jeni do të ketë një pjesë të FB, e cila është simbol i tyre aksioneve Tiker për këtë emër, apo ky përdorues ID, identifikues unik. Por e njëjta histori mund të ndodhë këtu. Nëse ju bëni një zgjidhni në SQL, si ju do të shihni në problemin vendosur shtatë kur të shihni, oh, David ka një pjesë e aksioneve të Facebook. Më lejoni tani të ndryshojë kjo të jetë dy aksione, për shkak se ai dëshiron të blejë një Pjesa e dytë. Por mendoj David fakt kishte dy dritaret e shfletuesit të hapur, ose të supozojmë se kjo është një llogari të përbashkët me të dy bashkëshortëve, dhe dy prej tyre janë duke u përpjekur për të kryer operacion njëjtë, atje, gjithashtu, ekziston potenciali për një vendim për të qenë bëhet në bazë të mëparshme Gjendja e botës - Llogaria ka një pjesë - dhe të dy njerëz, ose të dy servers, tani përpiqen për të thënë rritje atë në dy aksione. Por në këtë rast, ju mund të keni akuzuar me të holla për të dy aksionet, por incremented vetëm se një herë. Pra me pak fjalë, problemi themelor këtu, si me shaka rreth duke lënë një vini re, ose të vënë një dry në të, është e në qoftë se dy njerëz, ose dy temat - mendoj përsëri në para - mund të inspektojnë gjendjen e disa ndryshore dhe pastaj të përpiqet për të ndryshuar atë variabël, por këto dy gjëra nuk ndodhin në të njëjtën kohë, por mund të merrni ndërprerë me gjëra të tjera që ndodhin, të dhënat mund të marrë në një gjendje shumë të pazakontë. Dhe ju mund të përfitojnë ose ju mund të vuajnë në kuptimin e shembullit të parave. Pra, në problemin vendosur shtatë, ju japim kjo linjë një kod, i cili gjatë histori e shkurtër, zgjidh kjo Problemi në MySQL. Ky udhëzim shumë të gjatë që nuk ka edhe përshtaten mbi një linjë të ekran këtu siguron se operacioni juaj është ajo që quhet atomike. E gjitha ndodh në një herë, ose kjo nuk ndodh në të gjitha. Kjo frazë shumë të gjatë nuk mund të merrni ndërprerë pjesërisht. Dhe atë që nuk është fjalë për fjalë çfarë thotë ai. Futur në një tryezë në vijim tri fusha këto vlera të veçanta, por mbi kopjuar çelës, nuk e bëjmë një insert. Të bëjë një update. Pra, kjo është si duke bërë një SELECT dhe një INSERT mënyrë që të flasin në të njëjtën kohë. Dhe çfarë është çelësi që ndoshta duke u referuar këtu? Kjo rezulton, dhe ju do të shihni këtë në Problemi vendosur spekulim shtatë-së, për shkak se ne kemi deklaruar që të ketë një çelës unik në këtë tabelë të veçantë të tillë që ju nuk mund të ketë rreshtave të shumta për të njëjtin përdorues me njëjtë qindarkë aksioneve simbol - në këtë shembull këtu, DVN.V është një gjendje pa kuptim qindarkë që ne referohen në spekulim. Sepse ne kemi deklaruar që ajo të jetë unike, çfarë kjo do të thotë është se në qoftë se ju të përpiqemi për të futur një rresht kopjuar, ju jeni në vend të kësaj do të update it pa dikush tjetër që ka mundësia të gjendja e botës ose. Pra me pak fjalë, kjo siguron gjërat janë atomike. Më në përgjithësi edhe pse, bazat e të dhënave si MySQL - dhe ju nuk keni nevojë për këtë funksion p-vendosur shtatë, por mbani në mend për të ardhmen - të mbështetur atë që janë quajtur transaksionet, ku ju mund të them START transaksion fjalë për fjalë. Ju pastaj mund të ekzekutojë dy deklarata SQL. Dhe një deklaratë SQL, si ju do të shihni në p-vendosur shtatë, duket pak diçka e tillë. Update quajtur një llogari tryezë. Set kolonën e bilancit të barabartë me çdo gjë kolona bilanci aktualisht është minus 1.000 ku numri, numri i llogarisë, si ID e përdoruesit, është e barabartë me 2, dhe pastaj të rinovuar Llogaria dot dot dot. Pra, në kushtet e laik, çfarë bëjnë këto dy pyetje duket të jetë bërë në ndjenjë të vërtetë bota e bankare? Audienca: Transferimi në kursime. DAVID Malan: Pikërisht. Transferimin e fondeve nga një llogari të tjera. Dhe ky është një shembull tjetër ku ju me të vërtetë duan këto dy gjëra të ndodhin ose jo të ndodhë. Ju nuk doni diçka për të marrë në mes të tyre dhe potencialisht mess up matematikë, ose bela deri sa para që ju keni, ose sa Paratë banka ka. Pra, çfarë është me të vërtetë e bukur për transaksionet në MySQL është se, dhe Bazat e të dhënave më përgjithësisht, është se ato dhe njerëz të zgjuar që kam zbatuar këto karakteristika të kuptoj se si për të bërë i sigurt se të dy nga ato gjëra të ndodhë ose jo në të gjitha. Dhe në qoftë se ju jeni me të vërtetë aspirojnë për të bërë një faqe interneti që është përdorur nga njerëzit në kampus, njerëzit në botën reale, duke bërë diçka në kuptimin e nisjes, këto janë llojet e vendime të projektimit që të bëhet ndonjëherë aq e rëndësishme. Përndryshe, ju filloni të humbni të dhënat, të humbur përdoruesit, ose në rastin më të keq si ne kemi parë këtu, potencialisht humbasin para. Pra, përsëri, më shumë se në problemin vendosur shtatë, si dhe mbase per disa ju në projekte finale. Pra, le të ndryshojë atë foto që kishim një moment më parë vetëm në një mënyrë më shumë. Pra më lejoni të vërtetë të shohim nëse mund të - nope, që është zhdukur. Nuk është. Pra, kjo është ajo ku ne e kemi lënë për herë të fundit. Dhe kjo rezulton ne do të hedh një gjë më shumë në përzierje këtu - një gjuhë e quajtur JavaScript. Pra JavaScript në fakt i përshtatet në këtë pjesë - dhe nuk e kam mjaft të lënë hapësirë ​​të mjaftueshme, kështu që kjo nuk është tashmë në shkallë. OK, kjo është me të vërtetë patetike. OK, kështu që kjo është JavaScript. Dakord. Unë jam me të vërtetë duke e bërë atë një dëmtim. Dakord. Pra JavaScript është një tjetër programimi gjuhës, dhe e fundit tonë, qoftë se ndihmon të siguruar se nuk ka shumë më tepër nga hidranti zjarri këtu. Pra JavaScript është gjithashtu një interpretohet gjuhës, që do të thotë që ju nuk e bëni përpilojnë atë në zero dhe ato. Ju vetëm të drejtuar atë. Por ajo që është krejtësisht e ndryshme me JavaScript zakonisht është se ju nuk e drejtuar atë në web serverin tuaj. Ajo nuk merr kandidojë në aplikim në vetvete. Më saktë, ajo merr shkarkuar nga një përdorues nëpërmjet HTTP në shfletuesin e tyre - Chrome, Safari, Internet Explorer, Firefox, çfarëdo - dhe kjo është shfletuesi që ekzekuton këtë veçanti gjuhë programimi. Pra, të jetë i qartë, PHP deri tani ka qenë ekzekutuar ose në rreshtin e komandave në dritare tonë të zezë dhe të bardhë, në një server si aparatit, një kompjuter pëlqen pajisjen, ose ajo është ekzekutuar nga një web server kandidon për një kompjuter. Por tema këtu është se PHP deri tani është ekzekutuar server-krah, kështu që përdoruesit dhe shfletuesi i përdoruesit kurrë nuk e sheh një linjë të kodit PHP. Në fakt, në qoftë se ju ndonjëherë të hapur një shfletues për faqen tuaj te internetit ose në një tjetër dhe ju në të vërtetë të shihni kodin PHP në dritaren tuaj, dikush ka dehur. Për shkak se ajo nuk është për qëllim të jetë dërguar në një shfletues direkt. Ajo është menduar për të ekzekutuar dhe të kthyer në diçka si HTML. Por JavaScript është në thelb e kundërta. Është menduar që të drejtohen në mënyrë tipike brenda i shfletuesit dritare të përdoruesit. Dhe çfarë lloje të faqet e internetit të përdorni JavaScript atëherë këto ditë? Ashtu si fjalë për fjalë çdo faqen e internetit popullor. Çdo website se ju djema ndoshta përdorin çdo ditë përdorin JavaScript për thjeshtë dhe madje Karakteristika sexiest. Pra, diçka si Facebook Chat qoftë se ju përdorni atë. Si bën që në të vërtetë punojnë? E pra deri më tani, të gjitha stuff ne kemi bërë me HTML dhe PHP supozon se ju tërheqë një URL, dhe ti hit Enter, dhe ju të shihni disa përmbajtje në HTML. Dhe ju klikoni lidhjen, që ndryshon URL, ndryshon faqe, dhe reloads disa përmbajtje të re. Klikoni një tjetër URL ose të dorëzojnë një formular, ju merrni whisked në një faqe dhe ju të shihni disa përmbajtje të re. Por duke përdorur diçka si Facebook Chat, ose Gchat, ose Google Maps, rrallë jep i gjithë faqja rifreskoni të tilla që ju shihni një ekran të bardhë dhe një çast pastaj përmbajtje të re. Përkundrazi, faqet e internetit sot janë dinamike duke u përditësuar përsëri dhe përsëri dhe përsëri të gjitha lloj e prapa skenave. Dhe kjo rezulton se kur ju shkoni për të diçka si Facebook, apo Gchat, apo Gmail, dhe më të reja faqe automatikisht pa ringarkuar gjithë ekranin, ajo që ka ndodhur është se shfletuesi juaj ka bërë lloj të fshehtë shtesë HTTP kërkesa - jo për faqet e internetit të tërë, por vetëm për chunks vogla e të dhënave, si mesazhe casti se shoku juaj vetëm ju, ose update statusin dërguar që dikush vetëm ju, ose cicëroj dërguar që dikush vetëm të dërguar. Është vetëm duke bërë kërkesa të vogla për të dhënave, dhe pastaj duke përdorur JavaScript, ky gjuhë programimi, për të ndryshuar çfarë web faqja e duket si pa server ndihmuar, pa server gjenerimin se HTML. Pra me pak fjalë, JavaScript mund të përdoret pastaj për të shkoj të marr jo vetëm të dhëna të reja nga server pa ringarkuar një të tërë faqe apo paraqitur një formë. Ajo mund të përdoret gjithashtu për të ndryshimit ashtu-quajtur DOM - Dokumenti objekt modeli - e cila është vetëm mënyrë e sofistikuar për duke thënë se pema e HTML që kemi parë për herë të fundit. Pra, për të siguruar, JavaScript është syntactically në mënyrë të ngjashme me C si. Nuk ka funksion kryesor. Ju vetëm të filloni të shkruani kodin dhe ajo do të ekzekutohet, ose interpretohet më shumë si duhet. Kushtet do të duket si ky. E ndryshme nga C, ose PHP për këtë çështje. Shprehjet Boolean ose-ed bashku do të duket si ky. Anded së bashku të duket si ky. Switches do të duket si ky. Për sythe do të duket si ky. Ndërsa sythe do të duket si ky. A ndërsa sythe do të duket si ky. Kjo është e re. Pra, JavaScript nuk ka një foreach ndërtuar në vetvete, por kjo konstrukt për variabël i renditi për betejë, dhe unë në këtë Rasti bëhet një vlerë indeksi. Pra, kjo është pak e ndryshme nga ajo foreach, edhe pse versione të reja të JavaScript po vijnë nga të gjithë kohës, kështu që edhe këto tipare gjuhësore po evoluon. Dhe si një mënjanë, JavaScript këto ditë mund të përdoret gjithashtu në një server të vetëm si PHP duke përdorur një kuadër të quajtur Node.js. Një nga TFS CS50-së, Kevin, e ka udhëhequr një seminar mbi Node.js kjo është në dispozicion në cs50.net/seminars. Pra, nëse ju jeni kurioz, e di se ju mund të përdorin këtë në anën e serverit si mirë, por kjo është një tendencë të kohëve të fundit në mënyrë të drejtë, por një njeri i fuqishëm në atë. Kjo është pak më ndryshe. Ky është një koleksion në JavaScript. Dhe ajo që të godet si të ndryshme kundrejt C apo PHP? Ka pak raste të shpejtë ne mund të them këtu. Çfarë i mungon kundrejt PHP? Audienca: [padëgjueshme]. DAVID Malan: Po? Na vjen keq, them përsëri? Audienca: Jo deklaruar Lloji i ndryshore. DAVID Malan: Ne nuk jemi duke deklaruar Lloji i ndryshore. Pra, në të vërtetë mjaft si PHP, ne nuk jemi specifikuar llojet e kësaj variable. Më saktë, ne jemi më shumë generically duke thënë var për ndryshore. Ne nuk kemi telash PHP-së e shenjë dollar, e cila duke i lodhshëm për të lloji, e bën më të qartë se diçka është një variabël. Ndërsa këtu, ne jemi lloj përsëri në Qasja C duke e quajtur vetëm një ndryshueshme me emrin që duam për të dhënë atë, si numrat. Dhe ashtu si PHP, ne kemi kllapa katrore për Vlerat brenda kësaj grup. Pra variablat në JavaScript gjithashtu mund të duket kështu. Vini re këtu kjo është një varg i quajtur s, por në mënyrë të ngjashme nuk kanë specifikuar se kjo është një varg. Ja pse është një tipar që nuk ka ekzistojnë pikërisht në të njëjtën mënyrë e në PHP, por pak në mënyrë të ngjashme. Kjo është një objekt në JavaScript. Dhe objektet janë lloj Ushtria zvicerane Thikë e një strukture të dhënave në atë ju mund t'i përdorë ato për çdo numër të gjërave. Këtu, për shembull, ne jemi duke deklaruar një ndryshore të quajtur kuotë. Lloji i kësaj variable është një objekt. Ju mund të mendoj për këtë si strukturë C që ka çelësat dhe vlerat. Simboli është një kyç. FB është një vlerë, me sa duket një simbol të aksioneve. Presje. Çmimi është një tjetër kyç, dhe vlera e saj është duket një pikë qarkullues, ose një Numri më në përgjithësi në JavaScript, prej 49,26 $. Pra PHP nuk ka - ne nuk kemi parë në objekte PHP mjaft si kjo, por ne e shohim një analog, e cila ishte ajo? Audienca: [padëgjueshme]. DAVID Malan: vargjeve asociative. Pra, ndërsa PHP ka vargjeve të shoqatave Sintaksa e të cilit është kurrë aq pak të ndryshme - ne pamë kllapa katrore. Ne pamë pazakontë shigjeta simbolet. JavaScript ka objekte, por kjo është kryesisht një ndryshim semantik dhe një sinonim të ndryshme për tani. Megjithatë, si një mënjanë, PHP gjithashtu ka objekte në një mënyrë që Java dhe të tjera gjuhë kanë objekte në programimit object-oriented. Por ne do të përdorim këto vetëm për llojet e të dhënave për tani. Objektet dhe vargjeve asociative. Kjo mund të bëjnë të pak më i qartë. Ja pse një objekt është e dobishme. Kur doni të deklarojë një student, si Zamyla, ne mund të vërtetë encapsulate kështu që të flasin brenda e që kundërshtojnë duke përdorur kllapa kaçurrel ashtu si para një bandë e tërë e çelësat dhe vlerat në këtu. Ne kemi një ID, një shtëpi, dhe një emër për Zamyla, e ndjekur nga një pikëpresje si zakonisht në fund. Poshtë edhe këtu, kjo është pak të ndryshme, por edhe shumë i fuqishëm këto ditë. Ja një grup, dhe unë e di se për shkak ka një kllapa katrore up lartë dhe një kllapa katrore në fund. Dhe kjo është një grup të asaj që të dhënat e shkruani sa duket në JavaScript? Ky është një grup i saj duket si tre objekte. Dhe unë e di se është vetëm një objekt për shkak të formatimin e teksteve kaçurrel. Dhe vini re nuk ka mbajtëse të hapur kaçurrel, disa sende, mbajtëse të ngushtë kaçurrel, presje, pastaj disa më shumë, presje, dhe pastaj disa më shumë. Pra, kjo është tre argumente ndara nga dy presje. Pra, kjo është një grup prej tre objekte. Dhe secili prej këtyre objekteve duket të jetë një anëtar student ose stafi i disa lloj, secili me një ID, shtëpi, dhe emri. Por unë e kam quajtur këtë diçka quajtur JSON - JavaScript simbol Object. Dhe kjo është një format të dhënave që në fakt është kaq shumë popullor dhe në modë këto ditë se në qoftë se ju shkruani një aplikim që përdor Facebook API, API Twitter, me të vërtetë gati çdo API atje këto ditë, duke përfshirë edhe disa nga vetë CS50-së, të dhënat që ju të merrni përsëri nuk është në vjetër format CSV shkollës. Sepse kujtojnë se CSV është super e thjeshtë. Ajo është vetëm kolona të ndara me presje. Të dhënave JSON ju jep më shumë metadata. Ajo lidh një kyç me çdo vlerë në mënyrë ata nuk kanë për të vetëm të supozojmë se kolona 0 është një vlerë, kolona një është një tjetër, kolona dy është një tjetër. Çdo gjë në një objekt JSON këtu është lloj të vetë-përshkruar, sepse çdo një prej emrave në këtë fotografi ka fjalë për fjalë të përmendur para saj si një string cituar. Pra, le të marrin një vështrim në a disa shembuj këtu. Më lejoni të shkoj në aplikim. Dhe më lejoni të shkoj në vhost tonë directory në publik. Dhe më lejoni të shkoj në JavaScript directory. Dhe le të shkojë përpara dhe të hapur dom-0.html, ku DOM thjesht do të thotë dokument Modeli objekt. Është pemë gjëra për të cilat Unë i përmendur më herët. Dhe më lejoni të propozoj në vijim. Këtu ka një faqe web e të cilit Trupi është shumë e thjeshtë. Pra, këtu poshtë në pjesën e poshtme, vini re: Unë kam një formë. Ne kemi parë ata që ishin para. Ajo ka dy inputeve, një nga të cilat ka një ID emri, një nga të cilat është një lloj paraqesë, dhe parë Lloji i njeriut është teksti. Pra, kjo në të vërtetë tingëllon shumë e thjeshtë. Le të shkoni këtu. Le të kthehemi në këtë faqe këtu. Le të shkojnë në localhost, dhe shko në directory tonë JavaScript, dhe të shkojnë në dom-0, dhe këtu ne kemi këtë formular. Pra, kjo është me sa duket e gjithë kjo faqe ka. Ajo ka një fushë me emrin Submit një buton. Por unë nuk jam duke shkuar për të përdorur PHP këtu. Unë jam duke shkuar për të bërë çdo gjë anën e klientit kështu që të flasin në JavaScript si më poshtë. Vini re se unë kam dhënë të vërtetë emrin Fusha e këtij input një unik identifikues, i cili do të vërtetë Më të ruajtur disa kohë në një çast. Dhe vini re unë kam futur një tag në krye të web faqen time,  tag. Pra, është në këtë kuptim se JavaScript është një klient-side gjuhë programimi. Në këtë rast, ashtu si CSS, unë kam vënë kjo e drejtë brenda HTML tim. Por njoftimi Unë e kam deklaruar një funksion se duket pak si PHP sintaksore, por kjo është në të vërtetë JavaScript, sepse përsëri, kjo është klient-side në shfletuesin. Dhe të marrë me mend se çfarë kjo do të të bëjë, edhe pse disa prej sintaksës këtu është e re. Audienca: Thuaj përshëndetje për të kushdo. DAVID Malan: Ajo do të thonë hello për të kushdo që viziton këtë faqe. Pra, si? Pra të vini re, ajo rezulton në JavaScript ka një alert () funksion. Ky është një funksion shumë lloj trishtuar që vërtetë vetëm ka tendencë për të fyejnë përdoruesit. Kjo nuk është një që ju duhet të vërtetë të përdorni në mënyrë tipike, por kjo është një shpejtë dhe të pista Mënyra e lloj shtypjes diçka për një përdorues grafike kryesh, si një shfletues. Vini re këtu që unë kam marrë një string në thonjëza të vetme. Ajo rezulton se ndryshe nga C, JavaScript në fakt mund të keni të përdorni të vetme citon, dhe sinqerisht kjo është vetëm lloj e konventës stilistike në mesin e JavaScript programuesit për të përdorur Kuotat e vetme. PHP, ata në fakt kanë pak Kuptimi i ndryshëm. Por tani për tani, vetëm e di se kjo është arsyeja e vetme. Konventa në JavaScript është shpesh për të përdorni Kuotat e vetme, por ne mund të përdorim Kuotat e dyfishtë në të dy vendet si. Pra, kjo është interesante. Kujtojnë herë të fundit që kemi pasur që fotografia në ekran që tërhoqi një pemë ku keni pasur nyjen HTML, dhe kokë nyje, dhe nyjen e trupit, dhe pastaj disa tekst. Por nuk ishte një nyje të veçantë në shumë të lartë që unë e quajti dokumentin. E pra, kjo rezulton në JavaScript, çdo herë që të shkruani një program në JavaScript në një shfletues, ju keni qasje në një variabël të veçantë globale. Të ngjashme në frymë të superglobals php-së, kjo quhet në të gjitha dokument me të vogla. Është si një struct, por kjo struct gjithashtu ka funksione në brendësi të tij. Pra, një struct C vetëm ka të dhëna në mënyrë tipike. Por një objekt JavaScript pasi kjo teknikisht është gjithashtu ka funksione, i njohur ndryshe si metodat, në brendësi të saj. Dhe ju mund të telefononi një funksion brenda ky objekt mjaft fjalë për fjalë saj duke bërë emri, dot, dhe pastaj emrin e funksioni, ose përsëri metodë. Është vetëm një sinonim, me të vërtetë. Dhe çfarë e bën këtë funksion të bëjë? Ju mund të lloj mend nga emri i saj. Get element me ID. Pra, kjo do të kërkoni në web faqe, kërko atë pemë, në kërkim të çfarëdo nyje, element AKA, ka një ID unike kuotë e emrit mbyll thonjëzat. Dhe pastaj çfarë jam unë do të bëj? Unë jam duke shkuar për të marrë vlerën brenda që Nyja në pemë, dhe unë jam duke shkuar për të thënë disi hello për këtë emër. Pra, të marrë me mend, edhe pse ne nuk kemi parë këtë ende, çfarë bëni plus simbole të thotë këtu dhe këtu ndoshta? Audienca: lidh. DAVID Malan: lidh. E drejta, dhe këto janë vetëm lloj të hartuar vendime populli e vite më parë. Në PHP, ju lidh gjërat me pika. Në C, ju kërcejnë përmes disa hoops dhe të telefononi funksionet si strcopy () ose strcat () ose funksione të tjera të tilla. Por në JavaScript, ju përdorni pluses. Pra, kjo është vetëm concatenating tre strings - hello, një emër, dhe pastaj një pikë thirrje. Pra, kur dhe pse është ky funksion quajtur pse? E pra, të marrë me mend nga HTML në fund. Pse është e përshëndes () i quajtur, apo kur? Me sa duket, sa më mirë unë mund të them, në paraqesë, kur kjo formë është dorëzuar, Unë jam duke shkuar për të bërë çdo gjë që është brenda nga këto citate. Dhe në mënyrë të veçantë, unë jam duke shkuar për të thirrur përshëndes () dhe pastaj të kthimit të rreme. E pra, le të shohim se çfarë neto Efekti këtu është i parë. Pra më lejoni të shkoj përpara dhe të shtypni në, të themi, Loren, Submit. Përshëndetje Loren. Le të shohim nëse ndoshta kjo ishte vetëm një zbatim me fat. Jo. Pra, është e shtypur nga çfarëdo emrin Unë në fakt vendos atje. Por vini re se çfarë nuk është duke ndryshuar. URL është ende dom-0.html. Nuk ka register.php. Nuk ka fotografi të dytë. Nuk ka atribut veprim. Pra, çfarë është kjo e rreme kthim me sa duket duke bërë? Pse jam duke e quajtur përshëndes () dhe pastaj kthimit të rreme ndoshta? Ajo që zakonisht ndodh kur ju klikoni Submit në një formë që edhe ne kemi parë në javën e fundit? Audienca: [padëgjueshme]. DAVID Malan: Ajo shkon diku, apo jo? Ai shkon në një destinacion URL. Por unë nuk dua që kjo të ndodhë këtu. Unë dua web faqen time për të qenë plotësisht dinamik si Gmail, ku një herë ju jeni atje, ju qëndroni aty. URL nuk ndryshon në një mënyrë që tregon e gjithë faqja është reloading. Përkundrazi, unë vetëm dua të ndryshojë diçka si shtypjes nga diçka këtu në ekran. E pra më lejoni të pastruar këtë deri pak. Më lejoni të hapur jo dom-0, por më lejoni të hapur dom-2. Vetëm kështu që ju kam parë disa sintaksë këtu. Ajo rezulton se ajo që ne vetëm e para është duke përdorur JavaScript. Pra, kjo është me të vërtetë gjuha JavaScript. Disa nga ju mund të dini të një bibliotekë të quajtur jQuery. Pra jQuery nuk është e njëjtë gjë si JavaScript. Është vetëm një bibliotekë që një të vërtetë të zgjuar djalë i shkroi dhe e popullarizuar të tilla që pothuajse të gjithë në botë tani përdor jQuery kur duke përdorur JavaScript. Dhe në shikim të parë, me ndershmëri, ai duket pak më i fshehtë. Por ju do të gjeni, veçanërisht në qoftë se ju shkoni atje për projektin tuaj përfundimtar me web zhvillim, ju do të gjeni se ky pastron gjërat dhe ju kursen mjaft disa rreshta të kodit. Pra, le të vetëm shikim në mënyrën se si kjo formë është duke punuar. Vini re çfarë bëri të heq me sa duket nga HTML e mia? Nuk ka asnjë më të paraqesë mbajtës mënyrë që të flasin. Nuk ka atribut. Sepse ju e dini, se çfarë Unë nuk të vërtetë si? Unë ndjeva si ne ishim në rënie në zakone të vjetra aty. Ashtu si ajo është duke filluar të ndjehen të lëngshëm të përzihem me të dy CSS HTML, sepse ju jeni lloj i hedhur gjuhë të ndryshme në të gjithë vend, në mënyrë të ngjashme ka kjo të fillojë të ndjehen të si një rrugë e keqe për të shkuar poshtë ku Unë jam vënë kodin JavaScript brenda e mia HTML në vend se factoring it out. Pra, kjo është mësim këtu. Në dom-2.html, unë jam factoring atë. Dhe unë jam duke bërë gjëra pak ndryshe. Tani për tani, unë jam duke shkuar për të valë duart e mia në atë që kjo me të vërtetë e bën nën kapuç. Por vetëm tani për tani supozojmë se se pari linjë e kodit në këtë bibliotekë quajtur jQuery thjesht do të thotë kur dokumenti është gati, të bëjë të mëposhtme. Për shkak se faqet e internetit mund të marrë disa kohë të ngarkesës. Ju mund të jetë në një internet të ngadaltë lidhje, dhe kjo mund të jetë tjerrje dhe tjerrje, dhe më në fund është e ngarkuar. Kjo linjë e kodit vetëm të thotë të presë deri e gjithë faqja është e gatshme, dokumenti është e gatshme, para ekzekutimit këtë kod. Dhe tani vini re, kjo është ndoshta më të dobishme e parë marr me vete nga jQuery. Kjo linjë këtu është shumë e ngjashme në frymë në këtë linjë shumë më të gjatë këtu. Ndërsa në të papërpunuara kodin JavaScript, ka ekziston një objekt globale dokument që ka një funksion të quajtur getElementById (), njerëzit që shkruan jQuery thjeshtuar që të vetëm të thonë shenjë dollar, dhe pastaj brenda kllapat vënë dy citate, dhe më pas vënë një simbol hash ndjekur nga ID unike që ju dëshironi për të rrëmbyer. Pra, kjo është e barabartë me document.getElementById. Ndërkohë,. Paraqesë vetëm do të thotë më paraqitja e çfarëdo forme ju jeni duke iu referuar në të majtë, të shkojnë përpara dhe të ekzekutuar këtë. Por kjo është tani shumë kuriozitet. Çfarë ka të pazakontë në lidhje me atë Unë e kam theksuar këtu? Jo vetëm që është lloj i syntactically ri, ka edhe diçka që mungon. Audienca: Ajo që quhet thjesht funksion? Kjo nuk quhet vigjilent? DAVID Malan: Po. E pra, kështu alert () është poshtë këtu, të jetë e drejtë. Por nuk përmendet e një emrin, si ju e dini, foo ose diçka këtu. Dhe në të vërtetë, kjo është një nga karakteristikat i JavaScript që është mjaft të fuqishme, por edhe mjaft e re. Dhe PHP fakt ka këtë të mirë. Më lejoni të shkoj përpara dhe të bëjë diçka të vërtetë të shpejtë. Më lejoni të shkojnë përpara dhe të vënë këtë këtu. Më lejoni të bërë këtë. Funksioni. Le të quajmë këtë mbajtës (). Një funksion mbajtës mënyrë që të flasin. Diçka që merret me disa operacion. Më lejoni të pastruar vulë time. Dhe vënë këtë këtu. Dhe vendos se këtu. Yep. OK. Deri tani unë kam një funksion të quajtur handler () se unë nuk e vërtetë e di atë që bën ende. Ajo vetëm ende ka se stuff. Uh. Mori shumë. Le të bëjnë këtë. Dakord. Më vjen keq. Dakord. Më lejoni të bërë këtë. OK. Kjo duket e bukur dhe të drejtë përpara tani. Më lejoni të bërë këtë. E bëjnë këtë. Dhe OK. Deri tani, le të vënë këtë këtu. Jo më shumë programimit të fluturojnë. OK. Deri tani, le të kthehemi në ku historia filloi. Më parë, kam thënë se kjo linjë këtu do të thotë kur dokumenti është gati, shkoni përpara dhe të bëjë këtë. Çfarë doni të bëni? E pra në mënyrë të veçantë, unë dua të shkoj përpara dhe të bëjë të mëposhtme. Execute këtë linjë të kodit, dhe më pas ajo që unë dua që ju të bëni është të telefononi këtë funksionojë kur forma është dorëzuar. Tani kjo është ajo që është interesante. Kjo nuk është në vetvete një funksion. Njoftim Unë nuk jam vënë kllapa këtu në mënyrë normale. Unë jam fjalë për fjalë duke kaluar një funksion të quajtur mbajtës () në një tjetër funksion quajtur paraqesë () si argument si edhe pse është si një variabël. Dhe kjo është një nga tiparet e JavaScript, është funksione vetë janë me të vërtetë vetëm të objekteve. Në fakt, ata janë me të vërtetë vetëm variablat e disa lloj. Dhe në qoftë se emri i funksionit është handler (), nuk ka asnjë arsye që unë nuk mund të të kalojë atë në si argument këtu. Dhe kjo do të thotë kur forma me ID e demo është dorëzuar, e quajnë këtë funksion. Por tani në qoftë se unë të ndrequr të gjithë këtë, pse atëherë nuk kam ndoshta të bëjë ky një moment më parë? E pra, kjo është një funksion anonim. Sepse sinqerisht, unë kuptova pse jam unë mërzit për të humbur kohë duke deklaruar një funksion të quajtur handler () vetëm për të thirrur ajo në një dhe vetëm një vend? Nëse unë nuk kanë nevojë për emrin, dhe unë nuk e bëj nevojë për të thirrur atë më shumë se një vend, le të vetëm të zbatojë funksionin drejtë ku kam nevojë për të. Dhe kështu JavaScript dhe PHP mbështesin atë janë quajtur funksionet anonim që më lejoni të bëjë pikërisht këtë këtu. Por ne jemi vetëm kruarje sipërfaqe. Le të vë në lojë me vetëm një çift shembuj përfundimtare këtu. Nëse unë shkoj në quote.php. Vini re se kjo është në fakt një PHP funksion, një program PHP, që kam shkruar se pret një HTTP parameter quajtur simbol, dhe unë mund të kalojë në një vlerë si FB. Dhe nëse ne fakt duken në burim kodi, kjo është po kërkoj një faqe interneti falas quajtur Yahoo Finance, ashtu si p-set shtatë, dhe është kthyer për mua diçka në me sa duket Formati i njohur është JSON - JavaScript simbol Object. Është vetëm një objekt. Vini re formatimin e teksteve kaçurrel, kuotat, zorrës së trashë, dhe Presjet. Tani ndërkohë, kjo është shumë cool. Sepse unë ndoshta mund të përdorni një programimit Gjuha për të gjeneruar URLs që të duket si ky dinamike, të drejtë? Unë mund të ndryshojë këtë në Google dhe të kthehemi Google Çmimi i aksioneve të $ 1,017.55. Pra, le të shohim nëse ne nuk mund të përdorim këtë tani. Lermë të shkoj-ajax 0 këtu, e cila duket si në vijim. Është vetëm një faqe interneti që ka një formë me një buton. Më lejoni këtu të shkojnë përpara dhe të shkruani në YHOO për modelet simbol Yahoo, klikoni Get Quote, dhe tani vini re unë kam marrë një alarm me 32.86. Më lejoni të vërtetë të shkojnë në një version njohës të kësaj faqe, version dy, dhe shkruani le të themi Microsoft, MSFT. Get Quote. Dhe tani vini re, asnjë alarm. Njoftim ku ai thotë se çmimi për të përcaktuar? Nuk është e thjeshtë të shembujve që lë të kuptohet se në çfarë Gchat, dhe Facebook Chat, dhe Gmail, dhe të tjera të tilla faqet e internetit janë duke bërë në të vërtetë nga ndryshuar web faqe. Vini re këtë. Më lejoni të rifreskoni faqen. Më lejoni të hapur Inspector Chrome-së. Më lejoni të shkoj në elementet tab poshtë këtu. Tani vini re, nëse unë zoom poshtë këtu dhe hapur këtë ide, vini re se kjo është e mia HTML DOM - modeli im objekt dokument. Kjo është HTML im. Por tani vini re, edhe pse ajo do të jetë pak e vështirë për të parë atë në të dy vende në të njëjtën kohë, në qoftë se unë lloji në FB deri këtu, të shikojnë pjesën e poshtme i ekranit vetëm. Është në të vërtetë ndryshuar HTML tim të fluturojnë. Dhe është e bërë këtë shumë thjesht duke bërë diçka si kjo. Nëse unë të hapur ajax-2, njoftim zbatimin diçka si sexy si se, edhe pse kjo është shumë e shëmtuar, por aq i sofistikuar si ajo funksionalisht, ajo ka disa HTML në fund. Por vini re kam përdorur për të tag. Ne nuk e kam përdorur këtë më parë, por kjo është si një, por kjo nuk i detyrojnë çdo gjë mbi një linjë të re. Ajo vetëm e bën një rajon drejtkëndëshe në të njëjtën linjë thelb. Vini re se i dha një ID të çmimit. Dhe kjo rezulton, duke përdorur të njëjtën JavaScript bibliotekë, unë kam një funksion quajtur quote () që quhet sa herë që formë është dorëzuar. Dhe ajo që unë jam duke bërë është ky. Unë jam deklaruar një ndryshore në JavaScript quajtur url, duke kursyer vlerën quote.php? simbol =. Me fjalë të tjera, unë vetë jam duke filluar për të përgatitur një kërkesë HTTP, dhe më pas Unë jam concatenating mbi atë me një plus çfarëdo element me ID i është simbol, i cili njoftim është se fushë teksti të drejtë këtu. Pra, ashtu si kishim forma në të kaluarën. Dhe pastaj kjo rezulton në jQuery, në qoftë se ju telefononi. val (), që bën thirrje për një val funksion, një funksion vlerë, që merr çdo gjë që përdoruesi ka shtypur in Dhe pastaj të gjithë e trafikut të rrjetit që ndodh është kjo. $. GetJSON. Dhe si një mënjanë, shenjë dollari është vetëm një simbol stenografi. Është me të vërtetë jQuery.getJSON. Get më të JSON nga kjo URL, dhe kur Kërkesa vjen mbrapa, e quajnë këtë funksion dhe të kalojë në si argumentin çdo gjë u kthye nga serveri. Pra, me fjalë të tjera, nëse unë kthehem në shfletues, dhe unë të kthehem në quote.php, çfarë shfletuesi ime është duke bërë është duke u kjo copë e të dhënave. Dhe kur të shkoj në këtë web faqe këtu, njoftim nëse ne në vend të shkojnë në rrjet tab dhe të qartë atë, dhe pastaj shkruani diçka si GOOG për Google dhe Get Quote, njoftim faqja nuk ka ndryshuar. Por një kërkesë HTTP është bërë, dhe çfarë u kthye këtu në qoftë se ne e shikojmë në Përgjigja është një bandë e tërë e JSON që ne të arrihen në fund me kjo linjë e thjeshtë këtu. Të dhënat është ajo që është marrë nga serveri. Çmimi është emri i çelësi më intereson. Pra data.price më jep atë. Tani ndërkohë, dhe kjo është shembulli më i fundit. Ju mund të bëjë akoma më shumë me faqen. Një fakt, edhe dy. Ne mund të sjellë përsëri tag, në qoftë se ju kujtohet kjo. Kjo është JavaScript. Ne mund ta bëjë këtë. Shumë emocionuese. Ne do të iki se si cliffhanger. Por më shumë excitingly, ju mund të bëjë gjëra të tilla si kjo. Nëse unë shkoj për të Geolocation-1, rezulton Chrome që e di se ne jemi në gjatësi gjerësi 42,37. -71,10. Pra, ka edhe më shumë ka në dispozicionin tuaj. Por më shumë në atë javën e ardhshme. Shihemi të hënën.