DAVID Malan: Dobre. To je CS50, a to je Koniec týždňa deväť. Je to už viac ako víchrica v posledných niekoľkých dňoch. A problém nastaviť sedem, ak ste koleno hlboko do nej uvedomiť, že je to celkom trochu nové, že tam je. Ale uvidíme, či nemôžeme poskladať všetko dohromady tu krátko skôr potom skáču off v ešte iný smer a vidí kde ešte môžeme ísť. Takže tak ďaleko, sme hovorili o HTML. Hovorili sme o CSS. Hovorili sme o PHP. Začali ste zažiť SQL. Dnes budeme hovoriť trochu o JavaScriptu. Ale ako všetky tieto nesúrodé jazyky zapadajú? Tak sme hovorili minulý týždeň o Pojem má server. Tak nech to jednoducho nakresliť tento obdĺžnik ako webový server tu. A webový server slúži veď súbory. A niektoré z týchto súborov môže byť HTML súbory. Takže jedna z vecí, ktoré webový server môže vypľuť môže byť súbor, ktorý jednoducho budeme kresliť takhle obsahujú niektoré HTML. Takže laicky povedané, to, čo HTML sa vám to? DIVÁKOV: Strana vyzerať pekne. DAVID Malan: OK, aby stránka vyzerala pekne, aj keď myslím, že som ukázal ktoré by inak. Takže HTML sa vám rozloženia stránok štrukturálne, a to vám umožní trochu esteticky označiť stránku, označiť statický obsah, takže si potom môžete zobraziť pomocou webového prehliadača. Ale to je kľúč. Je to statický obsah. Môžete napísať, ju uložíte, a potom ich odoslať. A webový server potom slúži že až vaše návštevníkov. Ale štylizovať veci pomocou iného jazyka vôbec. Začali sme používať atribút style o niektorých značiek. A štýl atribút vydajme veci, ako je veľkosť a farbu písma. A pravdepodobne ste začali objavovať, alebo čoskoro budú pre konečné projekty potenciálne ešte iné vlastnosti, ktoré môžete použiť v CSS. A tak v Laicky povedané, to, čo Naozaj potom sa CSS robiť? To sú len príklady tohto rozhodnutia. Čo to nechať urobiť HTML Nezdá sa, že z toho, čo sme videli tak ďaleko? DIVÁKOV: Definovať štýly sami. DAVID Malan: Definovať štýly sami. Takže definovať veci ako triedy ako vy sa mohli stretnúť, alebo jednoznačne identifikovať uzly v dokumente tak, ktoré si môžete štylizovať ich. Ale konkrétne, povedal by som, že CSS naozaj vám umožní vziať veci poslednej míle a umožňuje určiť oveľa presnejšie estetika, vzhľadom k tomu, HTML z väčšej časti umožňuje si štruktúru svojej stránky. A aj keď existujú niektoré defaults, ako sme videli značku pre záhlavie tag, ktorý zhruba povedané robil veci veľké a tučné. To je dosť všeobecná definícia o značke - veľký a odvážny. Aká je veľkosť písma, že? Akú farbu má, že? Ako tučne je? A CSS umožňuje jemnejšie ladenie a podobné veci. Ako aj usporiadanie, pretože niektoré z vás videli. A úprimne povedané, CSS je trochu z chaotický jazyka. Je to veľmi silný v tom, že si môžete robiť doslova všetky webové stránky, ktoré ste vidieť na webe dnes, ale je to trochu bolesti v krku. A niektorí z vás udrel hlavou proti múru už len robiť niečo hlúpeho ako centra menu na problém nastaviť sedem, ak ste sa dostali do tento bod už. Ale uvedomiť si, tie veci mať ľahšie v priebehu času. Začnete všímať vzory. A opäť, Google bude váš priateľ pre rôzne spôsoby, v ktorom môžete riešiť tieto druhy problémov. A trúfam si povedať s CSS a HTML viac Všeobecne platí, že môžete vyriešiť problémy mnoho ďalších spôsobov, možno všetky, ktoré veľmi rovnako správne, ako by ste mohli niečo ako C, a to aj Teraz PHP alebo JavaScript. Existuje len mnoho rôznych spôsoby, ako položiť veci. Ale to sa začali chaotický, sme si povedali. Len trochu zmiešaním svoje HTML a Váš CSS s atribút štýl bol trochu nedbalý. A tak sme namiesto toho povedal, tak nejako abstraktne povedané, že by ste mali aspoň začať faktor sa vaše CSS pravdepodobne. Nie je váš štýl atribúty, ale aspoň používajte štýl značky vnútro čo časť webovej stránky? Divákov: hlava. DAVID Malan: Do hlavy. Až doteraz sme mali len titul až tam, ale môžete tiež pridať štýl tag, a vy môžete dať svoje CSS zhruba rozprávanie k hornej časti stránky. Ale potom sme si vzali veci o krok ďalej a my zapracované, že z viacerých do samostatného súboru. A tak sa tieto dva súbory boli nejako teraz prepojený. A naozaj to bolo tag, ktorý to urobil. A to, čo bolo jednou z hlavných motivácia pre factoring sa na naše CSS o to viac? Divákov: znovupoužitelnost. DAVID Malan: znovupoužitelnost. Je to tak? Možno ste videli v p-set sedem už že veľa stránok, nákup stránku, predaj stránku portfólio strana, sú pravdepodobne štruktúrovaný trochu podobne. Je tu CS50 financie logo hore ak ste sa rozhodli zmeniť. K dispozícii je päta na spodnej časti stránky. A CSS umožňuje potom faktor von ich do samostatného súboru tak, že ak Ak chcete niečo zmeniť globálne po celý svoj web, môžete si naozaj stačí zmeniť na jednom mieste. Ale tam je cena, ktorú zaplatíte potenciálne tým, že počítaná CSS z môjho súbor HTML, do samostatnej súbor odkazovanie sa tag, ktorý sme videli v pondelok. Čo by mohlo Nevýhodou je to? Myslenie späť pred týždňom, keď sme hovorí o HTTP a TCP / IP a ako internet funguje. Niečo tu? DIVÁKOV: To zaberie viac času. DAVID Malan: To zaberie viac času. Prečo? DIVÁKOV: [nepočuteľné]. DAVID Malan: Jo. Tak to pravdepodobne trvá trochu viac času. Vzhľadom k tomu, jeden, CSS je samozrejme nie je v rovnakom súbore. Takže teraz máte robiť nie jeden, ale dve požiadavky. A každý z týchto požiadaviek, ako sme videli v Chrome v tzv Inspector, a my sme sa pozerali na karte siete, každý z týchto súborov vyžaduje jeden HTTP požiadavka, ktorý sme videli sa určité množstvo času. Teraz, možno, že to nie je veľa. Možno je to len 20 milisekúnd. Možno je to 200 milisekúnd. Ale premýšľať o stránke, ako je Facebook, alebo CNN alebo Google, ktoré sú oveľa väčší než príkladoch sme Pozrel sa na tak ďaleko. Tieto stránky môžu mať desiatky súborov, pričom každý z nich môže vyžadovať sťahovanie súboru. Takže čo môže potenciálne začať spomaľovať. A najmä v týchto dňoch, kedy sme sa všetci majú mobilné telefóny v našich vreckách a pomalšie pripojenie k internetu, ktoré majú na počkajte pár milisekúnd, pár viac milisekúnd pre ďalšie Súbory môžu byť v skutočnosti pomalé. Latencia je slovo, ktoré opisuje druh čakania, ktoré máte, že vám skúsenosti pri čakaní na niektorí údaj. Ale je tu hore. Takže to nie je všetko tak nejako - v skutočnosti je trochu hojdačke tu. Spomalenie teraz, ale to, čo prehliadača môžu robiť v prípade, že sú inteligentné, aby sa zabránilo museli žiadať rovnaký Styles.css súbor opäť možné urobiť, čo? Cache je. Takže cache - C-A-C-H-E - všeobecne znamená, že tu práve pre uloženie súbor, ktorý požiadal prvýkrát, a potom skontrolovať cache pre neho. Skontrolujte, či ste nejako skladovacie nádoby, a ak už máte kópie styles.css, aj keď niektoré ďalšie Stránka v p-set, alebo akejkoľvek webovej stránky, žiada znova, len aby Užívateľ, ktorý rovnaký medzipamäte kópie. Neobťažujte sa o to požiada. Spomalenie tam, aj keď, ako sa niektorí z vás sa zakopol v p-set. Ak urobíte zmenu na serveri a sa vrátite do prehliadača a vy znovu, niekedy prehliadač nemá si láskavosť a neobťažuje znovu stiahnuť váš Styles.css súbor pretože, no, aká je pravdepodobnosť, že tieto štýly, ktoré Facebook používa sa bude meniť každú hodinu, alebo zo dňa na deň? Je to celkom nízka. Môžu v priebehu času mení, ale nie minútu od minúty alebo hodiny. Takže trik, len FYI, keď robí web vývoj, je často podržte klávesy shift napríklad a potom kliknite na tlačidlo znovu vo svojom prehliadači, a ktorý bude typicky povedať prehliadača znovu načítať všetko, aj keď už máte je vo vyrovnávacej pamäti. Takže znovu, upsides a nevýhody, ale všetky z nich nakoniec navrhnúť rozhodnutie. Takže teraz, sme nielen koniec príbehu tu. Keby som sa vrátiť a späť a späť a späť, sme začali zavádzať nielen HTML, ale PHP. Takže laicky povedané, to, čo sa PHP poďme robiť? DIVÁKOV: [nepočuteľné]. DAVID Malan: Čo je to? DIVÁKOV: Zaviesť logiku do kódu. DAVID Malan: Jo, zaviesť logika do vášho kódu. Takže je to pravda, programovací jazyk s slučky, a premenné, a funkcie, a podmienky, a všetky veci, ktoré sme používali cestu späť keď od samého začiatku. A PHP, ktoré sme videli, môže byť použitý buď na príkazovom riadku - to nemusí mať nič spoločné s webom, a to aj napriek tomu, že je naozaj jeho pôvod a to, čo má tendenciu byť dobrý v a prispieva k - ale môžete použiť PHP len podľa povahy k tomu, že sa má tlač () funkcie, a funkcie printf (), alebo echo () funkcie. Je tu hrozno zo spôsobov, ako si môžete tlačiť text s PHP. Preto, môžete použiť tento programovanie jazyk na výstupe presne to, čo sme hovorili predtým. Môžete dynamicky vytvárať vaše HTML. Možno, že nie všetky z nich. Možno, že tvrdé kód veci, ako je hlavičky a päty, a logo, a vaše štýlov, a všetky, ktoré. Ale niečo ako p-set sedem, kam manipuláciu zásoby a ukazuje portfólio užívateľa, ktorý je bude dynamicky meniť, môžete určite používať PHP a logiku to dáva ste ako programovací jazyk pre výstup dynamicky podskupín stránky. Takže keď budete hovoriť o dynamických webových stránok, alebo webové programovanie, ktoré je čo ste naozaj hovoríš. Používania jazyka, ako je PHP, alebo veci, s názvom Python, alebo Ruby alebo Java, alebo Zatiaľ iné jazyky, k dotazu na databázu často, alebo iný server, a potom dynamicky vypľuť HTML. Teraz konečný výsledok, ako stranou, je že HTML väčšiny webových stránok, vrátane svojej p-set sedem, je pravdepodobne Bude to obrovský zmätok, pokiaľ sa pozriete na zdroje kód v prehliadači. To nie je veľký problém. V tomto okamihu, kedy sa staráme o štýl, staráme sa o veci, ktoré píšete. Budeme sa nestarajú o veci že to, čo vaše výstupy kód. Takže sa nemusíte báť o odsadenie tu, ak je to PHP, ktorý je vlastne výstupu veci. Koniec koncov, bude prehliadač nie je jedno, a človek nebude hľadať pri zdroji rovnako. My zamestnanci, napríklad, by pri pohľade na vaše PHP. Takže mi dovoľte dať rýchly príklad teraz prečo inak by to mohlo byť užitočné. Takže úprimne povedané, nemôžem si spomenúť posledný Keď som použiť C vyriešiť problém reálny svet. Bolo to pravdepodobne v postgraduálnom štúdiu, keď Potreboval som sa použiť jazyk, ktorý Bol pomerne nízkej úrovni, a dal mi príležitosť urobiť niečo veľmi vysokú predvádzanie naozaj ušetriť toľko CPU cyklov, ako som mohol, z veľkej časti pretože som bol s použitím veľké dátové súbory, a každý CPU cyklu počíta. A úprimne povedané, aj vo veciach, ako sú mobilné telefóny v týchto dňoch a ďalšie zariadenia kde nemáte dosť mať toľko pamäte a nemáte dosť mať za veľa CPU, vďaka rýchlejším jazykov je stále atraktívna. Ale v reálnom svete, keď ste práve chcem hodiť nejaký program, spoločne so analyzovať niektoré údaje, alebo ste nazbierali Celá partia registráciou pre niektoré študentská skupina a chcete sa veľmi rýchlo automatizovať odosielanie e-mailov jeden po druhom, aby každý z tých o registrácii, budete dosiahnuť na jazyk vyššej úrovne ako C, aby som tak povedal. Niečo ako PHP alebo Python alebo Ruby, alebo pol tucta ďalších, ktoré existujú v týchto dňoch. Ale tí traja sú pravdepodobne Najviac trendy práve teraz. A čo to znamená, je to, že môžete otvoriť do textového editora, napríklad gedit alebo väčšina niečo iné a potom už len začať písanie kódu, bez toho aby sa museli starať o zostavovaní, bez toho aby ste museli naozaj starať o správu pamäte, mať na pamäti, že aj keď trochu povrchnosť sa nakoniec vráti vás uhryznúť, ak dátový súbor dostane väčší alebo problém dostane veľký. Ale čo to znamená pre nám je nasledujúci. Nechaj ma ísť napred a spustiť pravopisu od problém nastaviť šesť. Tak toto je moja implementácia trie na báze ktoré som použil na veľký board, kde som vykonal to tak dobre. Vrátime sa za týždeň a znovu tých, ktorí sa skončiť na vrchole veľká tabuľa na našej poslednej prednáške. Ale teraz, nechaj ma ísť dopredu a len spustiť môj riešenie v texte, a budeme robiť King James Biblie, a ideme na to. Tak to sú všetci údajne chybne zapísaná slová z King James Bible. A môj realizácia sa pol druhej v celkom. Takže nie je tak zlé na to najmä počítače. Ale premýšľať o tom, koľko Kód som musel napísať. Zamyslite sa, koľko kód, ktorý musel napísať. Zamyslite sa, koľko hodín ste strávili v D-haly alebo na koľaji, alebo tam, kde vlastne kódovanie sa toto riešenie. No, keď som v skutočnosti majú vyššiu úroveň jazyk ako PHP, vziať na vedomie čo sa dá robiť. Najprv predpokladajme, že je to miesto vaša distribúcia kódu. Jedná sa o súbor s názvom pravopisu. Je k dispozícii ako súčasť dnešnej distribúcia kód. A budem mávať moju ruku nanajvýš detailov, ale to je vlastne zaujímavý príklad toho, ako by ste mohli portu jazyk ako C cez PHP. Doslova som otvoril dve textové okná, jeden s mojím C verzie speller.c, a ja som práve začal jeho preklad v mojom zamierte do PHP a písať to pomocou najbližšou ekvivalentnou funkcie. Takže niektoré z týchto vecí sú rôzne. Videli sme minule, že PHP nepoužíva sú v úplne rovnakým spôsobom. Používa sa zvyčajne vyžaduje, aj keď patrí skutočne existuje. Definujte je trochu odlišný od # Define v C, ale to je ako urobiť konštantu. $ Argc to dopadá existuje v PHP, takže sme predtým videli, že. To sú len premenné, všetko z ktoré začínajú znakmi dolára. Pripomeňme, to sú len banda plávajúce bodov. Tak dlhý príbeh krátky, ste vítaní flip cez to, ak zvedavý, je to takmer line-pre-line konverzie C verzie speller.c do PHP. A môžete to urobiť znova pol tucta ďalších jazykov. Ale čo je zaujímavé je to. Alebo to, čo je povedané skľučujúca je to. Nechaj ma ísť do toho a napíšte o dictionary.php, a tvrdia, že som ísť dopredu a re-implementovať problém nastaviť šesť tu. Takže poďme navrhnúť ako prvý, že v tomto súbor, ktorý bude realizovaný v roku PHP, tak nech mi otvorí svoje značky, ako je to. Dovoľte mi, aby som sám globálne Premenná $ veľkosť dostane na nulu. A ja idem dať Sám hash tabuľky. Budem používať hash tabuľky pre túto vec. Ako môžem vyhlásiť hash tabuľky v PHP? Hotovo. OK. Takže ľavá zátvorka zátvorka predstavuje čo v PHP, ako sme videli? Poľa, ale pole, ktoré by mohli byť asociatívne pole. Asociatívne pole je dátová štruktúra, ktorá združuje kľúče s hodnotami. Teraz v najjednoduchšie číselne indexované polia, tieto klávesy sú, čo? Nula, jedna, dva, tri, jo? Old school veci späť od C. Ale to môže byť aj reťazca ako foo a bar, alebo Maxwell, poprípade za reťazec. Takže môžem využiť, že za chvíľu. Nechaj ma ísť dopredu a vyhlásiť funkcie ako - poďme urobiť prvý load (). Takže funkcia load (). A PHP je v tom, že trochu iný doslova typ funkcie, ale nezadáte návratový typ. Chystám sa ísť ďalej a hovoria, že funkcia load () by mala v Argument $ slovník, len ako C verzie robila. Robím, že z pamäte. A ja navrhujem, že som bude to robiť. Ja proste robiť foreach. Idem zavolať funkciu nazvanú súbor (), prechádzajúce v názve, ktorá súbor, ktorý je variabilný $ Slovník ako $ slovo. A potom sa v mojej slučky for tu, som ísť dopredu a skladovať v mojom $ Tabuľka $ slovo dostane pravda. Hotovo. Oh, počkaj. Hotovo. OK. To je záťaž funkcia () hovoria v PHP. A teraz, prečo to má fungovať? A ja som trochu podvádzanie tu. Tak, jeden, foreach sme videli krátko minule. To len znamená, že môžete iterácii pole, bez toho aby sa obťažoval sa aj a n a a a, a to všetko. Slovník je samozrejme názov súboru, niečo ako veľký alebo malý, dva slovníky, ktoré sme použili minule. Súbor je funkcia, ktorá otvára texte súbor, prečíta ju v riadok po riadku, a ruky môžete zálohovať obrovskú škálu, každý z ktorého prvkov sa riadok z tohto súboru. Tak to je kombinácia fopen, a fread, a zatiaľ čo slučka, a fclose, a všetky, ktoré. Napokon, ako slovo jednoducho znamená, že je Premenná Budem mať prístup k na každej iterácii v tejto slučke. Takže v skratke, táto jedna vložka sa tu rozumie otvoriť súbor, ktorého meno je v slovník, variabilný, iterácii je riadok po riadku, a zakaždým, keď sa linka, sklad v premennej s názvom slovom, a potom urobiť niečo so slovom. Čo chcem robiť? Chcem vložiť slovo do môjho hash tabuľky. No, môžem dať niečo v mojom hash tabuľky, rovnako ako v C pomocou hranatých zátvoriek. To je meno mojej tabuľky hash. Budem index do tohto hash tabuľka na tomto mieste. Takže nie je bracketing nula, nie je bracketing jeden. Držiak citácie koniec citátu niečo, čo to slovo je. A rovnako ako môžete mať vo vašom hash table práce trie, ktorý ste práve obchod účinne Boolean, implicitne alebo explicitne. Hotovo. Ja skladovanie hodnota true. Teraz je tu pár vecí, Som rezanie zákrut na tu. Technicky vzaté, tam to bude nepríjemné nový riadok, / n, na konci každé z týchto slov. Takže som mal asi zavolať funkciu PHP tzv chop (), ktorá bude doslova kosiť to preč. A ja naozaj potrebujete urobiť ešte jednu vec. Asi by som mala zvýšiť veľkosť na každom iterácie, takže som sledovanie na celom svete o tom, čo to je. A úprimne povedané, a to je jeden z hlúpejší aspekty PHP ak ste použitie globálne premenné, je nutné explicitne povedať, že ste. Takže budem vlastne písať v globálnom $ Veľkosť, global $ table, a teraz má funkcia je kompletný. Takže nie je tak jednoduché, ako predtým, ale Pravdepodobne trvalo kratšie ako C verzia, možná? OK. Takže teraz poďme urobiť kontrolu funkcie (). Uvidíme, či to aspoň sa hodiny na konci, že nám to trvalo v C. Takže nechaj ma ísť dopredu a vyhlásiť kontrolu ako funkcie. Berie v argumente slovo, ktoré je príde z pravopisu. A ja som jednoducho ísť skontrolovať, či Nasledujúce premenné isset, stolný Držiak strtolower slová - poďme vyvážiť všetky moje zátvorkách - potom sa vrátiť pravda. Else - to bolo naozaj ťažké Súčasťou tohto programu. Else, vráti false. Hotovo. To je kontrola (). A teraz, prečo to funguje? No, raz som prešiel v slove, čo je reťazec. Za druhé, ja som kontrolu vnútri hash stôl, ktorý sa nazýva $ tabuľka. Ja nútiť ju, aby malá volaním funkcia veľmi podobné tolower () v C, ale to robí celé slovo, nie je jediný znak. A v prípade, že je nastavený, inými slovami, že je nastavená hodnota, inými slovami, či je to pravda, potom áno, to je slovo. Pretože som ju tam s load (). A ak nie, budem sa vrátiť false. Teraz ostatné sú jednoduché. Veľkosť Function (), ako to mám urobiť? V podstate som to vrátiť $ veľkosť. Ale ja to technicky nevyhnutné urobiť tento nepríjemný vec. A vlastne sa počuť, bol som rezanie jeden roh príliš veľa. Ja naozaj potreba urobiť global $ tabuľku. Ale to bolo povedané, vyložiť). Uvoľniť () je úžasná. Funkcie vyložiť (). Ako môžem chcú zaviesť vyložiť ()? Hotovo. OK. Takže vyložiť (), správa pamäte je kompletne postarané pre vás niečo ako PHP a mnoho v jazykoch vyššej úrovne. Tak to je úžasné. Ako dôvod, prečo to sakra sme strávili na minulosť osem plus týždňov na C písomne zrejme docela pomalé, ale naozaj čas náročné problémy s desiatkami hodín z práce pod našimi pásy? No, na jednu vec, to môže fungovať pokuta pre malé programy. To iste zrýchlil my doba vývoja. Ale poďme sa pozrieť, čo sa deje v reálnom svete. Nechaj ma ísť do tohto adresára v termináli. Tam je kontrola pravopisu. A všimnite si, ako stranou, a vy by ste mohli sa stretol tento problém v nastavení šesť alebo problém nastaviť sedem. Nemusíte striktne nutné koniec PHP súbory s príponami. php. Ak dáte čiaru ako ten prvý na samom vrchole, to je zvláštne linka syntaxe, ktorá v podstate znamená, že si program s názvom PHP a používať to, aby interpretovať tento súbor. Takže teraz nikto nevie, že Bežím PHP program. Môžem spustiť rovnako ako by to bolo niečo zostavené v C. Ale tu je to vec. V skutočnosti, poďme to urobiť znova. Dropbox/pset6 /. Tam je kontrola pravopisu. OK, 0,44 sekundy. To má rýchlejší tentoraz. Teraz poďme do verzie PHP. Pekné. Ale len pomyslite, ako veľa času Zachránil som v úradných hodinách. OK. Takže 3,59 sekundy, čo v skutočnosti neznie presné jeden. Ale to je preto, že dlhý príbeh krátky, keď tlačíte z obrovské množstvo vecí na obrazovke, ktoré sám spomaľuje veci dole. Čo to vlastne vzal v CPU Prístroj bol 3,59 sekundy, v kontrast na C, ktorý sa 0,44 sekúnd najnovšie. To je naozaj poradí veľkosť inak. Takže tam, kde je to, že cena ide? Prečo je to tak oveľa pomalší? Prečo PHP vykonávať tak zle? Danielle? DIVÁKOV: Vy ste naozaj použiť hash tabuľky. DAVID Malan: Ja som naozaj použiť hash tabuľky. Tak nejako som to urobil. Takže je to asociatívne pole. S najväčšou pravdepodobnosťou, ak ľudia v PHP sú naozaj šikovný, oni používali pod kapucňa aktuálne hash tabuľka implementovaná v niečo ako C alebo C + +. Ale. Jo. DIVÁKOV: [nepočuteľné]. DAVID Malan: Jo. Takže každý z funkcií som písal teraz - v skutočnosti, môžete povedať, že ešte raz trochu hlasnejšie? DIVÁKOV: Každá z funkcií, ktoré ste súčasťou má oveľa plnšie kapacita ako - DAVID Malan: Tak to je pravda. Je tu oveľa viac hlavou, že sme nie je naozaj vidieť, že sa zameria iba na dictionary.php, ktorý som napísal. Naopak, je tu celá tlmočník deje v pozadí. Naozaj, keď som bežal tohto programu je nebola spustená zostavené núl a jedničiek určený pre svoj procesor Intel. Skôr to bol spustený riadok po riadku PHP kód, ktorý vyzerá presne radi by sme zadali. A tak pri každom použití interpretovaný jazyk, môžete skutočne zaplatiť túto cenu. Bude to trvať nejaký čas na čítanie váš súbor zhora nadol, zľava vpravo, a potom vykonať každý zoradiť znova a znova. Teraz v skutočnosti, a to najmä na internete, môžete skutočne urýchliť tento proces ukladanie do medzipamäte výsledky PHP kód sa vykladá. A to dáva zmysel na webe, pretože Ak nemáte jeden používateľ podobného ma tu, ale 1000 alebo 10000 užívateľov, potom možno prvýkrát, kedy je súbor prístup je pomalé, ale potom je to oveľa rýchlejšie. Ale aj toto je opäť kompromis. A niečo ako údaje z výskumu nastavenie, alebo dokonca niečo ako veľké to bude nakoniec používatelia začínajú cítiť, že spomalenie. Takže v skratke, interpretované jazyky veľmi veľa v móde veľmi obľúbená, a úprimne povedané, sú pravdepodobne jazyky, by sa mali dostať k pri riešení problémov Po CS50. Ale uvedomí, ako veľmi ste naozaj brať ako samozrejmosť pod pokrievku naozaj tých niekoľko posledných týždňov hash tabuľky a stromy, a snaží sa, ktoré sa používajú v konečnom dôsledku k skutočne realizovať veci, ako je ľavá zátvorka, hranatá zátvorka, ktorú môžeme teraz vďačne brať za samozrejmosť. Takže poďme sa pozrieť teraz V tejto súvislosti web. A už som spomenul minule, že je tu banda superglobálnych v PHP, ktorý naozaj nie sú dôležité na príkazovom riadku. Sú viac relevantné v kontexte použitie PHP vo webovom kontexte. Takže PHP beží na webovom serveri, aby vytvárať veci, ako je HTML. A my sme sa pozrel na $ _GET a $ _POST a to je miesto, kde používatelia automaticky " vstup skončí jednoducho ak zadáte tvorí na súbor s príponou. php v na webe servera ako zariadenie. Ale pozrime sa krátko na $ A $ _SESSION _COOKIE. Laicky povedané, to, čo je ako cookie chápete to v kontexte pomocou web? DIVÁKOV: Súbor v počítači. DAVID Malan: Jo. Je to súbor v počítači užívateľa vysadené z nejakého webu ste náhodou navštíviť. Takže keď idete na Facebooku, keď idete na bankofamerica.com, keď idete na google.com, keď idete do takmer akejkoľvek internetové stránky na svete v týchto dňoch, vrátane cs50.net, je zasadený cookie na počítači, ktorý je buď hodnota uložená v pamäti RAM v počítača v pamäti prehliadača, alebo niekedy naozaj súbor uložený na pevnom disku. A čo je zvyčajne uložená v tomto súbore nie je vaše užívateľské meno, nie heslo, zvyčajne nie je niečo, citlivé, ak webovej stránky nie je tak dobre sa ich bezpečnosti, ale skôr to je veľký jedinečný identifikátor medzi ďalších vecí. Je to veľké náhodné číslo zasadil na vašom počítač, ale môžete myslieť, ako akýsi virtuálny ruky pečiatka ako z klub alebo nejaký zábavný park, ktorý umožňuje zamestnancovi, majitelia, ktoré služby, sa spomenúť si, kto ste. Takže v prípade, že veľké náhodné číslo ako 12345678, aj keď to je samozrejme nie príliš náhodné, myslím, že o tom, ako ručné pečiatka, že pri návšteve facebook.com prvýkrát, že pečiatka, že číslo na ruke. A potom, pretože hovoríte HTTP, vás je prehliadač, a pretože Facebook samozrejme hovorí rovnako ako web server, HTTP protokol hovorí, že kedykoľvek následne dostaví facebook.com, či už je to druhá neskôr o hodinu neskôr, aj ďalší deň, tak dlho, ako máte explicitne odhlásený, ktorý účinne je ako umývanie rúk. HTTP hovorí, že by ste mali prezentovať svoje odovzdať pečiatka Zakaždým, keď vrátiť sa k danej internetovej stránke. Čo Facebook potom robí, je, že pozrite sa na tej strane pečiatka a hovoria, ach, 123456789. Neviem, na prvý pohľad, že tento je David Malan v Cambridge, Massachusetts, ale môžu kontrolovať svoje databázy a hovoria, ach, človek na ktorého počítača sa zasadil 123456789 je David Malan z Cambridge, Štáte Massachusetts. Ukážme, že užívateľ potom jeho profil strana alebo jeho News Feed. Ale je tu problém, pokiaľ to je, ako web naozaj funguje. Poďme sa pozrieť na rýchly príklad. Poďme skutočne ísť povedať facebook.com. Ale skôr, než sme mohli ísť tam, nech ma ísť dopredu a otvoriť Chrome je Inšpektor tu dole. Pozrime sa na karte siete. A teraz poďme do toho a zadajte v https://facebook.com. A robím to tak, že nevidíme všetky tieto presmerovanie a odpadov čas pozerať sa cez tie. Dovoľte mi, aby som stlačte kláves Enter. Dobrá. Vidíme veľa žiadostí. Tam je Facebook. Je tu celá banda súborov. A tu, na mojej zmienky o Latencie poslednej dobe, to je Veľa požiadaviek HTTP. Ale prvý z nich je pravdepodobne najzaujímavejšie. Takže poďme prejdite sem, a Budem priblížiť v sekunde. To bude trochu neporiadok, ale poďme sa pozrieť. Facebook sa zaslaním Veľa vecí. Ale hej, zaujímavé. Sú výsadbu nie jeden, ale štyri ručné pečiatky na ruky tu. Set-cookie, Set-cookie, set-cookie, set-cookie. A existuje niekoľko funkcií tu. Všetky z nich spomenúť niektoré druh expirácie. A vyzerá to, že Facebook je dúfať, že pamätať si ma až do roku 2015. Tak to je pravdepodobne čas od ktorej Musím sa odhlásiť alebo sa budem len automaticky predpokladať, že som nevráti. Takže to je vlastne slušný množstvo času. A tam sú niektoré ďalšie čo sa deje tu. Táto cookie sa zdá byť násilne odstránené tým, že hovorí, že sa skončila v roku 1970 pred sušienky existoval. Takže prehliadač práve deje predpokladať, OK, to je ako umývanie rúk pečiatka. Ale teraz, keď môj prehliadač je následné žiadosti - nechaj ma ísť napred a to Znovu a znovu načítať. Teraz mi dovoľte prejdite späť do top žiadosť a ísť dole tu požiadať hlavičky. Všimnite si toto. Takže teraz som za ne hlavičky odpovede, ale všimnete, že hovorí, že záhlavie požiadaviek. A všimnite si, že môj prehliadač ako súčasť jeho žiadosť po tom, čo udrel znovu načítať je poslal aspoň nasledujúce informácie. Nezadané-cookie však cookie. Tak toto je riadok, hlavičky HTTP tak, hovoriť, kde môj prehliadač je druh z, bez toho aby som vedel, že predloženie moja ruka na Facebooku kontrole. Takže tieto súbory cookie môžu byť použiť potom na čo? Ak chcete si spomenúť, kto ste, alebo si spomenúť, ako koľkokrát ste tam boli, alebo naozaj niečo. Takže tu je counter.php. A dovoľte mi, aby som zväčšiť písmo. A zakaždým, keď som znovu načítajte túto stránku, oznámenia je to pamätať, koľkokrát Bol som tam. No, to nie je tak pôsobivé. Povedzme, zatvorte túto kartu, a teraz sa vráťme k http://localhost/counter.php. Ach, to je zaujímavé. To ešte si pamätal, aj keď som zavrel kartu. A úprimne povedané, keď zavriete prehliadač, ak by bola vykonaná správnym spôsobom, som mohol ešte pamätať, že tento užívateľ je ktorý on alebo ona bola prvýkrát, a len raz som sa ísť do ponuky Chrome, ktorý tu je tu, a prejdite na Histórie a kliknite na tlačidlo Vymazať údaje prehliadania, ako niektorí z vás môžu mať v minulých, len potom súbory cookie v skutočnosti sa v priebehu webe zmazané vývoj. Takže, ak pôjdeme - poďme zblízka gedit tu. A keď sme sa ísť do tohto súboru. Nechaj ma ísť do nášho vhosts / localhost / public, a nechaj ma to urobiť counter.php. Všimnite si, že to je dosť jednoduchý program. Je to celkom jednoduché webové stránky. Takže v hornej časti súboru je len komentár. Ale tu je nová linka, ktorá vám môže videli už v p-set sedem, session_start (). Toto je riadok PHP kódu, ktorý v podstate hovorí, webový server, make Uistite sa, že pečiatka rúk a urobiť Uistite sa, že kontrolu ručných pečiatok. To je všetko, čo vedenie robí, a to robí všetko tento proces pre nás. Potom všimnete Práve som dostal dve pobočky tu. Je-li čítač kľúč vo vnútri tejto špeciálny globálne premenná s názvom $ _SESSION Sa nachádza - inými slovami, v prípade, že je nejaká hodnota, že - poďme ju a uložiť ich do miestnej premennej s názvom $ counter. Else, poďme priradiť $ counter Predvolená hodnota 0. Tu je jeden aspekt PHP, ktorý je požehnaním i prekliatím. PHP je trochu nedbalý. Takže zatiaľ čo v C, čo by Rozsah počítadla boli buď tu, alebo tu? To by bola obmedzená na týchto zložených zátvoriek. Hádajte, čo? V PHP existuje aj mimo tie, zložené zátvorky, tu a tu, a tu a tu, a aj dole. Takže hovorím, to je požehnanie v tom zmysle, že nemusíte premýšľať, ako ťažké, ako sme to urobili pred niekoľkými týždňami. Ale je to tiež trochu prekliatie v tom, že bez ohľadu na to, kde môžete použiť premennú v PHP, aspoň v programe, ako je tento, je to globálne prístupné pre lepší alebo horší. Takže budete musieť mať na pamäti, že sa Vaše premenné nemusia byť definované. Možno ste ich definovali inde. Ale čo mám robiť nakoniec? Idem uložiť vo vnútri, že globálna premenná ako hodnota Počítadlo kľúč výsledok robí počítadlo plus 1. Takže je to len aritmetický že robí inkrementácia tohto pultu. A skutočnosť, že som ukladania, ktoré hodnota v roku je tu znamená v podstate aktualizovať databázu si uvedomiť, že používateľ 123456789 bola tu dvakrát. A keď som to zase nabudúce znovu načítať stránku, bude to kontrolovať moja ruka pečiatka a hovoria, ach, užívateľ 123456789 má teraz tu bol trikrát. A čo má PHP a podobné jazyky robia pre nás je, že sa zisťuje, ako a kde a ako dlho ukladať hodnoty v tejto špeciálnej superglobal. A to superglobal nabudúce navštívte stránky je trochu magicky Predvyplnenie, naplnené hodnotami, ktoré tam boli posledný krát ste navštívili, či bola druhá pred týždeň pred alebo v roku 2013 a my sme teraz hovorí zhruba do roku 2015. PHP a webový server starať zo všetkých, ktoré pre vás. DIVÁKOV: [nepočuteľné]. DAVID Malan: Premenné sú v PHP v podstate vždy globálnej, ak vás deklarovať vnútri funkcie, a potom sú miestne iba funkcie. Ale preto, že som nenapísal nejaký funkcie, ktoré sú teraz v zásade Globálne priebehu celého môjho súboru tu. DIVÁKOV: Existuje spôsob, ako tak, aby boli miestne? DAVID Malan: Je nejaká spôsob, ako je miestna? Iba tým, že balí ich do funkcií. Ktoré sa v poslednej verzii PHP, môžete to urobiť s anonymné funkcie. Ale o tom viac kontext JavaScript. Ale krátka odpoveď znie nie. Dlhšia odpoveď je áno. Pekný. Dobrý kvíz otázka. Dobrá. Tak konečne, stránka je sám o sebe vlastne celkom jednoduché. Všimnite si, že akonáhle som opustiť PHP režime vyvolanie že všetky tieto veci dole nižšie je len dostane slinu z raw do prehliadača. Čo je v poriadku, pretože chcem poslať užívateľ niektoré HTML, ale chcem dynamicky aktualizovať HTML. A jeden spôsob, ako to dosiahnuť, je radiť veľmi rýchlo klesnúť späť do PHP režim, použite zátvorka otáznik znamienko rovná sa, a potom výstupná hodnota počítadla. Alebo, ak to vyzerá trochu záhadné, to znamienko rovnosti je vlastne len niektoré syntaktický cukor pre tento printf ($ counter). Ale úprimne povedané, je to len trochu škaredý a trochu nepríjemné písať. Takže PHP veľmi pekne ponúka túto funkciu kde môžete len povedať, že viac stručne rovnakým spôsobom. Takže to, čo sa deje pod kapucňa? Poďme rýchlo pozrieť na sieti Záložka tu counter.php. A dovoľte mi ísť dopredu a prvý poďme vymazať súbory cookie. Poďme Vymazať údaje prehliadania od začiatku času. Teraz sa vráťme sem. Teraz sa poďme znova načítať stránku. A ja som zase na nule. Pretože moja ruka známka bola praná, Teraz si nový cookie. V skutočnosti, ak sa pozriem na sieťovej karte a pozrite sa na hlavičky odpovede, všimnite si, že prístroj posiela ma cookie, ktorého názov je trochu ľubovoľne, ale trochu rozumne, PHPSESSID. A to ma poslal to naozaj veľké náhodné číslo. Nie je to celá rada. Nie je to zas šestnástkovej. Je to nejaký druh alfanumerického reťazca, ale pravdepodobne je to náhodné. A to je ruka, pečiatku tak, aby hovoriť, že som na mysli. Zatiaľ keď som kliknite na tlačidlo znova a potom pozrite sa na tejto druhej linky na môj druhý žiadosť, všimnite si, že sa moja žiadosť Hlavičky sú PHPSESSID rovná to, nie je set-cookie, ale len cookie. A to je môj prehliadač je prezentácia z mojej ruky známky. Takže teraz ako ukážku, a porozprávame sa viac o tom v týždni alebo tak, ale akým spôsobom to, aby vás zraniteľné, váš Facebook účet zraniteľné, a iné takéto účty zraniteľné? DIVÁKOV: Ak niekto má svoje cookie. DAVID Malan: Jo, keď niekto má svoje cookie. Myslím naozaj, rovnako ako niektorí z vás Pravdepodobne ste sa pokúsili na ako klub alebo Zábavný park, ak sa pokúsite niečo takhle kopírovať pečiatka, aj keď späť na niekoho iného strane, a potom on alebo ona prezentuje ako vlastné, ak je to skutočne vyzerá identické, 123456789, potom web Server je zrejme len tak veriť, že užívateľ si. A to je skutočne základnou Hrozba kedykoľvek používať cookies pretože ak niekto len tak spoofs hovorí súbory cookie, obrázky, čo to je, a to buď skutočne skopírovaním pri pohľade na vašom počítači a je rád, OK. Dávidov Cookie je JJ3JIK a tak ďalej, a potom, že sú dosť bystrí na to vedieť, ako triediť manuálne Poslať že cookie z prehliadača alebo z Program píšu, by sa úplne prihlásiť do webovej stránky ako vy. Nie je to tak ťažké predstierať, že niekto iný, ak sa znovu p-set dva, ktorý predstavil čo? Divákov: kryptografia. DAVID Malan: málo trochu kryptografie. Jednoduché kryptografia, aspoň v štandardná verzia, ale crypto však. menej. Tak to dopadá, keď sa šifrovať všetky Tieto hlavičky pomocou niečoho, čo možno už vieme, známejší ako SSL, secure socket layer alebo https:// URL, potom sa všetky tieto veci sme boli pozrel sa na sú vlastne šifrované, čo znamená, že je to ako by ste nemôže čítať ručná pečiatka. Iba facebook.com môže, alebo google.com, alebo v tomto prípade, môže prístroj čítal, že ručná pečiatka. Tragicky aj keď, a znova, je to príliš vhodné s vecou NSA neskoro, i SSL je krehký. A je to vlastne nie je tak ťažké dokonca prasknúť, že šifrovanie. Ani nie tak tým, praskanie šifrovanie, ale tým, že napalm prehliadač na dešifrovanie údaje predčasne. Ale opäť budeme dráždiť vás sa, že onedlho. Pre teraz, len sa nebojte. Je to tragicky trochu pravda. Dobrá. Takže tam, kde to teraz nás opustil? Dobre, poďme na to. Poďme do toho a vziať rýchlo teaser, než sme si pauzu. A myslím, že sa budeme zdržiavať dlhšie dnes, ale budeme sa ponoriť do niečo úplne nového a sexy, čo bude povzbudiť chuť k jedlu ešte viac. Tak to je teaser. Takže SQL, začali sme hovoriť o niekedy tak krátko minule. Budete naozaj dostať svoje špinavé ruky s niektorými z nich v p-set sedem. A v Laicky povedané, to, čo robí SQL - S-Q-L - urobiť pre vás? Čo je to? Jo. DIVÁKOV: Poďme si prístupové údaje. DAVID Malan: Jo. Je to poďme prístupu k dátam v databáze. Structured Query Language. A to je v podstate programovací jazyk. K dispozícii sú funkcie tom, že nebudeme používať aj v triede. Ale môžete efektívne definovanie funkcií. Hovorí sa im uložené postupy v SQL. Ale budeme držať to celkom jednoduché a stačí ho použiť pre niektoré základné operácie ako je výber dát, vkladanie dát, aktualizácie dát a mazanie dát. A vy si naozaj myslíte, že databáza, ako SQL databáze, ako len je Microsoft Excel. Vzhľadom k tomu, SQL odkazuje na relačnej databázy, kde vzťah jednoducho znamená tabuľky. Riadky a stĺpce. Takže všetko, čo môžete dať v tabuľke ako je tento, alebo Google Docs, by ste mohli dať do SQL databázy vyhlásením tabuľky. Teraz, ako sa v skutočnosti prístup že informácie? No, s príkazmi alebo otázky, ako je tento. SELECT, INSERT, UPDATE a DELETE. A z veľkej časti, ktoré sú Štyri iba ingrediencie, ktoré budete potrebovať, aby niečo celkom silno v probléme set sedem. Teraz späť v deň, by ste v skutočnosti interakciu s databázou v čierna a biela okná terminálu na blikajúce výzva takto. A databázy sme beží na Prístroj sa nazýva MySQL, ktorá je zadarmo a open source databázový stroj. Ak ste Google a prečítajte si Wikipédie článok, budete vedieť, že názov je bit prechodu pre niektoré verzie Linuxu. Maria databázy je v skutočnosti vidlica tak hovoriť o MySQL. Dlhý príbeh krátky, Oracle kúpil MySQL. Oracle je to veľká firma. Ľudia boli obávajú, že by už zostávajú úplne ako open source, takže je to len kópia MySQL, ktorá je ešte voľný, stále open source, a inštalované v Fedora Linux v predvolenom nastavení. Ale to je trochu bolesti v krk, aby sa zoznámili s Databáza týmto spôsobom. Takže sme sa zahrnúť do CS50 spotrebiče slobodný open source nástroj s názvom phpMyAdmin. Len náhoda, že je to napísaný v PHP. Neexistuje žiadny zásadný Potrebujeme tu pre PHP. Ale to je len webový nástroj, ktorý sme stiahli zadarmo, inštalovaný v spotrebič, ktorý nám umožňuje mať grafické užívateľské rozhranie, ktoré sa preskúmať p-set sedem databáze pre vytvorenie novej databázy, povedať, pre vlastné konečné projektu, ak by ako je, a nakoniec vytvoriť dynamické webové stránky, ako CS50 financií ktoré umožňujú dáta dotazu a aktualizovať dáta dynamicky. Nebudete musieť použiť len jednoduchý textový súbor alebo CSV. Môžete dokonca použiť inteligentné databázy program, takže môžete spustiť viac sofistikované otázky, než len čítanie cez všetko lineárne. Tak napríklad, to je to, čo dávame si po vybalení z krabice pre p-set sedem. Toto je tabuľka s zrejme aspoň tri stĺpce, z ktorých jeden je užívateľské meno, z ktorých jeden je hash, a z ktorých druhý je ID. Ale zaujímavá vec, a len preto, aby podpichovať sa jednu myšlienku tu, užívateľské meno je pravdepodobne už unikátny, že jo? Myslím, že väčšinu akejkoľvek webovej stránky, ak Máte-užívateľské meno, tam nemôžu byť dva Caesars. Nemôže byť dva Malans. Nemôže byť dva jharvards. Jeho jedinečná. V opačnom prípade, že neviete, ktorá jharvard to vlastne je. Takže to, čo by mohlo byť motiváciou pre i s treťou stĺpec vľavo existuje tzv ID, ktorý vyzerá ako číslo, ktoré je podobne jedinečný? Je toho názoru, trochu redundantné sa mi na prvý pohľad. Prečo by mohlo byť presvedčivé, aby sa nielen unikátny užívateľské mená, ale tiež jedinečná čísla? DIVÁKOV: Mohli mať rovnaké heslo. DAVID Malan: Ľudia môžu mať rovnaké heslo, iste. To by mohlo úplne stalo. Ale ak majú túto jedinečnú užívateľské meno, som by mohol namietnuť, že nie je naozaj záležitosť, pretože keby zadajte svoje užívateľské meno, len musím skontrolovať ich heslo, ich hash z nich. Prečo inak? DIVÁKOV: Rýchlejšie vyhľadávanie. DAVID Malan: Rýchlejšie vyhľadávanie. Prečo? DIVÁKOV: ID je len jeden. DAVID Malan: ID je len jeden znak, alebo presnejšie povedané, je to číslo, takže je to asi 32 bitov alebo niečo také. Vzhľadom k tomu, užívateľské meno, zrejme Jason Hirschhorn je tam je trochu smiešne dlhý, a bude to sa mi oveľa viac času na reťazec porovnať H-I-R-S-C-H-H-O-R-N, a možno / 0, alebo niečo také, aby vyhľadať Jasona, ako protiľahlý k len povedal mi dať užívateľské číslo dva. To je 32 bitov. Je to jediný INT, že Máte k porovnanie. A vskutku, to je presne dôvod, prečo databázy majú tendenciu priradiť jedinečné identifikátory, aby riadky v nich. A teraz, čo ostatné dátové typy sú tam Okrem INT a zrejme reťazca, ako je tento? No, aby som bol vhodnejší, SQL databáz, ako je MySQL, majú CHAR poľa. A CHAR trochu zavádzajúcim nie je jediný CHAR. CHAR poľa v databáze MySQL je jeden alebo viac znakov, ale je to pevný počet znakov. Tak napríklad, keď som prejsť na phpMyAdmin, ako ste už možno, alebo čoskoro bude problém nastaviť sedem, a ja idem do mojej databázy, a len tak pre zábavu, poďme vytvoriť novú tabuľku s názvom test s iba dvoma stĺpmi. Budem kliknite na tlačidlo Prejsť. A to sa stane pomerne známe, najmä ak si pohrať asi na vlastnú päsť. Tu by som mohol zadať ID vytvoriť nová tabuľka typu INT. Ale tu som mohol zadať užívateľské meno znova, že skoršie tabuľky. A všimnite si, mám veľa typov z čoho vyberať. A to aj preto phpMyAdmin je celkom pekný. Je to druh self-učenie v tom, že môže len tak bod a kliknite na tlačidlo, a pozrite sa na rozbaľovacích ponúk, a vyvodiť z že to, čo sily SQL vám dáva. A skutočne, keď sa rozhodnem CHAR, som potom je potrebné zadať dĺžku, alebo ako mnoho hodnôt, koľko znakov. Takže veľmi bežné hodnoty, sú veci ako 255, ale to je trochu dlho. Bežne je osem na užívateľské meno. Ale to je trochu malá v týchto dňoch. Tak to je rozhodnutie dizajnu. Je to maximálne 8 znakov, 32, 255, 1000? Je to naozaj len na vás. Ale CHAR pole pevné číslo. Tak si vyberte príliš málo a ste trochu skrutkované, ak chcete dlhší meno. Vyberte si príliš veľa, a to, čo je nevýhoda? DIVÁKOV: [nepočuteľné]. DAVID Malan: Je to plytvanie. Rovnako ako v C, ak máte väčší kus pamäti, ako budete potrebovať, budete len strácaš čas a plytváte diskovým priestorom. Tak ako alternatíva, existuje VARCHAR, ktorý rieši tento problém tým, že liečenie dĺžku nie ako pevnou dĺžkou, ale ako maximálnu dĺžku, a pomocou premenlivý počet znakov, ktorý potom inklinuje používať iba ako mnoho pripáli ako vy skutočne potrebujú. To znie skvele. Prečo by sme sa zbaviť CHAR typ dát a potom? Čo by mohlo byť nevýhodou pomocou VARCHARs, ktorý znie ako by to bolo pekné vyhrať? Jo? DIVÁKOV: [nepočuteľné]. DAVID Malan: OK, dobre. Takže ak všetky vaše dáta je rovnaký dĺžka, čo je to starosť? DIVÁKOV: Vzhľadom k tomu, strácate údaje podľa nich všetko hovoriť. DAVID Malan: Takže ak všetky vaše dáta je rovnakej dĺžky, aj keď ja by som tvrdiť, že určenie maximálnu dĺžku na VARCHAR sa nijako nelíši od určenia pevnej dĺžky na CHAR ak Viete, že číslo v predstihu. Ale tam je naozaj, a ja budem trochu extrakt z tejto odpovede realitu že je tu ešte max, ktoré by mohli byť nepríjemné, najmä ak sa narazíte na meno osoby, ktorá je neobvykle dlho, že nie predvídať. A je to tiež o niečo menej efektívne skutočne hľadať na VARCHARs ako na rozdiel od vyhľadávacích znakov, a to najmä na dlhých stolov, ktoré majú veľa a veľké množstvo dát. Takže aj tu, tematické je opäť no jasná voľba. Takže stačí, aby vám zmysel pre iné dátové typy, ktoré by mohli byť zaujímavé a to buď pre p-set sedem alebo budúcnosť, je tu INT. K dispozícii je BIGINT, ktoré je ako long long. To inklinuje byť 64 bitov. K dispozícii je DECIMAL, ktoré uvidíte v Problém set, čo je oveľa čistič odpovedí na problémy, sa sa stretol s plavákom a plávajúce bod nepresnosti. A potom je tu DATETIME. Tam je doslova dátový typ, ktorý má vyzerať ako rok, mesiac, deň, a hodiny, minúty a sekundy. Ale SQL databázy tiež veci, zavoláme indexy. A index je niečo, čo zadajte pri vytváraní tabuľky aby vyhľadávanie a ďalšie operácie účinnejšie. Konkrétne, je tu niečo, čo nazýva primárny index, ktorý by mohol deklarovať takto. Urobili sme to za vás Užívatelia stôl dáme vám. Ale všimnite keby som ručne obnovovať Tabuľka používatelia tu dáva je meno užívateľa. Už som je uvedené ID. Aj podľa INT. Špecifikované som užívateľské meno s maximálne 32 znakov. Ale ak budeme držať rolovanie v tomto pomerne široké okno, upozornenie, že je veľa ďalších vecí, ktoré som si určíte. Jeden, môžem nastaviť atribúty ako, vieš čo, to INT by mala byť unsigned. Nechcem záporné čísla, tak sa poďme robiť to unsigned. Null nie je relevantná, pretože Ja chcem, aby každý užívateľ má jedinečné číslo. Nechcem, aby to bolo null. Ale to je zaujímavé. Môžem určiť, že ID je buď primárny kľúč tejto databázy, alebo je to Unikátny, alebo je to indexovaný, alebo celý text. Takže pre dnešné účely, dlhý príbeh Stručne povedané, primárna znamená, že musí byť ako koncepčne a technicky pole, ktoré sa používajú pre jednoznačnú identifikáciu užívateľa. Takže keď sa pozrieme do používateľov, je to druh o sľubu je vyhľadať väčšinou že jedinečný identifikátor. A databázy zabezpečí, že ak majú užívateľské číslo 3, nemôžete fyzicky vložiť ďalšie užívateľa s rovnakým číslom 3. Databáza bude jednoducho odmietne uložte zmeny. Čo je dobrá vec, pretože môžete chrániť pred seba. ja Alternatívne, pre užívateľské meno. Takže druhá rada, vyvolanie, je užívateľské meno poľa. Takže druhý riadok je tu užívateľské meno, ako sme sa tam ďaleko vľavo. Takže čo iného by som mohol chcieť špecifikovať? Nesmiem, podľa SQL, špecifikovať dva primárne kľúče. môžete určiť spoločný kľúč, kde sa pozrite sa na oboch poliach, ale nemôžu individuálne byť primárne kľúče. Tak to je vylúčené. Tak ktorý ja by som mohol chcieť vybrať? No, UNIQUE je podobný ducha primárny kľúč, kde zadáte tento poľa musí byť jedinečný, ale je to nebude jedno Ja používam po celú dobu. A my nebudeme používať tohle všetko čas akého dôvodu znova? Je to pomalší, ak potenciálne je to dlhý užívateľské meno. Je to len strata času. INDEX medzitým uvádza, že je to nebude jedinečná, ale rád by som vám umožní pracovať svoje kúzlo pod kapucňa, aby bol rýchlejší pre mňa hľadať v tejto oblasti. Takže to asi nie je relevantná. Pre užívateľským menom, ja tvrdím, že UNIKÁTNY je dobrá odpoveď. Ale predpokladajme, že sme viac užívateľov zaujímavejšie než len používateľské mená, hashe, a identifikačné čísla. Čo keby sme dali ľuďom celé mená? Čo keby sme im dali adresy a ďalšie údaje o nich? No, ak zadáte, že stĺpec Databáza je indexovaná, to znamená, že MySQL alebo Oracle, alebo čokoľvek databázy , Ktorú používate, by mali pracovať svoje kúzlo a použiť nejaký maškarný dát štruktúra ako strom, alebo trie, alebo hash tabuľky, alebo niečo na zabezpečenie že pri hľadaní dát pomocou vyberte v danom poli - chcel mi ukázať všetkým, že žije na Oxford Street. Dotaz takhle. Ak ste určili vopred, že Chcete-index v tejto oblasti, vyhľadávanie bude oveľa, oveľa rýchlejšie. Ak neurčíte index, najlepšie môžete urobiť, je lineárne vyhľadávanie, ak to nie je zoradená. Ale ak zadáte INDEX inteligentný ľudia, ktorí sa do databázy - ľudia ako vy, ktorí teraz vedia stromy a pokusy a hash tabuľky - automaticky vytvoriť také dátové štruktúra v pamäti RAM, aby sa ubezpečil, že tieto prehliadky sú oveľa rýchlejšie. TELE zatiaľ je podobný v duchu, ale umožňuje robiť zástupné vyhľadávanie, ako mi ukázal všetkým, že žije v uliciach, ktoré začínajú písmeno O z akéhokoľvek dôvodu. Môžete to urobiť zástupné vyhľadávanie páči. Alebo, čo je závažné veci, ako výstavy mi každý, kto má slovo - Ukáž mi všetky, ktorých názov začína zvláštnym listom. Môžete vyhľadávať kľúčové slová týmto spôsobom. Dobrá. Takže, dizajn príležitosti tam potenciálne. Tam sú iní, že budem mávať rukami na. Ukazuje sa, že môžete mať rôzne ukladacie motory. A to je viac, než potrebujeme tajomný Určite na problém nastaviť sedem. V predvolenom nastavení je vy používate niečo, čo nazýva InnoDB. Uvidíte zmienka o tomto niekde v phpMyAdmin je rozhranie s najväčšou pravdepodobnosťou. Ale viem, že existujú aj iné konštrukcie rozhodnutia, ktoré by mohli byť záujem prísť záverečných prác, ak urobíte niečo webový. Ale poďme na to. Poďme do toho a dať to na obrazovke ako ukážku pre príbeh zahŕňajúce ťa, spolubývajúci a pohár mlieka. Poďme sa dve minúty alebo tak nejako zlomiť tu. A ak môžete držať okolo, poďme späť vyzerať trochu viac na SQL a potom trochu JavaScript s p-set osem na mysli. Dobrá. Takže, poďme si myslieť rohový prípad, ktorý môže veľmi ľahko vzniknúť v súvislosti s pomocou databázy, alebo úprimne povedané, aj za použitia reálnych vecí ako bankomaty získať peniaze. Tak tu je to chladnička. Predpokladajme, že máte taky v na koľaji alebo váš dom. A máš jednu spolubývajúci, a obe sa vám páči mlieko pre inštanciu. Takže sa vrátiš domov z triedy jeden deň. On alebo ona ešte nie je staré. Otvorte chladničku. Naozaj chceš veľký pohár mlieka. Nie je mlieko. Takže to, čo robíte? Zatvorte chladničku. Vezmete si svoje kľúče. Môžete ísť von na námestí. A vy ste sa do fronty na CVS na tie, samoobslužnom pokladničnom veci, ktoré vždy trvať dlhšie, než v skutočnosti s pokladničné. Tak či onak. Takže medzitým dot dot dot, vaše spolubývajúci príde domov a on alebo ona Podobne má túžbu pre trochu mlieka. Takže on alebo ona otvorí chladničku, vyzerá vnútri a oh, sakra. Žiadne mlieko. Takže on alebo ona hlavy von, stane sa ísť s ostatnými CVS, ktorý bol len blok preč z nejakého dôvodu, a to ani sa dostane do súladu kúpiť nejaké mlieko. Medzitým, prídete domov, alebo príde domov, a čo budete mať v konečnom dôsledku? Dvakrát toľko mlieka. Ale nemáte naozaj páči mlieko, že veľa. Takže teraz máte toľko mlieka, že teraz jeden z nich je jednoducho ísť kyslé nakoniec. Tak to je naozaj zlý problém. Je to tak? Tak čo sa stalo? Takže v podstate, to je druh z príkladu smiešne. Ale pod pokrievku, čo sme mali stáť, tu je oba kontrolované stav nejakého kusu pamäť, chladnička. Obaja si skontrolujete stav niektoré premenné,. Obaja ste došli k záveru ktorý potom konal. Ale bohužiaľ, keď váš spolubývajúci bol v obchode, stav, ktorý premenná zmení, on alebo ona sa vrátila a teraz chce zmeniť stav, ale to už bolo zmenené na ňom alebo nej. A samozrejme, že on alebo ona nemá šiel do obchodu, keby vedeli, že ste už na ceste. Takže v reálnom svete, ako si mohol sa tomuto problému vyhnúť, za predpokladu, že máte chladničky, máte spolubývajúci, a vlastne radi mlieko? Divákov: Komunikácia. DAVID Malan: Komunikácia. OK. Ale ako môžete komunikovať? DIVÁKOV: Nechajte poznámku. DAVID Malan: Zanechať odkaz, že jo? Vždy nechajte poznámku, pre fanúšikovia prehliadky. Dobre, takže vždy zanechať odkaz, alebo dať naozaj ako visiaci zámok, alebo tak niečo na chladničku, ktorá udržuje vaše spolubývajúci z kontroly stavu táto premenná. A teraz, prečo by to mohlo byť relevantné k problém nastaviť sedem, alebo do bankomatov. No, predstavte si svet, v bankomate, kde by ste mali byť schopní ísť až do bankomatu stroje tu, a ďalšie tu ATM. A to sa stáva docela často. A predpokladajme, že mal dve ATM karty, ktoré je možné získať. A sa prihlásiť do oboch strojoch účinne súčasne, dúfajme, že zatiaľ čo nikto nepozerá. A potom zadáte PIN zhruba súčasne. A potom robíte dotaz bilancie vidieť, koľko peňazí máte. A povedzme, že máte 100 dolárov vľavo na vašom účte. Takže v podstate súčasne, môžete povedal jeden, nula, nula, zadajte. A dúfajme, že sa vrátiť nejaké peniaze. Ale koľko peňazí môžete dostať späť? Teraz počítača na konci dňa, najmä keď hovoríte servery, nemusí nutne robiť veci, v poradí, ktoré sa očakáva. Takže predpokladať, čo sa stane, pretože bez ohľadu na sieť rýchlosť otázky tam sú, alebo problémy CPU existujú, alebo niečo také, predpokladám, že Prvý bankomat skontroluje rovnováhu a vidí, oh, má táto osoba 100 dolárov. Ale potom dostane roztržitý, pretože možno zálohovanie sa deje, a tak je to spomaľuje. Alebo snáď pri kontrole, siete Pripojenie mám trochu pomalší, pretože to sa jednoducho stáva. Sú to fyzické zariadenie. Tak zatiaľ, druhý bankomat je pýta rovnakú otázku. Koľko peňazí sa David má? 100 dolárov je odpoveď. Ale pretože prvý bankomat doteraz nie je správa odoslaná odpočítať $ 100, a to ako Bankomaty sú kontrolované trezoru banky, vidieť, že je to 100 dolárov tam, a teraz Oba stroje sú potenciálne ísť vypľuť odpoveď. Teraz, to je skvelé pre vás v určitom zmysle či to, čo banka robí nakoniec je zmeniť výšku mínus 100 o nastavenie premennej rovná vašej bankový účet rovná 0, na rozdiel od robiť mínus 100.. Teraz, v najhoršom prípade pre banku - alebo v najlepšom pre banku, zatiaľ, dávajú 200 dolárov, a váš bankový účet teraz ukazuje negatívny 100 dolárov, čo naozaj nie je prínosom pre vás vôbec. Ale ide o to, že tento závod Podmienkou pre dvoch spolubývajúcich dostať mlieko, alebo pre dva bankomaty, ktorí sa snažia získať hotovosť a zmeniť stav klenby súčasne existujú nejaké keď budete mať databázu. Teraz v probléme nastaviť sedem táto otázka vyvstáva v tom zmysle, že ak si kúpite Podiel Facebooku skladom, a potom na inštancie môžete kúpiť druhý diel Facebook skladom, budete musieť vykonať rozhodnutie ako programátor. Aby bolo možné rozhodnúť, ako aktualizovať databázy, kurzy sa budete má jeden riadok pre túto populáciu, a to je jeden spôsob, ako to urobiť. A budeš mať jednu akciu FB, čo je ich burzový symbol Pre túto užívateľské meno, alebo tohto používateľa ID, jedinečný identifikátor. Ale rovnaký príbeh sa môže stať tu. Pokiaľ si vyberiete v SQL, ako uvidíte v probléme nastaviť sedem, keď vidíte, oh, David má jeden akcií Facebook skladom. Dovoľte mi, aby som sa zmeniť to byť dve akcie, preto, že chce kúpiť Druhý podiel. Ale predpokladajme, že David vlastne mal dvoch okna prehliadača otvorte, alebo predpokladať, že je to spoločný účet s dvoma manželmi, a obaja sa snažia plniť rovnaká operácia, tam taky, existuje potenciál pre rozhodnutie bolo vykonaná na základe predchádzajúceho stav sveta - účet má jednu share - a obaja ľudia, alebo oba servery, teraz skúste povedať, zvýšiť ju na dva podiely. Ale v tomto prípade, možno ste nabitá mi peniaze na oboch akcií, ale zvýši len raz. Takže v skratke, zásadný problém tu, rovnako ako u vtipu o odchode Upozorňujeme, alebo uvedenie visiaci zámok na ňom, je ak dvaja ľudia, alebo dva závity - myslíte, že späť do nuly - môžete skontrolovať stav nejakej premennej a potom skúste zmeniť túto premennú, ale tieto dve veci sa nedejú na Zároveň ale môže dostať prerušený ostatné, čo sa deje, údaje môže dostať do veľmi podivné stavu. A môžete využiť, alebo môžete trpieť v zmysle peňažného príklade. Takže problém nastaviť sedem, my vám tento jeden riadok kódu, ktorý dlhé Stručne povedané, tento problém rieši problém v MySQL. Jedná sa o veľmi dlhé inštrukcie, ktorá nie je ešte zmestí do jedného riadku na screen tu zabezpečuje, že váš prevádzku je to, čo sa hovorí atómová. To všetko sa deje naraz, alebo to nestane vôbec. Jedná sa o veľmi dlhú frázu nemožno sa preruší čiastočne. A to, čo robí, je doslova to, čo hovorí. Vložiť do nejakej tabuľky nasledujúce tri polia tieto špecifické hodnoty, ale duplicitné kľúč, nerobia vložku. Vykonajte aktualizáciu. Takže je to ako robiť SELECT a INSERT tak povediac v rovnakom čase. A čo je kľúčom, ktorý je pravdepodobne sú odvolával sa na tu? Ukazuje sa, a budete vidieť v problém nastaviť sedem je spec, pretože sme tam vyhlásila, že je jedinečný kľúč Na tomto stole tak, aby nebolo nemôžete mať viac riadkov pre rovnakého užívateľa s Rovnaký Penny Sklad symbol - v tomto príklade tu, DVN.V je hlúpe penny zásob, ktoré sme pozri v spec. Pretože sme vyhlásil, že je jedinečný, To znamená, že ak pokuse o vloženie duplicitné riadok, ste miesto bude aktualizovať, bez toho, aby niekto má šancu zmeniť stav sveta jeden. Takže v skratke, čo zaisťuje veci sú atomické. Všeobecnejšie však databázy ako je MySQL - a nemusíte túto funkciu pre p-set sedem, ale majte to na pamäti budúcnosť - podporu, čo sa nazýva transakcie, kde si môžete povedať, START TRANSACTION doslova. Potom môžete spustiť dva SQL príkazy. A SQL príkaz, ako uvidíte v p-set sedem, vyzerá trochu niečo také. Aktualizovať tabuľku s názvom účtu. Nastavte vyváženie stĺpec rovnajúcu sa čo Stĺpec Zostatok v súčasnosti je mínus 1000, kde je číslo, na číslo účtu, ako je užívateľské meno, sa rovná 2 a aktualizovať Účet dot dot dot. Takže laicky povedané, čo majú tieto dve otázky Zdá sa, že robil v skutočný svet zmysel pre bankovníctvo? DIVÁKOV: Prenos k úsporám. DAVID Malan: Presne tak. Prevodom peňažných prostriedkov z účtu na druhý. A to je ďalší príklad, kde sa Naozaj chcete tieto dve veci, ktoré sa stalo alebo nestane. Nechcete niečo dostať do prostredný z nich a potenciálne pokaziť matematika, alebo pokaziť, koľko peňazí máte, alebo koľko Peniaze banka. Takže to, čo je naozaj pekné o transakciách v MySQL je to, že, a databázy všeobecnejšie, je to, že a chytrí ľudia, ktorí si realizované Tieto funkcie zistiť, ako uisti, že obe tieto veci sa stalo alebo vôbec nie. A ak ste naozaj túžila, aby sa webové stránky, ktoré ich používajú ľudia na kampus, ľudia v reálnom svete, robiť niečo vo spúšťacie slova zmysle, to sú druhy rozhodnutie o návrhu, že byť stále tak dôležité. V opačnom prípade začnete strácať dáta stratiť používateľa, alebo v najhoršom prípade, ako Videli sme tu, prípadne prísť o peniaze. Takže znova, o tom viac v probléme nastavení sedem, a tiež možno pre niektoré Ste v záverečných prác. Takže zmeňme ten obraz sme mali Pred chvíľou práve jedna cesta. Dovoľte mi teda skutočne vidieť, či môžem - Nie, je to preč, že. Tu to je. Tak toto je miesto, kde sme opustili minule. A ukázalo sa, že budeme prehadzovať ešte jedna vec, do mixu tu - jazyka JavaScript s názvom. Takže JavaScript zodpovedá skutočne do tohto kusu - a ja som celkom dostatok miesta, takže to nie je teraz v mierke. OK, to je naozaj úbohé. OK, tak je to JavaScript. Dobrá. Som naozaj robí to medvediu službu. Dobrá. Takže JavaScript je ďalší programovací jazyk, a naša posledná, či to pomôže uistiť, že to nie je o mnoho viac z požiarnych hydrantov tu. Takže JavaScript je interpretovaný jazyk, čo znamená, že nepotrebujete skompilovať do núl a jednotiek. Stačí spustiť ho. Ale to, čo je zásadne odlišná s JavaScript je zvyčajne, že nespúšťajte ju na vašom webovom serveri. To už ani nemôže spustiť v Prístroj sám o sebe. Skôr, dostane stiahne užívateľom cez HTTP do svojho prehliadača - Chrome, Safari, Internet Explorer, Firefox, čokoľvek - a je to prehliadač, ktorý vykonáva toto najmä programovací jazyk. Takže aby bolo jasno, PHP bolo doteraz vykonáva buď na príkazovom riadku v Naše čierne a biele okno, na serveri ako zariadenie, počítačové ako zariadenie, alebo to bolo vykonaný webový server beží na počítači. Ale téma je, že PHP doteraz bol vykonaný na strane servera, takže používateľ a prehliadač užívateľa nikdy nevidí riadok kódu PHP. V skutočnosti, ak ste niekedy otvoriť prehliadač vaše webové stránky alebo iný a vy skutočne vidieť PHP kód v okne, niekto posral. Vzhľadom k tomu, že to nemá byť poslaný do prehliadača priamo. Malo by to byť vykonané a obrátil do niečoho ako HTML. Ale JavaScript je vo svojej podstate opak. Je určený pre beh typicky vnútri z užívateľovho okna prehliadača. A aké druhy webových stránok používať JavaScript potom v týchto dňoch? Ako doslova každú obľúbené webové stránky. Každej webovej stránky, ktoré ste pravdepodobne používať JavaScript pre každodenné použitie Najjednoduchšie a dokonca sexy vlastnosti. Takže niečo ako Facebook Chat ak používate to. Ako to vlastne funguje? No tak ďaleko, všetci, čo sme kedy urobiť s HTML a PHP sa predpokladá, že môžete vytiahnuť URL, a stlačte klávesu Enter, a vidíte nejaký obsah HTML. A kliknete na odkaz, ktorý mení URL, zmení stránku a načíta nejaký nový obsah. Kliknite na ďalšie adresy URL alebo odoslať formulár, musíte sa bleskurýchlo na inú stránku a Vidíte nejaký nový obsah. Ale používať niečo ako Facebook Chat, alebo Gchat alebo Google Maps, zriedka sa celá stránka osviežiť tak, že uvidíte bielu obrazovku okamih a potom nový obsah. Skôr, webové stránky sú dnes dynamicky stále znovu aktualizovaný a znova a znova všetko nejako zo zákulisia. A ukázalo sa, že keď idú na niečo ako Facebook, alebo Gchat, alebo Gmail a aktualizácie stránok automaticky, bez prekládky Celá obrazovka, čo sa stalo, je, že Váš prehliadač má z trochu tajne ďalšie požiadavky HTTP - nie celých webových stránok, ale len pre malé kúsky dát, ako sú rýchle správy, že váš priateľ práve poslal vás, alebo aktualizáciu stavu, ktorý niekto, alebo tweet poslal že niekto poslal. Je to proste robiť malé požiadavky na dát, a potom pomocou JavaScriptu, tento programovací jazyk, zmeniť to, čo webová stránka vyzerá bez Server pomáhajú, bez servera generovanie tento HTML. Takže v skratke, JavaScript môže byť použitý a potom nielen načítať nové dáta z servera bez prekládky celok stránky alebo odoslanie formulára. To môže byť tiež použitý k zmene tzv DOM - Document Object Model - ktorý je len fantázia spôsob, ako hovorí strom HTML že sme videli minule. Takže uistiť, JavaScript je syntakticky tak podobný C i Nie je hlavné funkcie. Stačí začať písať kód a to bude vykonaný, alebo vykladať správne. Podmienky budú vyzerať takto. Sa nijako nelíši od C alebo PHP na to príde. Booleovské výrazy alebo-ed spolu bude vyzerať takto. Anded spolu vyzerať takto. Spínače bude vyzerať takto. Pre slučky bude vyzerať takto. Kým slučky bude vyzerať takto. Do while bude vyzerať takto. To je nové. Takže JavaScript nemá s foreach postaviť per sa, ale tento konštrukt pre variabilné aj v poli, a aj v tomto Prípad sa hodnota indexu. Takže je to trochu odlišné od foreach, ale nové verzie JavaScript je coming out po celú dobu, takže aj táto funkcia jazyka sa vyvíjajú. A ako stranou, JavaScript týchto dňoch môže byť tiež použitý na serveri, rovnako ako PHP pomocou rámca s názvom Node.js. Jeden z CS50 je TFs, Kevin, viedlo seminár o Node.js, že je k dispozícii na adrese cs50.net/seminars. Takže ak ste zvedaví, viem, že vám možno použiť na strane servera, ako to dobre, ale to je pomerne nedávny trend, ale mocný na to. To je trochu iný. To je pole v JavaScriptu. A čo udrie vás, ako rôzne v porovnaní s C alebo PHP? Existuje niekoľko rýchlych príbehov môžeme povedať tu. Čo chýba v porovnaní s PHP? DIVÁKOV: [nepočuteľné]. DAVID Malan: Áno? Ospravedlňujeme sa, ešte raz? DIVÁKOV: Nie je vyhlásenie typ premennej. DAVID Malan: Nie sme vyhlásenie typ premennej. Takže vlastne celkom ako PHP, nie sme uvedie typy tejto premennej. Skôr sme viac druhovo hovorí var pre premenné. Nemáme PHP obťažovanie znak dolára, čo pri únavné typ, to aby sa viac zrejmé, že niečo, čo je variabilný. Kým tu, sme trochu späť do C je prístup len o volanie premenná názvom chceme dať to, ako čísla. A tiež ako PHP, máme hranaté zátvorky pre hodnoty vnútri tohto poľa. Takže premenné v JavaScripte aj môže vyzerať napríklad takto. Všimnite si, to je reťazec s názvom s, ale rovnako máme neurčené že je to reťazec. Tu však je funkcia, ktorá nie je existujú v presne rovnakým spôsobom v PHP, ale trochu podobne. Toto je objekt v JavaScriptu. A objekty sú trochu Swiss Army Nôž na dátové štruktúry v tom, že možno použiť pre ľubovoľný počet vecí. Tu, napríklad, budeme deklarovať premenná s názvom citácie. Typ tejto premennej je objekt. Môžete myslieť na to ako C struct že má kľúče a hodnoty. Symbol je kľúč. FB je hodnota, zrejme symbol stock. Čiarka. Cena je ďalším kľúčovým, a jeho hodnota je zrejme s plávajúcou desatinnou čiarkou, alebo číslo všeobecnejšie v JavaScript, na 49,26 dolárov. Takže PHP nemá - sme nevideli v PHP objekty úplne takto, ale my sme vidieť analógové, ktorý bol, čo? DIVÁKOV: [nepočuteľné]. DAVID Malan: Asociatívne pole. Takže zatiaľ čo PHP má asociatívne polia ktorého syntax je niekedy mierne tak rôzne - sme videli hranaté zátvorky. Videli sme podivné šípky symboly. JavaScript musí objektov, ale je to predovšetkým sémantické rozdiely a iný synonymom pre túto chvíľu. Avšak, ako stranou, PHP tiež objekty, a to spôsobom, ktorý Java a ďalšie jazyky majú objekty objektovo orientované programovanie. Ale budeme používať to len Pre dátové typy pre teraz. Objekty a asociatívne pole. To by sa dalo robiť, že trochu jasnejšie. Tu je dôvod, prečo je užitočný objekt. Ak chcete deklarovať študenta, ako Zamyla, môžeme skutočne zapouzdřit tak povediac vo vnútri, ktoré objekt pomocou zložených zátvoriek, rovnako ako pred celým zväzkom kľúčov a hodnoty tu. Máme ID, dom, a názov Zamyla, nasleduje bodkočiarka ako zvyčajne na konci. Tu dole tiež, čo je o niečo odlišné, ale aj veľmi silný v týchto dňoch. Tu je pole, a ja viem, že preto, tam je hranatá zátvorka up Horná a hranatá zátvorka v spodnej časti. A to je pole, aké dáta napíšte zrejme v JavaScripte? To je rad z nich vyzerá ako tri objekty. A ja viem, že je to len objekt pretože zložených zátvoriek. A všimnite si, že je otvorený zložená zátvorka, niektoré veci, blízko zložená zátvorka, čiarka, potom ešte viac, čiarka, a potom ešte viac. Tak to je tri argumenty oddelené dvoma čiarkami. Tak toto je pole z troch objektov. A každý z týchto objektov, sa zdá, že je študent alebo zamestnancom niektorých triedenie, každý s ID, dom, a meno. Ale ja som to nazval niečo tzv JSON - JavaScript Object Notation. A to je formát dát, ktorý skutočne Je to veľmi populárny a vo móda v týchto dňoch, že ak píšete aplikácie, ktorá používa Facebook API, Twitter API, naozaj takmer akékoľvek API tam v týchto dňoch, vrátane niektorých CS50 vlastné, Údaje sa vrátiš nie je old school formát CSV. Vzhľadom k tomu, že odvolanie CSV je veľmi jednoduchá. Je to len stĺpce oddelené čiarkou. JSON dát vám dáva ďalšie metadáta. Združuje kľúč s každou hodnotou, aby nemajú len predpokladať, že nultý stĺpec je jedna hodnota, stĺpec z nich je iný, stĺpec dve ďalšie. Všetko, čo sa v objekte JSON tu je niečo self-popisovať, pretože každý jedným z mien v tomto súbore má doslova meno pred ním ako reťazec v úvodzovkách. Takže poďme sa pozrieť na Pár príkladov tu. Nechaj ma ísť do prístroja. A nechaj ma ísť do našej vhost adresár na verejnosti. A dovoľte mi ísť do JavaScript adresár. A poďme do toho a otvoriť dom-0.html, kde DOM jednoducho znamená, Document Object Model. Je to strom, veci, na ktoré Som sa zmienil už skôr. A dovoľte mi navrhnúť nasledujúce. Tu je webová stránka, ktorej Telo je pomerne jednoduchý. Tak tu sa na dne, Všimol som si formu. Už sme videli tie. To má dva vstupy, z ktorých jeden má ID mená, z ktorých jeden je typu predložiť, a prvý niečí typ textu. Takže to vlastne znie celkom jednoduché. Poďme sem. Vráťme sa na túto stránku tu. Poďme na localhost, a ísť do náš adresár JavaScript, a ísť do dom-0, a tu máme tento formulár. Tak to je zrejme všetko Táto stránka nemá. Má názov poľa, sa tlačidlo Odoslať. Ale ja nebudem používať PHP tu. Budem robiť všetko strane klienta tak povediac v JavaScripte takto. Všimnite si, že som sa naozaj dostal meno Pole tohto vstupu jedinečný identifikátor, ktorý bude skutočne daj mi nejaký čas na chvíľu. A všimnite si, čo som predstavil ďalší tag v hlave mojej webovej stránky,  tag. Takže je to v tomto zmysle, že JavaScript je programovací jazyk na strane klienta. V tomto prípade, rovnako ako CSS, som dal je priamo vnútri môjho HTML. Ale nevšimla som deklaroval funkciu že vyzerá trochu ako PHP syntakticky, ale je to v skutočnosti JavaScript, pretože opäť, je to na strane klienta v prehliadači. A hádajte, čo je to chystá áno, aj keď niektoré syntaxe Tu je nový. DIVÁKOV: Pozdravuj ktokoľvek. DAVID Malan: Bude to pozdraviť každému, kto navštívi túto stránku. Tak ako? Takže všimnete, že sa ukáže v JavaScriptu tam je upozornenie function (). To je veľmi akési smutné funkcie, ktoré naozaj len inklinuje k obťažovať užívateľa. Nie je to jeden, mali by ste naozaj používať zvyčajne, ale je to rýchle a špinavé spôsob, druh tlače niečo s grafickým užívateľským rozhranie, ako prehliadača. Všimnite si, že mám reťazec apostrofmi. Ukazuje sa, že na rozdiel od C JavaScript môže mať v skutočnosti použiť jeden cituje, a úprimne povedané, je to len trochu o štylistické konvencie medzi JavaScript programátorov použiť apostrofy. PHP, ale v skutočnosti majú mierne iný význam. Ale teraz, len viem, že To je jediný dôvod. Konvencie v JavaScriptu je často použiť apostrofy, ale môžeme použiť dvojité úvodzovky v oboch miestach rovnako. Tak to je zaujímavé. Pripomeňme si posledný čas, ktorý sme mali, že obraz na obrazovke, ktorý kreslil strom kde ste mali uzol HTML, a hlava uzol a uzol tela, a potom nejaký text. Ale bol tam jeden špeciálny uzol na veľmi top, ktorý som nazval dokument. No, ukázalo sa, v JavaScripte, akejkoľvek čas si napísať program v JavaScripte v prehliadači, máte prístup k špeciálny globálne premenné. Podobné duchom PHP superglobálnych, táto sa volá v všetko malými písmenami dokument. Je to ako struct, ale to struct Má tiež funkcie vnútri nej. Takže C struct má len údaje obvykle. Ale objekt JavaScript, pretože to Technicky je tiež funkcia, inak známy ako spôsob, vnútri nej. A môžete volať funkciu vnútri tento objekt doslova robí svoju názov, bodka, a potom názov funkcie, alebo tiež metóda. Je to len synonymum, naozaj. A čo táto funkcia robiť? Môžete trochu hádať z názvu. Získať element podľa ID. Takže to bude prehľadávať webové stránky, hľadať ten strom, hľadali bez ohľadu na uzol, AKA element, má Unikátny ID citátom koniec citátu meno. A potom to, čo mám robiť? Chystám sa získať hodnotu vo vnútri že uzol v strome, a idem nejako pozdraviť týmto menom. Tak sa hádať, aj keď máme nie videl ešte, čo robiť a symboly znamenajú tu a tu asi? Divákov: Zlúčiť. DAVID Malan: Zlúčiť. Správne, a to sú len druh rozhodnutia o návrhu ľud rokmi. V PHP zřetězit veci s bodkami. V jazyku C, si skočiť cez niekoľko obručou a volanie funkcií, ako je strcopy () alebo Strčte () alebo iné podobné funkcie. Ale v JavaScripte, môžete použiť plusy. Takže je to len zreťazenie tri reťazca - ahoj, meno, a potom výkričník. Takže, kedy a prečo je táto funkcia volal aj keď? No, hádajte od HTML v dolnej časti. Prečo pozdraviť (), označovaný ako, alebo kedy? Zdá sa, že ako najlepšie môžem povedať, na predložiť pri predložení tohto formulára, Budem robiť to, čo je vnútri týchto úvodzoviek. A konkrétne, idem volať pozdraviť () a potom sa vrátiť false. No, uvidíme, čo sa čistá účinok je tu ako prvý. Tak ma nechaj ísť dopredu a zadajte v, povedzme, Loren, Odoslať. Ahoj Loren. Poďme sa pozrieť, či by to bolo len šťastie implementácie. Nie. Takže to, čo sa písanie meno Vlastne som tam dal. Všimnime si ale, čo sa nemení. URL je stále dom-0.html. Nie sú tu register.php. Neexistuje žiadny druhý súbor. Neexistuje žiadna akcia atribút. Takže čo je to return false pravdepodobne robiť? Prečo som volanie pozdraviť () a potom vracia false asi? Čo sa zvyčajne stane, keď kliknete na tlačidlo Odoslať na formulári, ktorý ešte máme videl v minulom týždni? DIVÁKOV: [nepočuteľné]. DAVID Malan: Ide to niekde, že jo? Ide do určitej cieľovej adrese URL. Ale ja nechcem aby sa to stalo tu. Chcem webové stránky, aby bol úplne dynamický, ako je Gmail, kde akonáhle ste tam, zostaň tam. URL nezmenia spôsobom, ktorý indikuje, že celá stránka je prekládky. Skôr chcem niečo zmeniť ako tlač niečo tu na obrazovke. No dovoľte mi to vyčistiť sa trochu. Dovoľte mi otvoriť ani dom-0, ale dovoľte mi, aby som otvorila dom-2. Len aby ste videli nejaké syntaxe tu. Ukazuje sa, že to, čo sme práve sa používa surové JavaScript. Tak toto je naozaj jazyk JavaScript. Niektorí z vás možno vedia o knižnica s názvom jQuery. Takže jQuery nie je to isté vec ako JavaScript. Je to len knižnica, ktorá naozaj šikovný chlapec napísal a popularizoval také že takmer všetci na svete, teraz používa pri používaní jQuery JavaScript. A na prvý pohľad, úprimne, to vyzerá trochu viac zložitejšie. Ale zistíte, najmä ak idete že pre konečný projekt s web vývoj, zistíte, že tento čistí veci a ušetrí docela pár riadkov kódu. Tak nech to jednoducho pozrel na to, ako Táto forma je v poriadku. Všimnite si, čo som odstrániť zrejme z môjho HTML? Nie je na odoslať handler aby som tak povedal. Neexistuje žiadny atribút. Pretože viete, čo Nechcel som naozaj rád? Cítil som sa, ako by sme padali do starej zvyky tam. Rovnako ako, že sa začína cítiť nedbalý stretávať aj CSS sa HTML, pretože si trochu hádzanie rôznych jazykov po celom miesto, podobne ako sa to začať cítiť ako zlé ceste ísť dole, kde Dávam kód JavaScript vnútri môjho HTML skôr než factoring to. Tak to je ponaučenie. V dom-2.html, som factoring to. A robím veci mierne inak. Pre túto chvíľu, budem mávať rukami na to, čo to naozaj robí pod kapotou. Ale práve teraz predpokladať, že prvé riadok kódu v tejto knižnici tzv jQuery len znamená, že keď Dokument je pripravený, vykonajte nasledujúce kroky. Pretože sú tieto webové stránky môžu mať nejaký čas na načítanie. Tie by mohli byť na pomalom internete pripojenia, a to by mohlo byť pradenie a odstreďovania, nakoniec je nabitá. To riadok kódu hovorí len čakať, až celá stránka je pripravená, dokument je pripravený, pred spustením tohto kódu. A teraz oznámenia, je to pravdepodobne najužitočnejšie prvý sa od jQuery. Táto linka je tu veľmi podobný v duchu k tomuto oveľa dlhšiu linky tu. Kým v surovom kóde JavaScript, tam existuje dokument globálny objekt, ktorý má funkciu nazvanú getElementById (), ľudia, ktorí písali jQuery zjednodušené, že len povedať, znak dolára, a potom vo vnútri zátvorky dal dve citácie, a potom dať hash symbol nasleduje jedinečný identifikátor, ktorý chcete uložiť. Tak to je ekvivalentná document.getElementById. Medzitým. Submit jednoducho znamená na predloženie akejkoľvek forme ste s odkazom na vľavo, choďte dopredu a spustiť túto funkciu. Ale to je teraz taky zvedavosť. Čo je divné o tom, čo Som zdôraznil tu? Nielen, že je to trochu syntakticky nové, je tu tiež niečo chýba. DIVÁKOV: Je to len volané funkcie? Nie je to nazýva záznam? DAVID Malan: Jo. No, tak upozorniť () je dole tu musí byť spravodlivý. Ale nie je tam žiadna zmienka o meno, rovnako ako viete, foo alebo Niečo sa deje tu. A naozaj, je to jeden z prvkov, JavaScriptu, ktorý je celkom silný, ale aj úplne nové. PHP a vlastne to má rovnako. Nechaj ma ísť ďalej a robiť niečo naozaj rýchlo. Nechaj ma ísť dopredu a dať to sem. Nechaj ma to urobiť. Funkcie. Hovorme toto spracovanie (). Funkcie ovládača, aby som tak povedal. Niečo, čo sa zaoberá nejakú operáciu. Dovoľte mi, aby som upratať svoj odsadenie. A dať to sem. A daj to sem. Jo. OK. Takže teraz mám funkciu nazvanú handler (), že som naozaj neviem čo to robí ešte. Je to jednoducho stále má tie veci. Jejda. Trvalo príliš veľa. Poďme na to. Dobrá. Prepáčte. Dobrá. Nechaj ma to urobiť. OK. To vyzerá pekne a rovno odovzdal dnes. Nechaj ma to urobiť. Urob to. A OK. Takže teraz, poďme dať to sem. Žiadne ďalšie programovanie v reálnom čase. OK. Takže teraz, poďme sa vrátiť do kde začal príbeh. Predtým som povedal, že táto linka tu znamená, že ak je dokument pripravený, ísť dopredu a to. Čo chcem robiť? No konkrétne, chcem ísť dopredu a vykonajte nasledujúce. Vykonať tento riadok kódu, a potom to, čo chcem, aby ste urobiť, je zavolať to fungovať, ak je predložený formulár. Teraz to je to, čo je zaujímavé. To nie je samo o sebe funkcií. Všimnite si, nie som uvedenie zátvorky tu v normálnym spôsobom. Som doslova okolo funkciu nazvanú handler () na inú funkciu tzv predložiť () ako argument ako aj keď je to ako premenné. A to je jeden z rysov JavaScript je svojou funkciou sami sú naozaj len objekty. V skutočnosti, oni sú naozaj len premenné nejakého druhu. A v prípade, že názov funkcie je handler (), nie je žiadny dôvod, prečo nemôžem odovzdať ho v ako argument tu. A to znamená, keď je formulár s ID demo je predložené, volanie tejto funkcie. Ale teraz keď som späť všetko to, prečo potom som asi robiť pred tento okamih? No, to je anonymný funkcia. Vzhľadom k tomu, úprimne povedané, som si uvedomil, prečo som obťažovať strácať čas vyhlásenia Funkcia tzv handler () len pre volanie že v jednom a iba jednom mieste? Ak Nepotrebujem meno, a ja nie potrebné hovoriť viac než jedno miesto, povedzme, implementovať funkcie presne tam, kde som ju potrebujú. A tak JavaScript a PHP podporovať čo sú tzv anonymné funkcie, ktoré dovoľte mi, aby som to presne to tu. Ale my sme len poškriabaniu povrchu. Poďme dráždiť sa len pár Konečné príklady tu. Ak idem do quote.php. Všimnite si, že je to v skutočnosti PHP funkcie, PHP program, ktorý som napísal ktorá očakáva parameter HTTP s názvom symbol, a môžem odovzdať hodnota ako FB. A ak sa skutočne pozrieť na zdroje kód, to je dotazovanie webové stránky zadarmo volal Yahoo Finance, rovnako ako p-set sedem, a to je návrat do mňa niečo, čo sa zrejme formát známy je JSON - JavaScript Object Notation. Je to len objekt. Všimnite zložené zátvorky, úvodzovky, hrubého čreva a čiarky. Teraz medzitým, to je celkom v pohode. Pretože som si asi použiť programovanie jazyk pre generovanie adresy URL ktoré vyzerajú ako to dynamicky, že jo? Môžem zmeniť na Google a vrátiť spoločnosti Google Cena akcií $ 1,017.55. Tak uvidíme, či nemôžeme použiť teraz. Nechaj ma ísť na ajax-0, ktorá sem vyzerá nasledovne. Je to len webová stránka, ktorá má formulár s tlačidlom. Dovoľte mi, aby som tu do toho pustite a zadajte YHOO Yahoo burzový symbol, kliknite na tlačidlo Načítať Citácie, a teraz Všimol som si, som dostal upozornenie na 32,86. Dovoľte mi, aby som skutočne ísť do milovník verzia na túto stránku, verzia dva, a zadajte povedzme Microsoft, MSFT. Získať cenovú ponuku. A teraz všimnete, žiadny záznam. Všimnite si, kde sa hovorí, že cena , Ktoré majú byť stanovené? Je najjednoduchšie príklady, ktoré naznačuje, v akom Gchat a Facebook Chat a Gmail, a iné takéto webové stránky robia podľa skutočnosti meniace sa webové stránky. Všimnite si toto. Dovoľte mi, aby som znovu načítať stránku. Dovoľte mi, aby som otvorila Chrome Inspector. Nechaj ma ísť na prvky Karta tu dole. Teraz všimnúť, či som priblížiť tu a otvoriť toto hore, zistíte, že to je moje HTML DOM - môj objektový model dokumentu. To je môj HTML. Ale teraz nevšimol, aj keď to bude byť trochu ťažké ho vidieť v oboch miest naraz, keď som zadať FB tu, pozerať sa na dno na obrazovke iba. Je to skutočne mení, môj HTML za behu. A to robí to celkom jednoducho tým, že robí niečo také. Ak otvorím ajax-2, oznámenia, ktorým sa vykonáva niečo tak sexy ako že, aj keď je to dosť škaredé, ale prepracovaný ako funkčne, že má niektoré HTML v dolnej časti. Ale všimnite som sa označiť. Sme nepoužíva skôr, ale to je ako, ale nenúti všetko na nový riadok. Je to proste robí obdĺžnikovú oblasť, na rovnakom riadku v podstate. Všimnite si, že som dal tomu ID ceny. A ukázalo sa, s použitím rovnakej JavaScript knižnica, mám funkciu tzv úvodzovky (), ktorá je volaná pri každom Formulár je predkladaný. A to, čo robím, je to. Som deklarovaní premennej v JavaScripte volal url, uloženie hodnoty quote.php symbol? =. Inými slovami, ja sám som začínal pripraviť požiadavke HTTP, a potom Ja zreťazenie na ktoré sa znamienkom plus bez ohľadu na element s ID o symbol, ktorý oznámenie je, že textové pole priamo sem. Takže rovnako ako sme mali formulára v minulosti. A potom to dopadá v jQuery, ak volanie. Val (), ktorá volá o val funkcie, funkcia hodnotu, ktorá sa dostane čo užívateľ zadal palcov A potom všetci sieťovú prevádzku že sa stane toto. $. GetJSON. A ako stranou, znak dolára je len skratka notácie. Je to naozaj jQuery.getJSON. Dostaň ma do JSON z tejto adresy URL, a keď žiadosť vráti, volať toto funkcie a odovzdať ako argument čo sa vrátil zo servera. Takže inými slovami, keď som sa vrátiť do prehliadač, a idem späť do quote.php, čo môj prehliadač robí, je stále Tento kus dát. A keď idem na tejto webovej stránke tu, Všimnite si, keby sme namiesto toho ísť do siete Záložka a vyčistiť ho, a potom zadajte niečo ako GOOG pre Google a získať Citácie, všimnite si stránku nezmenil. Ale požiadavka HTTP bol vyrobený, a to vrátil sa sem, ak sa pozrieme na odpoveď je celá banda JSON že prístup nakoniec tento jednoduchý riadok tu. Dát je to, čo sa dostal zo servera. Cena je názov key mi záleží. Takže data.price mi to dáva. Teraz medzitým, a to je posledný príklad. Môžete to urobiť ešte viac sa stránkou. Jeden dokonca, aj dve. Môžeme priviesť späť označiť, ak si pamätať. To je JavaScript. Môžeme to urobiť. Veľmi vzrušujúce. Necháme to ako Cliffhanger. Ale viac vzrušujúce, môžete robiť veci, ako je tento. Ak idem do Geolocation-1, ukázalo sa, že Chrome vie, že sme na Zemepisná šírka a dĺžka 42.37. -71,10. Takže je tu ešte existuje k dispozícii. Ale o tom až budúci týždeň. Uvidíme sa v pondelok.