[Aktualizácia: Quiz 1] [Ali nahmatá, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] [To je CS50.] [CS50.TV] [Lucas Freitas] Vitajte všetci. To je preskúmanie kvíz 1. Rovnako ako upozornenie, to je - mám na mysli, budeme sa snažiť pokryť ako veľké množstvo materiálu, ako je to možné, ale to neznamená, že budeme pokrývať všetky veci, ktoré môžu byť v kvíze 1. Takže sa uistite, že máte tiež sa pozrieť na prednášku, časti, všetko, čo môžete. Quiz 1 bude v stredu budúcu stredu. Tak sa určite študovať. Bude to byť docela veľa, ako prvý kvíz pokiaľ ide o jeho formát, ale to asi bude oveľa ťažšie. Aspoň v minulom roku, kedy som vzal 50, myslel som, že to bolo oveľa ťažšie. Tak veľa študovať. Idem na pokrytie dátové štruktúry a Huffmanova kódovanie. To je niečo, čo mnoho ľudí myslí, že je zložitý, ale budem sa snažiť, aby to tak jednoduché, ako je to možné. Po prvé, to, čo chceme, vy to vedieť kvíz 1 je pochopiť koncepčné opis každého z dátových štruktúr, ktoré budem prezentovať. To znamená, že nemáte skutočne implementáciu hash tabuľky v teste 1. Nechceme implementovať celú hash tabuľky, možno sa budeme snažiť aby ste implementovať niektoré funkcie, najbežnejšie operácie, ale nebudeme robiť implementovať všetko. Takže je dôležité, aby ste pochopili koncept za každé dátové štruktúry a tiež to, že ste schopní kód v C, len najbežnejšie operácie, ktoré majú pre každú dátovú štruktúru. A tiež môcť prezrieť ukazovatele a structs, pretože oni sa objaví veľa v týchto dátových štruktúr. Po prvé, spojené zoznamy. Prepojené zoznamy sú vlastne veľmi podobné polí, ale rozdiel medzi prepojeného zoznamu a polia, Po prvé, je to, že spájať zoznam má veľmi flexibilné veľkosť, zatiaľ čo v poliach musíte navoliť veľmi veľké veľkosti pre polia, takže viete, že budete mať možnosť uložiť všetky vaše dáta v tomto poli, alebo budete musieť použiť malloc majú flexibilnú dĺžku poľa. V spojových zoznamov je to veľmi jednoduché stačí získať viac prvkov, dať viac prvkov v prepojenom zozname alebo odstrániť prvky. A skutočne, ak nechcete, spájať zoznam musí byť triedené, môžete vyhľadať a odstrániť prvky v konštantnom čase, takže O (1) čas, takže je to veľmi pohodlné. Musíte len dávať pozor, aby vždy pamätať na malloc a voľný uzly, len preto, že ak to neurobíte, budete mať k pretečeniu pamäte. Takže spojové zoznamy - definícia uzla je, rovnako ako to, čo sme tu. Dal som int n, ale môžete uložiť všetky dáta, ktoré chcete. Takže ak chcete uložiť reťazec, to je v poriadku. Ak chcete uložiť struct, to je v poriadku, dvojitý, čo chcete. Len som dal int n pre príklady tu. A máte ukazovateľ na ďalší uzol. Takže, v podstate, spájať zoznam má niektoré dáta, a potom to ukazuje na ďalší uzol. Ak je to posledný prvok v prepojenom zoznamu, bude to ukazovať na NULL. Tak toto je príklad prepojeného zoznamu. Dobre, takže teraz poďme pozrieť, čo by sme mali robiť, keď chcem vložiť prvok do prepojeného zoznamu. Po prvé, bude funkcia insert byť typu void pretože nechcem vrátiť nič. A ja vezmem int ako argument, pretože chcem vedieť, čo chcem vložiť. Takže to, čo je prvá vec, ktorú by som mal urobiť? No, mal som malloc na newnode, tak to je prvý riadok. Len som vytvoriť nový uzol, aby v prepojenom zozname. Tak čo mám robiť? No, vieme, že v našich implementáciách spojových zoznamov v triede, sme vždy dať hlavu ako globálne premenné. Takže to, čo môžeme urobiť, je zmeniť na hlavu. Môžem tento nový uzol bude nový šéf, a to bude ukazovať na predchádzajúcu hlavy. Ako môžeme urobiť, že? Prvá vec, ktorú musíte urobiť, je zmeniť na 'n' v novom uzle na hodnotu, ktorý bol odovzdaný do funkcie. Potom newnode ďalej sa bude hlava. Hlava sa bude newnode. Takže je to celkom jednoduché. Pre zmazanie uzla, môžeme urobiť to ako - Jeden spôsob, ako by sme mohli urobiť, je povedať, v poriadku, keď som chcel odstrániť, napríklad 3, to, čo som mohol urobiť, je upozorniť na predchádzajúcu uzol k ďalšiemu uzlu 3. Takže by som proste niečo také. Ale čo je problém s tým, že? Mám pretečeniu pamäte, takže nemám prístup na číslo 3 už. Problém s tým je, že nebudem mať možnosť oslobodiť tento uzol. Budem mať k pretečeniu pamäte a (nezrozumiteľné), bude ma nenávidieť. Takže namiesto toho, aby robil to, že by som mal pravdepodobne dočasný ukazovateľ. Tak som dal tepl. To bude ukazovať na uzol, ktorý chcem odstrániť. A potom som sa presunúť na predchádzajúcu uzly bodu k ďalšiemu uzlu uzla, ktorý chcem odstrániť. A nakoniec, môžem uvoľniť ukazovateľ. Musím sa uvoľniť ukazovateľ, ktorý som vytvoril práve tam? Ja nemusím, len preto, že - Rozdiel je v tom, že tento uzol bol vytvorený pomocou malloc, takže je to v halde, pričom tento bol len deklarovaný ako NULL prepínače v stohu. Takže nemám ho oslobodiť. Dobre. Takže teraz poďme hovoriť o komíny. Komíny sú celkom jednoduché. Urobili sme hromady a fronty v triede len pomocou polí, ale mali by ste byť oboznámení - proste byť si vedomý ktoré môžete urobiť hromady vo frontoch pomocou prepojených zoznamov rovnako. Takže ak máte pole, čo by bolo stack? Zásobník, prvý, bude mať veľkosť. Musíte uložiť, čo je veľkosť zásobníka, ktorý máte práve teraz. A tiež sa bude mať pole, v tomto prípade čísel, ale ak chcete, to môže byť pole reťazcov, pole struct, čokoľvek, čo chcete uložiť. O zásobníka: Rozdiel medzi komínom a prepojeného zoznamu je, že v zásobníku budete mať prístup k posledný prvok, ktorý bol uvedený v zásobníku len. Je to tzv posledný dnu, prvý von. Rovnako ako máte hromadu zásobníkov, keď dáte zásobník na vrchole zásobníka, musíte najprv odstrániť tento zásobník mať prístup k ostatným zásobníkov. Je to to isté s komínmi. Takže ak chcem, napríklad, pridať prvok do zásobníka, čo mám robiť? Hovorí sa tlak, a je to celkom jednoduché. Prvá vec, ktorú musíte urobiť, je skontrolovať, či veľkosť zásobníku je väčšia alebo rovná kapacite zásobníka. Pretože ak ste už na plnú kapacitu, nemôžete pridať nič iné. A potom, ak nie, budete musieť pridať prvok do zásobníka. A konečne, zvýšiť veľkosť. Takže je to celkom jednoduché. Tak som len pridať číslo 2. A keď chcem pop, čo znamená, že chcem odstrániť posledný prvok, ktorý bol pridaný, a vráti hodnotu prvku, Prvá vec, ktorú musím skontrolovať je, že zásobník nie je prázdny. Vzhľadom k tomu, či je to prázdne, nemôžem nič nevracia. V tomto prípade, vraciam -1. Inak, budem decrement veľkosť spec, a vrátiť čísla (s.size). Prečo som decrement veľkosti a potom sa vrátiť s.size? Je to preto, že v tomto prípade, špec má veľkosť 4, a chcem sa vrátiť na štvrtý element, nie? Ale čo je index štvrtého prvku? Tri. Pretože som si veľkosť - bude 3, môžem len vrátiť s.numbers (s.size) pretože je to 3. Takže je to len index. Teraz fronty. Fronty sú skoro to isté. Jediný rozdiel je, že namiesto toho, aby ako posledný dnu, prvý von, Máte-first in, first out. Pravdepodobne, ak čakáte ísť na koncert, by ste rád, keby ste mali stack miesto fronty. Ako posledný, kto prišiel by bol prvý človek vstúpiť do koncert. Tie by pravdepodobne nemal byť šťastný. Vo fronte, prvá osoba, ktorá sa v roku je tiež prvá osoba, sa dostať von. A tak v definícii fronty, okrem toho, že veľkosť v poli, budete tiež mať hlavu, čo je index do čela zásobníka. Takže prvý prvok práve teraz. Enqueue je rovnaké ako kliknutie pre komíny. Ak boli veľmi naivné, by ste len povedať, dobre, môžem len urobiť presne to isté, čo som urobil pre Push. Ja si len skontrolovať, či to nie je nad kapacitu. Ak je to, myslím, vráti false, inak môžem len exportovať novú hodnotu a potom zvýšiť veľkosť. Ale prečo je to zle? Poďme sa pozrieť, tento príklad. Snažím sa enqueue veľa vecí, a potom budem dequeue a enqueue. Je tu veľa príkazov, ale je to veľmi jednoduché. Chystám sa enqueue 5, tak sa pridá 5 a potom 7, 1, 4, 6, a potom chcem dequeue niečo, čo znamená, že idem na odstránenie prvého prvku. Takže idem odstrániť číslo 3, že jo? Prvý element. Dobre. Teraz, keď sa snažím enqueue niečo iné, čo sa bude diať? Podľa môjho vykonávania, Chcel som dať ďalšie číslo v indexe q.size. V tomto prípade je veľkosť je 8, takže index 8 bude tu na poslednej pozícii. Ak sa snažím enqueue 1 tu, by som prepísanie poslednej pozícii na číslo 1, čo je úplne zle. To, čo chcem urobiť, je obalí a ísť na prvej pozícii. Možno by ste len povedať, dobre, budem musieť skontrolovať keď som si skutočne dať tam niečo. Ak nie, len hovorím, oh, nová plná kapacita je vlastne kapacita - 1, a vy nemôžete dať prvok existuje. Ale v čom je problém? Problém je v tom, že keď som dequeue všetko tu a potom sa snažím pridať niečo iné, bolo by to len povedať, dobre, že si na plnú kapacitu, čo je 0. Takže vaše fronta je preč. Musíte sa obalí, a spôsob obtekania okolo že vy ste sa naučili v vizionárske a ďalších psets používal mod. Môžete si to vyskúšať doma pochopiť, prečo by ste to q.size + q.head mod kapacita, ale ak si skontrolovať tu, môžeme vidieť, že to funguje. Takže v poslednom príklade, q.size bolo 8 a hlava bola 1, pretože to bola táto pozícia tady na pole. Tak to bude 8 + 1, 9. Mod kapacita 9 bude 0. To by ísť do indexu 0.. Budeme v správnej polohe. A potom skúste front doma. Niektoré dôležité veci: pokúsiť sa pochopiť rozdiel medzi zásobníka a fronty. Doma, pokúsiť sa dostať veľmi dobre oboznámení s realizáciou Zaradí, Dequeue, tlačiť a pop. A tiež pochopiť, keď by ste použiť každú z nich. Tak poďme si oddýchnuť po dobu 10 sekúnd s partiou Pokémonov. A teraz sa vráťme do dátových štruktúr. Hash tabuľky. Mnoho ľudí sa bojí hash tabuľky. v probléme nastavenia 6, Kontrola pravopisu. Hash tabuľky a snaží sa, veľa ľudí sa bojí o nich. Myslí si, že to tak ťažké pochopiť. Jo? [Rob Bowden] Problém sada 5. Problem sada 5, jo. Vďaka Rob. Jo. Šesť bolo Huff n 'Puff, jo. Problém sada 5 bola pravopisu, a vy ste museli použiť buď hash tabuľky alebo skúsiť. Veľa ľudí si myslí, že oni boli veľmi ťažké pochopiť, ale oni sú vlastne celkom jednoduché. Čo je hash tabuľka, v podstate? Hash tabuľka je pole spojových zoznamov. Jediný rozdiel medzi pole a hash tabuľky je, že v tabuľke hash máte niečo ako funkcia hash. Aká je funkcia hash? Ja neviem, či vy môžete prečítať tu. To je príklad tabuľky hash. Takže vidíte, že máte pole s 31 prvkami. A to, čo robíme v hash tabuľke sa majú funkcie hash že sa bude prekladať kľúč, každý pravý na indexe. Ak, napríklad, keď chcem vybrať pre B. Harrison, Ja by som dal B. Harrison v mojich hašovacej funkcií, a hashovacie funkcia vráti 24. Takže viem, že chcem ukladať B. Harrison v 24.. Tak to je rozdiel medzi len mať celý rad a má hash tabuľky. V tabuľke hash budete mať funkciu, ktorá sa ti to povedať kam ukladať dáta, ktoré chcete uložiť. Pre hašovacej funkcie, budete chcieť pozrieť na funkcie hash že je deterministický a dobre distribuovaný. Ako môžete vidieť tu, uvidíte, že mnoho údajov, ktoré som chcel, aby obchod bol vlastne 19 namiesto použitia 31 a 30 a 29, ktoré boli všetky zadarmo. Takže funkcia hash, že som nebol moc dobre distribuovaný. Keď hovoríme, dobre distribuovaný, znamená to, že chceme mať, zhruba, aspoň 1 alebo 2 pre každý z - ako, rozdiel 1 alebo 2 pre každý z indexov v poli. Ak chcete mať zhruba rovnaký počet prvkov v každej aplikácii zoznamu v poli. A je to ľahké zistiť, či je to platný v hash tabuľke, zobrazenia ako tabuľky hash. Potom stromy. Jedná sa o strom. Stromy v informatike sú hore nohami nejakého dôvodu. Tak tu máte koreň stromu a potom listy. Mali by ste jednoducho viete, názvoslovie pre rodičov a dieťa. Každý uzol má svoje deti, ktoré sú uzly, ktoré sú pod rodičmi. Tak, napríklad, 2 sa bude základné dosky pre 3 a pre druhé dieťa tam, zatiaľ čo 3 bude rodič 1 a ostatné deti, ktoré sú tam. A 1 bude 3 dieťa, a tak ďalej. Máme niečo oveľa zaujímavejšie, tzv binárny vyhľadávací strom, v ktorej sú všetky hodnoty na pravej uzla sa bude na pravej strane, priamo tu - na pravej, sa bude väčšia ako prvok v koreni. Takže ak mám číslo 5, priamo tu, všetky prvky na pravej strane sa bude väčšia ako 5, a na ľavej strane všetky prvky sa bude menej ako 5. Prečo je to užitočné? No, ak chcem zistiť, či je tu číslo 7, napríklad, Len som ísť na 5 prvý a budem vidieť, je 7 väčšia alebo menšia ako 5? Je to väčšia, takže viem, že to bude musieť byť na pravej strane stromu. Takže mám oveľa menšie veci na pohľad. Pri vykonávaní binárneho vyhľadávacieho stromu, uzla, ja proste budem musieť mať k dispozícii údaje, takže int n; môžete mať tiež reťazec alebo niečo, čo chcel. Len musíte dávať pozor na definovanie toho, čo je väčšie, to, čo je menšie. Takže ak ste mali reťazca, napríklad, môžete definovať že všetky tie veci, na pravej strane budú mať väčšiu dĺžku, ľavá budú mať nižšiu dĺžky, takže je to naozaj len na vás. Ako môžem implementovať nájsť pre BST? Prvá vec, ktorú budete musieť urobiť, je skontrolovať, či koreň je NULL. Ak je to NULL, znamená to, že vec nie je tam preto, že nemajú ani strom, nie? Tak som sa vrátiť false. Inak, ja idem skontrolovať, či je číslo väčšie ako hodnota v koreni. Budem sa snažiť nájsť prvok na pravej strane stromu. Vidíte, že som pomocou rekurzie tu. A potom, ak je to menej, idem sa pozrieť na ľavej strane. A konečne, v opačnom prípade, ak je to nie je menšia alebo väčšia, to znamená, že je hodnota sama o sebe. Tak som len vrátiť true. Môžete vidieť, že som použil v prípade, keby, keby. A pamätajte, v kvíze 0, mali sme problém, ktorý mal v prípade, keby, keby, a vy ste mal nájsť neefektívnosti, a neefektivita bolo, že ste použili v prípade. Mali by ste použili v prípade, else if, else if a else. Takže by som mal použiť else if a else if a else tu? Má niekto - jo? [Študent rozprávanie, nepočuteľný] To je perfektné. Takže ona hovorí, že nezáleží na tom, len preto, že neefektívnosť, že sme mali pred bolo to preto, že možno keby bola splnená niektorá podmienka, takže ste vykonali akciu, ale potom išli skontrolovať všetky ostatné podmienky. Ale v tomto prípade, že sa vrátil hneď, tak to nevadí. Takže nemusíte sa inak použiť, ak. A konečne, poďme hovoriť o pokusoch, čo je vecou každého obľúbené. Try je strom z polí. Je to veľmi rýchlo vyhľadať hodnoty, ale používa veľké množstvo pamäte. A je to zvyčajne filtrovať slová, takže keď chcete implementovať, napríklad, ja neviem, ako telefónny zoznam vo vašom telefóne a chcete byť schopní typ B a len mená ľudí, ktorí majú B. Je to veľmi jednoduché implementovať, že používate vyskúšať, napríklad. Ako definovať uzol v pokus? Len musíte mať bool, ktorá bude is_word. To znamená, že s využitím všetkých znakov pred týmto uzlom, ste boli schopní vytvoriť slovo, a potom budete mať celý rad ukazovateľov na uzly. Vidíte, že máme rad nadradeného uzla, takže uzol * polia? Jo? Takže poďme sa pozrieť, ako to bude fungovať. Pre kontrolu pravopisu, Máme rad 27 prvkov, pretože máme všetky listy a apostrof. Ako tu budem len tak používať dva, pretože chcem mať možnosť písať na tabuľu. Dobre. Tak toto je príklad pokusu. Ak som definovať prvý uzol, budem mať rad prvkov 2 že sú dva ukazovatele na NULL, tak som dal "a" a "b". A ja budem mať bool, ktorá hovorí, že is_word. To bude false pre prvý, len preto, že predtým, než že nemáte žiadne znaky. Takže prázdne slovo nie je slovo. Takže je to falošné. Ak chcem pridať 'a' do tohto slovníka, čo by som mal urobiť? Len by som si, aby malloc nový uzol pre "A", a potom pridať svoje slovo na hodnotu true. Tak to jednoducho znamená, že keď "" bude pravda. Zmysel? Potom, keď chcem pridať "BA", budem musieť malloc 1 pre "b", a potom idem nastaviť boolean false, pretože "b" sám o sebe nie je slovo. Potom idem do malloc iný pre "a", takže "BA", a potom idem nastaviť, že je to slovo na hodnotu true. Vzhľadom k tomu, "ba" je slovo. A potom, keď chcem zistiť, či "b" je v tomto slovníku, Môžem jednoducho ísť na prvé, "b". Idem dole, a ja som sa na slovo, je, a to hovorí false. Takže to nie je slovo. Chcem chcete skontrolovať "BA", Idem na prvú, "b", a potom ísť do "A", a vidím to pravda, tak to je slovo. Zmysel? Mnoho ľudí sa zmiasť pokusov. Nie? Konečne, Huffmanovo kódovanie. Huffman kódovanie je veľmi užitočné z dôvodu úspory pamäte a kompresiu textových súborov, len preto, že veľa prípadov, keď používate "a" a "e", napríklad, v dokumentoch, ale ja neviem, či vy použiť "q" alebo "Z" toľko. S iba 1 bajt pre každú postavu, každý - na 256 znakov, ktoré máme v tabuľke ASCII nie je príliš optimálne, len preto, že tam sú niektoré znaky, ktoré používajú oveľa viac, takže by ste mali pravdepodobne používať menej pamäte pre tie. Ako môžem použiť Huffmanovo kódovanie? Musíme urobiť Huffman strom.  Huffman strom má uzly ktoré majú symbol, ktorý bude ako, 'a', 'b', 'c', list, bez ohľadu na písmeno máte, frekvencia, ktorá je frekvencia, ktorá sa objaví slovo v texte, že ste boli vytvorenie Huffmanova stromu pre, a potom uzol, ktorý sa bude ukazovať na ľavej strane stromu Huffman a ďalší uzol, ktorý bude ukazovať na pravej strane. Takže rovnako ako strom. Ako si vytvoriť Huffman strom? Budeš vybrať dva uzly, ktoré majú najnižšie frekvencie. Ak máte kravatu budete vybrať 2 uzly , Ktoré majú najnižšie hodnoty ASCII rovnako. Potom budete vytvoriť nový strom z týchto 2 uzly že bude mať kombinovanú frekvenciu v nadradeného uzla. A potom budete odstrániť 2 deti z lesa a nahradiť ich s rodičmi. A budete opakovať, že až budete mať iba jeden strom v lese. Takže poďme sa pozrieť, ako by to Huffman strom ZAMYLA. Môžete vidieť, že všetky písmená majú frekvenciu 1 s výnimkou "A", ktorý má frekvenciu 2. Tak som vytvoril uzly pre všetky listy som dal v poradí ASCII hodnoty a frekvencie. Takže ak chcem vytvoriť prvý strom, bude to s "L" a "M". Tak je to tu. Frekvencia dvojica bude 2 pretože je to 1 + 1, potom ďalšie 2 s najnižšou frekvenciou sú "Y" a "Z". A potom som si všetky z nich sú - majú frekvenciu 2. Takže, ktoré z nich sú tie, ktoré majú najnižšiu hodnotu ASCII pre ten budúci? "A" a "L". Tak som sa vytvoriť nový uzol, a konečne, že je to 4, a 2, SO 2 bude na ľavej strane. A to je strom Huffman. Potom, keď chcem napísať nejaký text, ako v binárnej previesť na text, pomocou stromu Huffman je veľmi jednoduché. Napríklad, keď poviem, že pohybujúce sa na ľavej strane je 0 a pohybuje sa doprava je 1, Čo je to, že bude reprezentovať? Tak ako 1, 1, tak vpravo, vpravo, a potom 0, takže by sa opustil L, a potom 1, 0, 0. Takže 1, 0, takže len 1, 0, 'A'. A potom 0, 1, tak "Z". A potom 1, 0, 0 - nie. 0, 0 bude "Y", tak Lazy. Tak to je všetko pre mňa, Rob je prevezme. [Rob Bowden] Tak, týždeň 7 veci. Máme veľa prejsť naozaj rýchlo. Bitové operátormi, buffer overflow, CS50 knižnica, potom HTML, HTTP, CSS. All in ako 15 - 20 minút. Bitové operátormi. K dispozícii je 6 z nich, ktoré potrebujete vedieť. Bitová a bitové OR, XOR, posun doľava, pravý shift, a nie. Pravý Shift a nie sotva videli v prednáške vôbec. Pôjdeme cez neho rýchlo sem, ale je dobré vedieť, že sa jedná o 6, ktoré existujú. Pamätajte si, že bitové operátory sú, ako keď robíte 3 + 4. Nie ste zaoberajúca sa binárne 3 a 4. S operátormi bitové ste vlastne zaoberá jednotlivými bity čísel 3 a 4. Takže prvé, že budeme hovoriť, je bitový nie je, a všetko, čo robí, je otočiť všetky bity. Tak tu, ak píšete to v C, nebudete písať ako ~ 11011 alebo čokoľvek iného, ​​mali by ste napísať to páči ~ 4, a potom by to hodiť na binárne reprezentáciu 4. Tak tu, ~ nejaké binárne číslo 1101101 bude presne hodiť všetky 1 k 0 je 0 a všetky je na 1 je. Ako hovorím tam, časté používanie tohto, a budeme ho vidieť v trochu, je ako chceme prísť s nejakým číslom kde sú všetky bity sú 1, s výnimkou jedného z nich. Takže je to zvyčajne jednoduchšie vyjadriť číslo kde je nastavená len, že jeden bit, a potom sa ~ o to, aby každý ďalší bit je nastavený, s výnimkou, že jeden. Takže to je to, čo budeme používať viac v trochu. Bitové alebo. Tu sú 2 binárne čísla, a tieto 2 čísla sú veľmi reprezentatívne, pretože predstavujú všetky možné Kombinácia bitov, čo by bolo potrebné operovať. Tu, keď som or'd každého trochu, budeme len tak porovnať rovno dole. A tak na ľavej strane máme 1 a 1. Keď som Bitové | tie, čo mám dostať? Jeden. Potom Bitové | 0 a 1 sa chystá dať mi? Jeden. Bitová 1 a 0 bude to isté, jeden. Bitová 0 | 0 sa chystá dať mi 0. Takže jediný prípad, kedy som si je 0 v 0 | 0 prípad. A môžete si myslieť, že rovnako ako vaše logické najvzdialenejšie regióny. Takže ak si myslíte, že 1. ako skutočné a 0 ako falošné, to isté platí tu. Takže pravda alebo pravda, je pravda, true alebo false, je pravda. False alebo pravda je pravda, false alebo false, je jediná vec, ktorá je v skutočnosti falošný. Tu je príklad, ktorý by ste mali vedieť ako celkom dobrý príklad toho, kedy sú použité bitové operátory. Tu keby sme alebo kapitál "A" s OX20, a my sa pozrieme na to vo chvíli, dostaneme niečo. A ak my alebo malé písmená "a" s OX20, dostaneme niečo. Takže poďme sa vytiahnuť ASCII tabuľku. Dobre. Tu vidíme, že "A" je - tu máme "'je desiatkovej 65. Ale ja pôjdem s hexadecimálne, ktorý je Ox41. Som si istý, videli sme to v triede. Myslím, že sme to videli v triede že je to celkom jednoduché previesť z šestnástkovej na binárne. Takže tu, keď chcem dať 4 do binárne, že to jednoducho bude 0100. To je jeden je miesto, 2 v mieste, 4 je miestom, takže je to 4. Potom som sa rozdeliť 1 do binárne, ktorý sa chystá byť 0001. A tak to bude reprezentácie "A" na binárny. S malými písmenami "a", je to teraz všetko bude Ox61, kde, rozdelenie týchto hore do jeho binárny, takže 6 - Poďme skutočne urobiť - je tam bez gumy? Eraser. Ox61. Takže rozdelenie 6 do binárnej bude 0 + 4 + 2 + 0. A rozdelenie 1 bude 0001. Ak sa pozrieme rozdiel medzi týmito 2, vidíme, že jediný rozdiel medzi malými a kapitálu "A", je to jediný kúsok. Takže sa vracia tu - v poriadku. Ak sa vrátime tu, ak sa pozrieme na to, čo trochu OX20 je, tak rozdelenie OX20 do jeho binárne, je 0010, 0000. OX20, jediný bit, ktorý je nastavený, je to trochu, že sa zaoberáme, s prepínanie medzi veľkými a malými písmenami "A". Keby som alebo 'A', čo je tento, "", či som alebo "A" s OX20, čo mám dostať? [Študent, nepočuteľná] malými písmenami "A", pretože sa to bude hodiť tento bit na 1. A či som alebo "" s OX20, čo mám dostať? Malá, pretože len ORing "'s OX20, Idem sa ORing tento jediný kúsok na 1, je to už jedno, tak to nevadí. Tak sme sa "A" a "A". Bitové a Opäť platí, že môžeme myslieť na to, ako naše logické a náprotivok. Na ľavej strane máme pravda a pravda. Bude to pravda, a pre všetky prípady, false a true alebo pravdivé a nepravdivé, alebo false a false, žiadna z týchto vecí, sú pravdivé. Takže to, čo sme sa nakoniec dostať je 1000. Takže teraz, tu, tu, kde som použil verný bitového nie, kde sme mali OX20. Tak toto je OX20. A teraz, čo chcem robiť, bitový ~ z OX20. To sa bude hodiť všetky bity. Takže mám 1101, 1111. A tak "" anded s ~ OX20 sa ma dať to, čo? Len kúsok naozaj musíme premýšľať o tom, je to jedno, pretože, ak všetky tieto bity sú nastavené na hodnotu 1, potom budeme mať presne to, čo "A" bolo, s výnimkou, snáď, čo je tento bit. Pretože keby to bolo 1, teraz to bude nastavená na 0, preto, že bez ohľadu na to, je, anded s tým bude 0. Takže to, čo je "" & ~ OX20 chystá dať mi? [Študenti odpoveď, nepočuteľná] A čo je "" a - to je "A". A čo je "" & ~ OX20 chystá dať mi? "A." Vzhľadom k tomu, to je v súčasnej dobe 1. Anding s touto 0 sa chystá urobiť to 0, a teraz budeme mať "A". Obaja sú "," a v neposlednom rade tohto typu, máme XOR. Je to veľmi podobné, alebo okrem toho sa rozumie výlučne alebo. To je ako to, čo si zvyčajne myslia ako, alebo v reálnom svete. Takže si to buď "x" alebo "y", ale nie oboje. Tu 1 ^ 1 bude 0. Vzhľadom k tomu, pravda, to je - to nefunguje, tak s logickým true a false ako bitový & a alebo robiť, ale je to pravda ^ pravda je false. Pretože sme sa len chcete vrátiť hodnotu true, ak iba jeden z nich je pravdivá. So 1 ^ 1 je 0. Čo je 0 ^ 1? Je 1. 1 ^ 0 je 1, 0 ^ 0 je 0. Takže za všetkých okolností, 0 bitový niečo 0 bude 0. 1 bitový niečo 0 alebo 0 bitový 1, či je to | alebo ^, to bude 1, a ak je to a to bude 0. A jediný prípad, kedy 1 bitový 1 nie 1 je s exkluzívnou alebo. To je 0110. Tak tu, pomocou XOR - tak sme späť na 20 rokov. 'A' ^ OX20 je tieto 2 bity budeme porovnávať. Takže 1 ^ 0 sa chystá mi dať, čo? Jeden. 'A' ^ OX20 sa chystá dať mi? Malá. '"^ OX20 sa chystá dať mi? Kapitál A. Vzhľadom k tomu, čo to robí, to XORing s OX20 je skutočne mizerný, čo je tento bit. Ak je to 0, je to teraz bude stáť 1. Vzhľadom k tomu, to je 1, 1 ^ 1 je 0. Takže naše "" sa stala "A", a náš "A" sa stalo "". Takže XOR je naozaj pohodlný spôsob, ako len mizerný prípad. Chcete len pre iteráciu reťazec písmen a striedať prípad každého jednotlivého znaku, stačí XOR všetko s OX20. Teraz nám zostáva posun. Ľavý shift je len tak, v podstate, tlačiť všetky čísla do, alebo vľavo, a vložte 0 je za nimi. Takže tu máme 00.001.101. Budeme tlačiť 3 0 je z pravej strany, a dostaneme 01101000. V nonbinary hľadiska, vidíme, že to je naozaj riešenie 13 doľava posunuté s 3, ktorý nám dáva 104. Takže vľavo posun, vidíme tu, x << y je v podstate x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 je 8, takže 13 * 8 je 104. Ak si len myslíte o binárny všeobecne, ako každú číslicu, Ak vychádzame z pravej strany, je to v 1 je miesto, potom na 2 miesta, potom 4 v mieste. Takže tým, že tlačí do 0 rokov z pravej strany, sme jednoducho tlačí veci, ktoré boli v 4. miesta do 8 miesta, a veci, ktoré boli v 8 miesta na 16. miesta. Každý posun len násobí o 2. Jo? [Študent] Čo sa stane, keď sa posunie o 5? [Bowden] Ak sa posunul o 5 by ste len stratiť číslice. Nevyhnutne, je to to isté. Rovnako ako celé čísla sú iba 32 bitov, takže ak pridáte 2 naozaj veľké celé čísla, je to jednoducho nevojde celé číslo. Takže je to to isté tu. Ak sa posunul o 5, by sme len stratiť, že jeden. A to je niečo, čo mám na mysli tým "hrubo" kde ak posun príliš ďaleko, stratíte bitov. Právo posun bude opačný, kam ideme do tuhého 0 Off konci, a pre naše účely, vyplňte 0 rokov zľava. Takže, čo robíme, sme v podstate zvrátiť to, čo sme už urobili. A vidíme, že tri 0 je na pravej strane práve spadol, a my sme tlačil 1101 úplne napravo. To robí 104 3, ktorá je v skutočnosti, x / 2 ^ y. Takže teraz, tu, je to podobný nápad. Prečo je to len zhruba x / 2 ^ y, a nie v skutočnosti x / 2 ^ y? Pretože keď som sa posunul o 4, by som stratil jeden. V podstate, čo si myslíte o, len myslieť na celočíselné delenie všeobecne. Tak, ako je 5/2 je 2.. Nie je to 2.5. Je to rovnaká myšlienka tu. Keď sme sa rozdeliť o 2, môžeme stratiť nepárne bity na ceste. Takže teraz - to je pre bitové operácie. To je všetko, čo potrebujete vedieť. Spomeňte si na prípady použitia sme videli v triede, ako bitová maska ​​je vhodná pre Bitové operátorov, alebo ich použiť pre bitové masky. Veľké písmená a malé písmená, konverzia je celkom typický príklad. Dobre, takže buffer overflow útoky. Každý, kto si spomenúť, čo bolo s touto funkciou v poriadku? Všimnite si, sme deklarovali pole 12 bajtov, 12 znakov, a potom skopírovať do našej pamäti 12 znakov celý reťazec bar. Takže to, čo je tu za problém? Magické číslo 12 by mal do značnej miery okamžite vyskočí as - prečo 12? Čo keď sa stane, bar na viac ako 12 znakov? Čo keď bar je milióny postáv? Tu je problém memcpy. Pokiaľ bar je dostatočne dlhý, to bude len celkom - 'c', 'c' nie je jedno, že to bolo len 12 znakov; "C" nie je jedno, že sa nezmestí, že veľa bytov. Bude to len úplne prepísať znak, 12 bajtov sme pridelené na to, a všetko okolo neho v pamäti, ktorá nie je v skutočnosti patrí do tejto vyrovnávacej pamäti s tým, čo reťazec bar. Takže to bol obrázok sme videli v triede kde máme naše stack rastie. Tie by mali byť použité na tieto obrázky, alebo sa znova zoznámiť sa s nimi. Máme zásobník rastie, pamäťové adresy začínajú na 0 na vrchole a rast sa rád 4000000000 na dne. Máme pole 'c' niekde v pamäti, potom máme ukazovateľ na zatarasiť hneď pod ním, a potom tu máme uložený rám ukazovateľ v našej spiatočnou adresou a našej materskej rutinu v zásobníku. Spomeň si, čo spiatočná adresa je? Je to, keď hlavný volá funkciu foo, volá funkciu bar, nevyhnutne, bar vráti. Takže keď bar vráti, oni potrebujú vedieť, že sa vracia do foo, že ju volal. Takže spiatočná adresa je adresa funkcia, že sa má vrátiť, keď funkcia vracia. Dôvodom je to dôležité pre buffer overflow útoky je preto, pohodlne, hackeri chceli zmeniť, že spiatočnú adresu. Namiesto toho, aby šiel späť do foo, idem sa vrátiť tam, kam hacker chce, aby som sa vrátila do. A, pohodlne, kde hacker často sa chce vrátiť do je začiatok bufferu, ktorý sme pôvodne mali. Takže všimnúť, opäť, Malá India. Zariadenie je príkladom Malý indický systém, takže celé číslo, alebo ukazovateľ je uložený s obrátenými bajtov. Takže tu vidíme - je to? Jo. Vidíme Ox80, OxC0, Ox35, OxO8. Spomeňte si na hexadecimálne číslice? Nechceme zvrátiť hexadecimálne číslice v Malej indickej, pretože 2 hexadecimálne číslice tvoria jeden byte, a my zvrátiť bajtov. To je dôvod, prečo sme neukladáme, ako, 80530CO8. Uložíme, namiesto toho, každý pár 2 číslic, počnúc sprava. Táto adresa odkazuje na adresu začiatku z našej pamäti, že sme skutočne chceli skopírovať do na prvom mieste. Dôvodom, prečo je užitočné preto, že to, čo v prípade, že útočník sa stalo, namiesto reťazec, ktorý bol práve neškodný reťazec, ako je ich meno alebo niečo, čo keď namiesto toho, že string sú len niektoré ľubovoľného kódu že urobili, čo chceli to urobiť? Aby mohli - ja si nemyslím, že akékoľvek chladné kódu. Mohlo by to byť čokoľvek, aj keď. Akékoľvek katastrofálne kód. Keby chceli, mohli jednoducho robiť niečo na segmentoch chýb, ale to by bolo zbytočné. Zvyčajne to hack systému. Dobre. CS50 knižnice. To je, v podstate, vezmi_int, getString, všetky tie funkcie, sme Vám k dispozícii. Takže máme char * string, a to abstrakcia, že odfúkol v určitom okamihu v priebehu semestra. Pamätajte si, že reťazec je len pole znakov. Takže tu vidíme skrátenú verziu GetString. Mali by ste sa pozrieť späť na to spomenúť si, ako je to v skutočnosti realizovaná. Kľúčové informácie sú Všimnite si, dostaneme v jedinom znaku naraz zo štandardného vstupu, ktorý je rovnako ako nám písať na klávesnici. Takže jeden znak v čase, a ak sa dostanete príliš veľa znakov, takže ak n + 1 je väčšia ako kapacita, potom musíme zvýšiť kapacitu našej pamäti. Tak tu sme zdvojnásobenie veľkosti našej pamäti. A to stále deje, sme sa vložiť znak do našej pamäti kým nedostaneme nový riadok alebo koniec súboru alebo čokoľvek iné, V takom prípade sme hotoví s reťazcami a potom reálnom GetString zmenšuje pamäť, ako keby sme pridelené príliš veľa pamäti, že sa vrátim a zmenšiť trochu. Tak sme sa neukazujú, ale hlavná myšlienka je to má čítať v jednom znaku naraz. To môže nielen čítať v celej veci naraz, pretože ich pamäť je len určitej veľkosti. Takže ak je reťazec, ktorý sa snaží vložiť do vyrovnávacej pamäte je príliš veľká, potom by to pretiecť. Tak tu sme zabrániť tomu, aby len o čítanie v jedinom znaku v čase a rastie vždy, keď je treba. Takže vezmi_int a ostatné knižničný funkcie CS50 majú tendenciu používať getString v ich realizácii. Tak som upozornil na dôležité veci tu. Vyzýva getString získať reťazec. Ak getString nepodarilo vrátiť pamäť, si uvedomiť, že getString mallocs niečo, takže keď budete volať getString nemali by ste (nezrozumiteľné) uvoľniť, že reťazec, ktorý ste dostali. Tak tu, ak sa nepodarilo malloc niečo, vrátime INT_MAX len ako príznak, že Ahoj, boli sme vlastne schopní získať celé číslo. Tie by mali ignorovať, čo sa vrátim k vám, alebo nemali by ste liečiť to ako platný vstup. A konečne, za predpokladu, že sa podarí, budeme používať sscanf s týmto zvláštnym príznakom, čo znamená, že prvý zápas celé číslo, potom nájdené žiadne znaky po tom celé číslo. Takže všimnete chceme, aby equal 1. Tak sscanf vracia, koľko zápasov, ak úspešne vykonaná? Vráti hodnotu 1, ak je úspešne uzavreté celé číslo, vráti hodnotu 0, ak to nezodpovedalo celé číslo, a to sa vráti 2 ak je uzavreté číslo nasleduje nejaký znak. Takže všimnete sme opakovať, ak sa nič iné ako jeden zápas. Pokiaľ teda súčasťou 1, 2, 3, C, alebo 1, 2, 3, X, potom 1, 2, 3 by sa ukladajú na celé číslo, X by sa ukladajú na charaktere, sscanf vráti 2, a budeme opakovať, pretože chceme len celé číslo. Rýchlo fúkanie cez HTML, HTTP, CSS. HyperText Markup Language je štruktúra a sémantika na webe. Tu je príklad z prednášky, kde máme HTML tagy. Máme hlavy tagy, telo tagy, máme príklady prázdnych značiek, kde sme vlastne nemajú štart a úzke tag, musíme len odkaz a obrázok. Neexistuje žiadny obraz tag zatváranie, je tu len jediná značka, ktorá dosiahne všetko, čo značka musí urobiť. Odkaz je príklad, uvidíme, ako si odkaz na CSS, skript je príkladom toho, ako si odkaz na externé JavaScript. Je to celkom jednoduché, a pamätajte, že HTML nie je programovací jazyk. Tu si spomenúť, ako by ste definovať formu, alebo aspoň to, čo by to urobiť? Takáto forma má akciu a metódy. Metódy budete len niekedy vidieť sú GET a POST. Takže si je verzia, kde dostane, čo dať do URL. POST je miesto, kde to nie je dať do URL. Namiesto toho, všetky dáta z formulára sa vloží viac skryté v požiadavke HTTP. Tak tu, akcie definuje, kde požiadavka HTTP ide. Tam, kde to ide, je google.com / search. Metóda. Spomeňte si na rozdiely medzi GET a POST, a len povedať, ako napríklad, ak chcete záložky niečo. Už nikdy sa nebudete môcť záložku POST URL pretože dáta nie sú zahrnuté v URL. HTTP, dnes je HyperText Transfer Protocol. HyperText Transfer Protocol, mali by ste očakávať, že prenos HyperText Markup Language, a to robí. Ale je to tiež prenáša všetky obrázky, ktoré nájdete na webe, žiadne sťahovanie, ktoré urobíte spustiť ako HTTP požiadavky. Takže HTTP je len jazyk World Wide Web. A tu je potrebné si uvedomiť, tento druh požiadavke HTTP. Tu HTTP/1.1 na strane práve hovorí, že je to verzia protokolu som pomocou. Je to skoro vždy bude HTTP/1.1, ako budete vidieť. Potom vidíme, že je to GET, POST alternatívou je, že môžete vidieť. A URL, ktoré som sa snažil navštíviť bola www.google.com/search?q = bla, bla, bla. Takže si pamätajte, že to, otáznik q = bla bla bla, je druh vecí, ktoré je predloženej podobe. Reakcie by to mohlo vrátiť ku mne bude vyzerať nejako takto. Opäť platí, že počnúc protokolu, ktorý sa chystá byť, že, nasleduje stavový kód. Tu je to 200 OK. A konečne, webové stránky, ktoré som vlastne požiadal bude nasledovať. Možný stav kód, ktorý ste mohli vidieť, a mali by ste vedieť niekoľko z nich. 200 OK ste pravdepodobne nevideli. 403 Forbidden, 404 Not Found 500 Internal Server Error je zvyčajne, ak idete na webových stránkach a niečo, čo je rozbité, alebo ich PHP kód, dôjde k chybe, zatiaľ čo my v zariadení majú tak veľký oranžový box že príde a hovorí, ako, niečo nie je v poriadku, tento kód nefunguje alebo táto funkcia je zlé. Zvyčajne webové stránky nechcem, aby si vedel, aké funkcie sú skutočne zlé, takže namiesto toho si len dať 500 interné chyby servera. TCP / IP je 1 vrstva pod HTTP. Pamätajte si, že tam je Internet mimo World Wide Web. Rovnako ako keď budete hrať online hru, ktorá nemá ísť cez HTTP, to prechádza iná - je to stále používate internet, ale nepoužíva HTTP. HTTP je len jeden príklad z protokolu postavený na protokole TCP / IP. IP doslovne znamená Internet Protocol. Každý počítač má IP adresu, sú tieto 4-miestny veci ako je 192.168.2.1, alebo čo, že má tendenciu byť lokálne jeden. Ale to je vzor IP adresy. Takže DNS, Domain Name Service, to je to, čo prekladá veci, ako je google.com, aby skutočné IP adresy. Takže ak ste typ, že IP adresy do URL, že by ťa priviesť na Google, ale nemajú tendenciu si pamätať tie veci. Tie majú tendenciu sa namiesto toho pamätať google.com. Posledná vec, ktorú máme, je portami, kde je to TCP súčasťou IP protokolu. TCP robí viac. Premýšľajte o tom, ako máte vo Vašom webovom prehliadači chod. Možno máte nejaké e-mailovej aplikácie beží; Možno budete mať nejaký iný program, ktorý používa Internet v chode. Tí všetci potrebujú prístup k internetu, ale má počítač iba jeden WiFi karty alebo čokoľvek. Takže porty sú tak, že sme schopní rozdeliť ako tieto aplikácie sú schopní používať internet. Každá aplikácia dostane jeden konkrétny port, ktorý môžete počúvať na, a v predvolenom nastavení, HTTP používa port 80. Niektoré e-mailové služby využívať 25. Tie s nízkym číslom majú tendenciu byť vyhradené. Tie sú zvyčajne schopní získať vyššiu číselná ty pre seba. CSS, Cascading Style Sheets. Sme v štýle webovej stránky s CSS, nie s HTML. K dispozícii sú 3 miesta si môžete dať svoje CSS. To môže byť inline, medzi tagy štýlu, alebo v úplne samostatnom súbore a potom spojená palcov A tu je len príkladom CSS. Tie by mali uznať tento vzor, kde prvý príklad máme zodpovedajúce tag tela, a tu sme centrovanie značku tela. Druhý príklad, sme zodpovedajúce vec s ID päty, a my sa uchádzate niektoré štýly, ktoré. Všimnite si, že ID zápätie texte zarovná doľava, vzhľadom k tomu, telo texte zarovná centrum. Päta je vo vnútri tela. To bude miesto, text-align odišiel, aj keď telo hovorí texte zarovnanie na stred. To je celý kaskádové časť. Môžete mať - môžete zadať štýly pre telo, a potom, čo v tele môžete zadať konkrétnejšie štýly, a veci fungujú tak, ako očakávate. Konkrétnejšie CSS špecifikácií majú prednosť. Myslím, že to je. [Ali nahmatá] Ahoj všetci. Keby som mohol len získať vašu pozornosť. Som Ali a ja idem cez PHP a SQL naozaj rýchlo. Takže môžeme začať. PHP je skratka pre PHP: Hypertext Preprocessor. A ako všetci by mali vedieť, že je to server-side skriptovací jazyk, a my ho použiť pre zadnú časť webových stránok, a ako to robí veľa výpočtov, na za-scény časti. Syntaxe. Nie je to ako C, prekvapenie, prekvapenie. Vždy musí začať, ak vidíte, - Nemôžem sa pohnúť dopredu. Môžete vidieť, čo potrebujete nové druhy zátvoriek a potom budete tiež potrebovať? Php. To je vždy, ako ste sa zamerajte PHP text, váš PHP kód. Takže to môže byť len ako C, kde si trochu dať to na prvýkrát. Musíte vždy obklopujú ju. A teraz, hlavné syntax je, že všetky ukazovatele, je potrebné začať s znak $. Musíte to urobiť, keď ste ich definovať, čo musíte urobiť, je ak máte na mysli, aby sa na ne neskôr. Vždy je potrebné, aby $. To je tvoj nový najlepší priateľ, docela veľa. Nemusíte - na rozdiel od C, nemusíte sa dať aký typ premennej je. Takže zatiaľ čo vy potrebujete dolárov, nemusíte dať, ako, int x, alebo reťazec y, a tak ďalej, a tak ďalej. Tak malý rozdiel. V dôsledku toho, to znamená, že PHP je slabo typu. PHP je slabo typ jazyka, a to slabo napísaný premenných. Inými slovami to znamená, že môžete prepínať medzi rôznymi druhmi typmi premenných. Môžete si uložiť číslo 1 ako int, môžete uložiť ako reťazec, a môžete uložiť ako float, a to všetko bude, že číslo 1. Aj keď ste ukladanie v rôznych formách, je to stále - variabilné typy sú stále drží na konci. Takže keď sa pozriete sem, ak si pamätáte z pset 7, mnohí z vás asi mal problémy s tým. Dva rovnaké príznaky, 3 znaky rovná, 4 rovnítka. Dobre, nie sú tam žiadne 4 znaky rovná, ale tam sú 2 a 3. Môžete použiť dva rovnaké znaky ku skontrolovaní logiky hodnôt. Je možné skontrolovať u všetkých typov. Takže ak môžete vidieť v prvom príklade, Mám num_int == num_string. Takže vaše int a vaše string sú ako technicky, 1, ale sú rôzne typy. Ale pre dvojité rovná, bude to ešte prejsť. Avšak, pre trojité rovná, skontroluje hodnoty, ako aj rôzne druhy. To znamená, že to nebude prejsť v tomto druhom prípade tu, kam s použitím 3 rovnítka miesto. Tak to je hlavný rozdiel, že ste mali všetci ukázali sa. Zreťazenie je ďalší silný vec, ktorú môžete použiť v PHP. Je to v podstate len to šikovný bodka zápisnica, a to je to, ako môžete zviazať povrázky dohromady. Takže ak máte mačku a máte psa a chcete dať dva reťazce dohromady, môžete použiť obdobie, a to je trochu o tom, ako to funguje. Môžete tiež len umiestniť vedľa seba, ako môžete vidieť tu v pravom dolnom príklade, kde som echo reťazec 1, 2 priestor reťazec. PHP bude vedieť, aby ich nahradili ako také. Poľa. Teraz, v PHP, existujú 2 rôzne druhy polí. Môžete mať pravidelné pole, a môžete mať tiež asociatívne pole, a my sme ísť cez ne práve teraz. Pravidelné polia sú práve to v C, a tak budete mať indexy, ktoré sú očíslované. Práve teraz sa práve chystá vytvoriť a dať - tak to je, ako sme sa vytvoriť prázdne pole, potom budeme vložiť do čísle indexu 0.. Chystáme sa dať číslo 6, hodnotu 6. Môžete to vidieť na spodnej časti tu. Where 's - na indexovým číslom 1 ideme dať hodnotu číslo 4, a tak môžete vidieť, že je to 6, je tu 4, a potom, ako sme tlačíte veci, keď sa snažíme a vytlačiť hodnotu uloženú v čísle indexe 0., potom uvidíme hodnotu 6 je vytlačiť. V pohode? Tak to je pravidelná pole pre vás. Ďalším spôsobom, ako môžete tiež pridať veci do pravidelných radov teraz ich stačí pripojiť je na konci. To znamená, že nemusíte špecifikovať konkrétny index. Môžete vidieť číslo, a potom v hranatých zátvorkách nie je index zadaný. A bude to poznať - PHP bude vedieť, že stačí pridať na koniec zoznamu, ďalšie voľné miesto. Takže môžete vidieť 1 priamo tam v tej 0 mieste, 2 išiel tam na prvom mieste. 3. ide - je tam pridané rovnako. Takže to trochu dáva zmysel. Len stále pridávame ju, a potom, keď sme ozvenou index číslo 1, bude tlačiť na hodnotu 2. Potom máme polia, ktoré sú asociatívne pole. Asociatívne pole, miesto s číselnými indexmi, to, čo robia, je, že majú indexy, ktoré sú podľa špagátu. Môžete vidieť, miesto - Zbavil som sa všetkých týchto číselných indexov, a teraz je to key1, key2, key3, a oni sú v úvodzovkách znamenať, že sú všetky reťazce. Takže môžeme mať príklad. Príkladom je to, že máme TF, a to je meno indexu. Chystáme sa dať "Ali" ako názov, na indexe, kalórií zjedli, môžeme dať int tentoraz namiesto reťazec, a potom na indexe rád, môžeme dať celý rad vnútri nej. Takže je to druh - je to podobný koncept, ako sme mali indexy s číslami, ale teraz môžeme zmeniť indexy okolo mať je ako reťazce miesto. Môžete to urobiť tiež, okrem toho len robí to individuálne, môžete to urobiť všetko v jednom bloku. Takže môžete vidieť, že tf tohto poľa, a potom sme sa vydali ich všetky do jednej obrie hranatá zátvorka sady. Tak, že môže veci urýchliť. Je to skôr štylistické voľby ako ne. Máme tiež slučky. V jazyku C máme slučky, ktoré fungujú ako tento. Mali sme našu ponuku, a išli sme od indexu 0 až do konca zoznamu, a my sme to všetko vytlačiť, nie? Okrem Problém je, že pre asociatívne pole, sa nemusí nutne vedieť, tie číselné indexy pretože teraz máme reťazec indexy. Teraz používame foreach slučky, ktoré znovu, dúfajme, že použité v pset 7. Foreach slučky bude len vedieť, každú časť zoznamu. A to nemusí vedieť presne číselný index, ktorý máte. Takže máte syntax foreach, takže je to foreach, vložíte pole. Takže moje pole sa nazýva pset, a potom ako, na slovo, a potom si dať tento miestny dočasnú premennú, ktoré budete používať len pre konkrétnu vec, ktorá sa deje držať špecifické - jedna inštancia alebo jedna časť poľa. Pset num bude mať jeden, a potom možno to bude mať číslo 6, a potom to bude mať číslo 2. Ale to je zaručené, že prejsť každú hodnotu, ktorá je v poli. Užitočné funkcie, ktoré by ste mali vedieť, v PHP sa vyžadujú, takže je zaistené, že budete, vrátane niektorých súborov, echo, exit, prázdny. Vrelo odporúčam vám pozrieť sa na pset 7 a pozrieť sa na týchto funkcií. Možno budete musieť poznať tie, tak by som určite vedieť, čo presne tí sú všetci robia. A teraz ideme prejsť rozsahu veľmi rýchlo. V rozsahu, PHP je tak trochu funky veci, na rozdiel od C a tak sme len tak rýchlo prejsť. Takže povedzme, že začneme v tej šípky, ktoré máme tam. A budeme začať s $ i Takže premenná "i" sa bude 0, a my sme len tak, aby tlač je v tom veľkom bielom poli tam. Chystáme sa začať s i0, a potom ideme na to echo. Takže tam je 0. A potom budeme zvyšovať ju v pre slučke, a potom to bude hodnota 1. Jedným z nich je menej ako 3, tak to bude prejsť, že pre sláčiky, a potom budeme vidieť, že znovu vytlačiť. Chystáme sa ju zvýšiť opäť na 2, a 2 je menšia ako 3, tak to bude prejsť pre sláčiky, a to bude tlačiť dve. Potom budete na vedomie, že 3 je menšia ako 3, takže budeme vymaniť sa z cyklu for. Takže teraz sme vystúpil, a potom budeme chodiť do aFunction. Dobre. Takže musíte si uvedomiť, že táto premenná, ktoré sme vytvorili, 'I' premenná, nie je miestne rozsahom. To znamená, že to nie je miestna slučky, a že premenná ešte môžeme pristupovať a meniť potom, a to bude ešte efektívnejšia. Takže ak idete do funkcie dnes, uvidíte, že sme tiež použiť "i" premenné, a budeme zvyšovať 'i' + +. Človek by si myslel, spočiatku založený na C, že je to kópia "i" premenné. Je to úplne niečo iné, čo je správne. Takže keď sme ju vytlačiť, budeme tlačiť "aj" + +, ktorý je do tlače, že 4, a potom budeme - Ospravedlňujem sa. Potom ideme na koniec z tejto funkcie, a budeme mať kde, že šípka je práve teraz. To znamená, že potom, však, aj keď funkcia zmeniť hodnotu "i", nemala meniť mimo funkciu, preto, že funkcia má samostatný priestor. To znamená, že keď sme echo "i", sa to nezmenilo v rámci funkcie, a tak potom budeme opäť tlačiť 3. Rôzne veci, o pôsobnosti v PHP, ako v C. Teraz v PHP a HTML. PHP sa používa, aby sa webové stránky dynamický. Je to trochu robí veci inak. Máme sa líši od HTML. S HTML, vždy len rovnakú statickú vec, ako je, ako Rob ukázal, vzhľadom k tomu, PHP, môžete zmeniť veci, podľa toho, kto je užívateľom. Takže ak som to, som, "Ste prihlásený ako -" a potom meno, a môžem zmeniť názov. Takže teraz menuje Josef, a to je "o mne", ale potom som si tiež zmeniť názov, aby Tommy. A to by bolo niečo iné. Takže môžeme tiež meniť rôzne veci o ňom, a ukáže iný obsah na základe názvu. Takže PHP môže trochu zmeniť to, čo sa deje vo vašich webových stránkach. Rovnaký tu. Napriek tomu, na vedomie, že majú iný obsah, aj keď sú technicky stále prístup, že rovnaké webové stránky na povrchu. Generovanie HTML. K dispozícii sú 2 rôzne spôsoby, ako to urobiť. Takže pôjdeme do tohto práva teraz. Prvý spôsob je, máte - jo, ospravedlňujem sa. Takže stačí mať pravidelné pre sláčiky v PHP, a potom echo v PHP a echo z HTML. Použitie, čo vás Rob ukázal HTML skriptu a potom pomocou PHP tlačiť len vytlačiť na webové stránky. Alternatívny spôsob je urobiť to ako by ste oddeliť PHP a HTML. Takže môžete mať rad PHP, ktorý začína na slučke, potom môžete mať riadok kódu HTML v samostatnej veci, a potom ukončiť slučku, opäť s PHP. Takže je to trochu oddeliť to. Na ľavej strane, môžete sa, že máte všetky - je to len 1 kus PHP. Na pravej strane môžete vidieť, že máte rad PHP, Máte rad HTML, a budete mať rad PHP znova. Tak oddeľovanie to do toho, čo robia. A všimnite si, že tak ako tak, pre jedného z nich, stále vytlačiť obraz, obraz, imidž, tak, že HTML ešte je vytlačený rovnakým spôsobom. A potom budete stále vidieť 3 snímky zobrazovať na vašich webových stránkach. Takže je to 2 rôzne spôsoby, ako robiť to isté. Teraz máme formulárov a žiadostí. Ako sa vám Rob ukázal, existujú formy HTML, a my sa len vietor cez to. Máte akcie a máte metódu, a vaše akcie druh vám ukáže, kam sa chystáte odoslať, a spôsob to, či to bude GET alebo POST. A požiadavku GET, ako povedal Rob, znamená to, že sa chystáte dať vo forme a uvidíte, že ako URL, zatiaľ čo požiadavka POST sa nezobrazí v adrese URL. Tak malý rozdiel. Avšak, jedna vec, ktorá je podobná vec je, že POST a GET sú rovnako neisté. Takže si môže myslieť, že len preto, že nechcete vidieť v URL, to znamená, že POST je bezpečnejšie, ale stále môžete vidieť vo vašich súborov cookie v informáciách, ktoré posielate. Takže si nemyslím, že o jedno alebo druhé. Ďalšia vec k poznámke je, že máte aj oddiel premenné. Vy ste používal toto v pset 7, ako dostať svoje ID užívateľa informácie. Čo sa stalo, bolo to, že môžete použiť tento asociatívne pole, $ _SESSION, A potom budete môcť pristupovať rôzne veci a uložiť rôzne veci cez stránkach. Posledná vec je, že máme SQL, Structured Query Language, a to je programovací jazyk pre správu databáz. Čo presne je databáza? Sú to kolekcia tabuliek, a každá tabuľka môže mať podobné typy objektov. Takže sme mali tabuľku užívateľov vo vašej financií pset. A prečo sú užitočné? Vzhľadom k tomu, že je to spôsob, ako trvalo uchovávať informácie. Je to spôsob, ako sledovať, čo a správu vecí a vlastne vidieť to na rôznych stránkach a sledovanie. Vzhľadom k tomu, ak ste práve uložte ju na tej jednej bezprostrednej chvíli a potom ju použiť neskôr, nebudete môcť pristupovať niečo, čo ste si uložili. Máme štyri hlavné veci, ktoré používame pre príkazy SQL. Máme SELECT, INSERT, DELETE a aktualizácie. Tie sú veľmi dôležité pre vás vedieť, pre kvíz. Budeme rýchlo prejsť vyberte práve teraz. V podstate ste výberom riadkov z databázy. Takže ak máte, tu - máme tieto dve odlišné veci, a chceme vybrať z tabuľky tried kde úžasné - kde v úžasnej stĺpci hodnota je 1. Takže si môžete pozrieť tu, máme tieto dve veci názov triedy, CS50 a Stat110, a máme triedy ID a heslo. Takže ak chceme vybrať všetky uvedené informácie. Potom môžete vidieť tu, že je to trochu vyberanie z tej úžasnej stĺpce, kde všetky veci sú 1, a potom to má ID triedy, názov triedy a slogan, ktorý sa môže vybrať. Ako presne to robíte v kóde? Musíte použiť PHP. Tak to je niečo o tom, ako PHP a SQL sa vzťahujú ku každému iný. Teraz máme kód, a budeme používať naše funkcie dotazu ako sme to urobili v pset 7, a budeme spustenie dotazu SQL. Potom budeme mať - musíme vždy overiť, či Row trojitý rovný ak false. Takže znova, budete chcieť skontrolovať typ a hodnotu, a potom, ak to nefunguje, potom budete chcieť ospravedlniť, ako obvykle, ako sme to urobili v pset 7. V opačnom prípade budete chcieť prechádzať všetko sa ti hodiť foreach slučky, ktoré sme práve prešiel. Teraz, keď sme priechodná a urobili sme to v minulosti, predpokladajme, že náš dotaz prešiel, teraz máme slučky foreach. A prvý riadok má, takže tu je rad, tu, je to zabalený v krabici. Bude to vytlačiť všetky informácie, ktoré sa to dostali. Takže to bude tlačiť na dne "Wanna Learn HTML?" Potom to bude ísť na ďalší riadok, pretože je dokončená prvá pre sláčiky, a tak potom to bude tlačiť druhý riadok z toho, ktorý sa bude STAT110, Nájdite všetky okamihy. Jedna posledná vec je na SQL zabezpečenia. Viem, že Dávid sa dotkol na to trochu v prednáške. Môžete si prečítať neskôr. Je to naozaj smiešne. SQL Injection je trochu ošemetná vec. Povedzme, že ste práve držať týchto premenných priamo do dotazu, ako môžete vidieť v tomto prvom riadku. Takže sa zdá v poriadku, že jo? Len uvedenie na užívateľské meno a heslo k SQL dotazu, a chcete, aby loď ju a získať to, čo je v tabuľke dát. To sa zdá dosť jednoduché. Takže povedzme, že niekto dáva, na zadanie hesla, tento OR texte priamo tu - by mala byť skutočne v červenom poli. Takže povedzme, že dať toto heslo do - to je to, čo vstúpi. Tak oni sú uvedení OR "1" = 1. Druh hlúpa hesla mať. Teraz sa poďme jednoducho nahradiť ju, a budete na vedomie, že v tomto SQL dotaze podnikom, vyhodnocuje vždy pravda, pretože budete na vedomie, že môžete SQL dotazu vybrať všetky tieto informácie alebo môžete len 1 = 1. Tak to je vždy hodnotiť na hodnotu true. Že to nebude naozaj pracovať, pretože to znamená, že hacker môže preniknúť do vášho systému. Riešením tohto problému je, že musíte používať systém CHOP, čo znamená, že budete musieť použiť otázniky, čo je to, čo vy používané v pset 7, kde budete používať otáznik v mieste, kam chcete dať niečo, a potom budete mať čiarku, a potom budete mať neskôr, po vašom reťazec, rôzne premenné, ktoré chcete nahradiť do otáznikom. Takže budete poznamenať, že teraz mám tyhle červené otázniky. Potom som dal premenné po mojich strún, takže viem, že je nahradiť v tomto poradí potom. To zabezpečí, že ak to niekto robí takto, a majú alebo 1 = 1 situácii, že sa uistite, na zadnom konci, uistite sa, že nebude vlastne rozbiť dotazu SQL. Dobre, tak to je celkom veľa to, víchrica PHP a SQL. Veľa šťastia vám všetkým, a teraz sa v štáte Oregon [Oreoluwatomiwa Babarinsa] Dobre všetci. Je čas ísť cez nejaký JavaScript a niektoré ďalšie veci veľmi rýchlo, takže nemáme dnes večer držať vás. JavaScript. Áno. JavaScript je celkom cool vec, údajne. Veci, ktoré naozaj potrebujete vedieť o JavaScriptu, je to niečo ako na strane klienta koniec, aké sú vaše webové aplikácie sa bude robiť. Je tu niekoľko vecí, ktoré jednoducho nechcú starať o celú dobu na strane servera. Všetky malé interakcie, zvýraznenie jednu vec, že ​​niečo zmizne. Naozaj nechcem hovoriť k serveru po celú dobu za to. A niečo z toho nie je ani možné vykonať na strane servera. To je dôvod, prečo potrebujeme niečo ako JavaScript. Skvelé veci o JavaScriptu: To je dynamicky napísaný. Čo to znamená, že váš program nepotrebuje vedieť, čo, presne, premenné sú, keď píšete to. Je to tak nejako prísť na to, ako to beží. Ďalšie veci, ktoré sú v pohode o tom: Je to zložená zátvorka jazyk, čo znamená, že syntax je podobná C a PHP. Nemusíte robiť veľa prepracovať, keď sa učíte JavaScript. Tu máme trochu JavaScriptu. Zaujímavá vec, tu je to, že keď sa pozriete na to, máme trochu JavaScriptu tu v tagu hlavy. Čo je to v podstate len patrí súbor JavaScript. To je jeden spôsob, ako môžete zahrnúť JavaScript do vášho programu. Potom druhý trochu je vlastne nejaký inline JavaScript, veľmi podobný štýl inline s CSS, a vy ste len písať nejaký kód veľmi rýchlo tam. JavaScript má pole. Len ďalší spôsob, ako udržať dát okolo, veľmi užitočné. Veľmi príjemné a jednoduché syntaxe. Môžete použiť hranaté zátvorky pre prístup všetko a udržať všetko pohromade. Nič príliš zložitá. Super vec o JavaScriptu a skriptovacích jazykov všeobecne je, že nemusíte mať strach o veľkosti poľa. Stačí použiť Array.length a sledovať to, a tiež polia môžete zväčšiť alebo zmenšiť, ako budete potrebovať, aby to. Takže vy ani nemusíte obávať akéhokoľvek druhu, oh nie, musím prideliť viac vecí, alebo niečo také. Super vec je, že JavaScript je niečo, čo nazýva objekty. Je to objektovo-orientovaný jazyk, takže to, čo bolo, je, v podstate, spôsob, ako pre vás, aby skupiny dát dohromady, trochu podobný struct, ale môžete pristupovať ako struct alebo v syntaxi asociatívne pole. Je to celkom jednoduché, a čo môžete urobiť s týmto je skupina dát dohromady ak máte veľa údajov, ktoré sa vzťahuje. Vzhľadom k tomu, že je to všetko, čo potrebuješ k popisu automobilu, nemusíte ho mať v veľa rôznych miest. Môžete len držať je do 1 objekt v JavaScriptu. Ako asi viete, Iterácia je jedným z tých nudné úlohy. Proste to cez znova. Musíte hovoriť každý objekt v aute, alebo budete musieť prejsť každú položku v zozname, alebo niečo také. Takže JavaScript musí, podobne ako PHP, syntaxe foreach. V tomto prípade, je to v slučke. Ak chcete používať iba na objekty to. Tam sú niektoré problémy, ktoré sa vyskytujú, ak používate tento na poliach. Všeobecne je jedna z tých, čo sa však, že je veľmi užitočné, pretože ste odstrániť veľa réžia pretože nemusíte vytiahnuť všetko, čo v objekte sami. Nemusíte si pamätať všetky kľúčové mená. Proste nejako dostať je späť v tejto syntaxi. V tomto, FOR, chcete len spomenúť že ste sa dostal späť všetky kľúče, veľmi podobným spôsobom ako tabuľky hash. Ak si pamätáte z toho, keď by sa dal v reťazci by ste mohli dostať niečo von ktoré by mali priradenú hodnotu s ním. Čo môžete robiť s týmto je, môžete povedať, v poriadku, Dal som do auta a zavolal som to Ferrari. Takže si môžete dať v reťazci Ferrari neskôr, a môžete dostať to von. A môžete to urobiť v slučke, sa v cykle. Takže len viac o objektoch. Kľúčovou vecou z toho, čo potrebujete mať na pamäti, je, že môžete použiť objekt struct ako syntaxe, kedykoľvek budete chcieť s nimi, výnimkou prípadov, kedy to, čo si bude používať ako reťazec nie je platný názov premennej. Takže keď sa pozriete na to, že máme kľúč s medzerami. No, ak ste mali dať object.key, priestor, s, priestor, priestor, že by sa jednoducho nemalo zmysel syntakticky. Takže si len môžete urobiť s týmto druhom syntaxe držiaku. Tiež JavaScript je veľmi priestor-múdre PHP. Máte dva spôsoby, ako riešiť priestor. Nemôžete mať var pred premennú, a to len znamená, že to je globálna. Môžete ho vidieť odkiaľkoľvek. Dokonca aj keď ste sa dať do príkazu if, nikde inde v kóde po tomto okamihu ste mohli vidieť, že premenné. Ďalšia vec, aj keď je s var, je obmedzená na čokoľvek funkcie ste palcov Ak nie ste vo funkcii, dobre, je to globálny. Ale ak ste vo funkcii je viditeľná len v rámci tejto funkcie. Nemám príklad, ale, jo. Je to jedna z tých vecí, kde môžete spravovať to, čo premenné chcete byť globálne, čo premenné, ktoré chcú byť lokálne, ale musíte dávať pozor na to, pretože nemáte typ jemné ovládanie zrna, čo robíte v C, kde ak niečo je deklarovaný v cykle for, bude to, aby zostali v tom, že pre sláčiky. Čo sme vlastne záleží používate JavaScript pre manipuluje webové stránky, nie? Myslím, že je dôvod, prečo to robíme. K tomu budeme používať niečo, čo nazýva DOM. Document Object Model. V podstate to, čo to urobí, je, že sa všetky vaše HTML a modely ju do veľa objektov, ktoré sú vnorené do seba. Môžete začať s niečím, ako je tento. Máte, na pravé pre mňa, partia kódu tam, že je to druh - Človek by si myslel, že by bolo veľmi ťažké manipulovať, pretože by ste sa analýze cez veľa texte a majú sa dať seba veci. A čo keď to nie je správne naformátovaný? Zlé veci sa bude diať. Takže JavaScript sa postará o to za vás, a vy dostanete príjemnou dátovú štruktúru, ako ten, po mojej ľavici, kde stačí mať doklad, a vo vnútri sa, že máte niečo ako HTML, a vo vnútri, že máte hlavu a telo, a v tej hlave máte titul, a tak ďalej, a tak ďalej, a tak ďalej. To zjednodušuje manipuláciu webové stránky tak, že je to len, oh, chcem hovoriť k tomuto objektu. Zoradiť veľmi podobným spôsobom by ste hovoriť s iným objektom, ktorú ste uzavreli sami. Ako som povedal, všetko DOM v objekte dokumente. Buď je to len jedno miesto, a potom môžete ísť v ňom nájsť veci, a môžete to urobiť - to je starý štýl, ako to urobiť, až tam, kde robíte document.getElementById, a potom meno, a ako ste si asi povie, to dostane veľmi nemotorný po chvíli. Takže ste asi nechcete robiť, že. To je dôvod, prečo máme Ďalšia vec, ktorú budeme o tom hovoriť po tomto. Kľúčovou vecou je tu to, že v poriadku, budete musieť všetky tieto prvky, jo? Takže možno by som mohol zmeniť farbu niečo, keď sa stránka načíta. Tak čo? Čo keď je moja užívateľská klikne niečo? Chcem, aby to niečo zaujímavé, keď kliknú niečo. To je dôvod, prečo máme udalostí. Môžete v podstate nájsť ľubovoľný prvok vo vašom DOM, a potom povedať, hej. Keď sa to načíta alebo niekto klikne, alebo keď sa myši nad ním, niečo s ním. A to, čo máte, je, budete mať funkcie, ktoré zvládne za vás. Tieto funkcie sú obslužné rutiny udalostí. Aké Sú - je to len fantázia spôsob, ako hovoriť, Táto funkcia sa vykonáva iba vtedy, keď sa táto udalosť stane. Tak to spracováva udalosť, ktorá nastane. To je, ako by ste vyložiť obslužnú rutinu udalosti. Mám nejaké tlačidlo, a keď na neho kliknete, to exploduje. Takže sa nemusíte kliknite na tlačidlo. To je jeden spôsob, ako sa blíži to, že jo? Máte tag tlačidlo, a na kliknutie budete mať reťazec, ktorý hovorí, oh, mimochodom, ja to vybuchuje vec pre mňa. Inak je to proste ako normálne tlačidlo, ktorým ste práve vytvorili. Môžete to urobiť aj iný spôsob, uchopením DOM element, ale budeme šetriť, že po tom, čo hovoríme o jQuery. JQuery: Je to knižnica, ktorá je cross-browser. Môžete ju použiť na čokoľvek. A to len vám dáva veľa nástrojov pre prácu s Vzhľadom k tomu, JavaScript, zatiaľ čo silný, nemá všetky nástroje, ktoré potrebujete po vybalení z krabice naozaj riešení webové aplikácie budete chcieť robiť. Tak to zjednodušuje veľa vecí, dáva vám veľa funkcií po vybalení z krabice, ktoré by ste normálne musieť napísať sám, znova a znova a znova. A práve robí veci veľmi jednoduché. Máte tiež selektory, ktoré vám umožní vziať všetky tie prvky, od DOM oveľa viac jednoducho, bez toho aby museli používať tieto veľmi dlhé volanie funkcie. Viac informácií o týchto selektory. Máte, tam ste, povedzme, Chcem sa dostať prvok s ID "skaly." No, jQuery, je to len $ a potom reťazec, ktorý má pol kila, a potom "skala". Je to veľmi jednoduché a oveľa rýchlejšie než tradičné JavaScript spôsob riešenia tohto problému. A máte podobné veci pre triedy a typy prvkov. jQuery je - jedným z chladnej rysy sa môžete trochu stlačiť so svojimi otázkami na vášho DOM veľmi, veľmi rýchlo. Teraz sme späť do spracovania udalostí, a to je to, ako by ste zvládnuť jednu udalosť v jQuery. Takže, čo budeme tu hovoríme, v poriadku. Mám tag script, že jo? Tak som si to inline JavaScript. Čo budeme robiť, je, že sa chystáte povedať, v poriadku. Ak je dokument pripravený, čo znamená, že dokument je načítaný, sme sa ísť do tejto funkcie, a budeme hovoriť, všetko v poriadku, Táto funkcia je v skutočnosti robí niečo iné. Je to v podstate hovorí, dobre, daj mi prvok s ID "MojeID". A potom dať tento funkčný rutínu, ktorý vykoná, keď na neho kliknete. V podstate to, čo to robí, je, že hovorí, všetko v poriadku. Načítanie stránky, takže budem v, nájsť tento prvok, dať túto obslužnú rutinu udalosti, a to v podstate nastaví vaše stránky pre vás. A to je to, ako budete chcieť premýšľať o spracovanie udalostí. Stačí len chcieť premýšľať o tom, v poriadku, keď sa vyskytne niečo, čo chcem, aby sa stalo? Nechcete myslieť, jo, ja potrebujem, aby sa ubezpečil rozhovory To, čo k tejto veci, táto vec bla bla bla, pretože si len chcete hovoriť, čo sa týka udalostí. Keď sa to stane, to sa stane. Keď sa to stane, že sa stane. A keby to vyvolať ďalšie veci, to je skvelé. Ale nechcete, aby sa pokúsila urobiť zložitý kód kam spúšťanie viac vecí naraz, pretože ste práve chystá dať si bolesť hlavy. Poriadku. Teraz sa môžeme dostať naše stránky pre spracovanie udalostí, ale povedzme, že moja používateľ klikne na tlačidlo. Čo keď chcem poslať túto žiadosť späť na server, ale ja nechcem, aby znovu načítať stránku, pretože by museli znovu načítať novú stránku zakaždým, keď sa dostane trochu nudný, a prečo ho potrebujem znova strhnúť hlavičky, päty a znovu, a všetky prvky na stránke znova len osviežiť pozdrav alebo čas? Takže to je dôvod, prečo máme niečo ako Ajax. Čo môžeme robiť tu s Ajax je môžeme povedať, v poriadku, Chcem poslať nejaké dáta na server, a chcem sa dostať odpoveď späť, aby som mohol aktualizovať stránku, alebo možno len urobiť nejakú algoritmický výpočet, ktorý nemusí nutne ukázať nič, čo by užívateľa. Čo je potrebné urobiť? No, budete potrebovať adresu URL, ktorú potrebujete hovoriť. Váš server nielen magicky počúvať odnikiaľ. Musíte mať zvláštne miesto, ktoré posielate dáta. A budete tiež potrebovať nejaké dáta na odoslanie, alebo možno je to otázka bezdatovými. Chcete len ping na server a povedať, hej, ja som nažive, alebo niečo také. A potom budete chcieť funkciu, ktorá v podstate spracováva s úspechom. Povedzme, že sa vrátiš nejaké informácie zo servera, a chcete zmeniť názov užívateľa na ich strane. Takže by ste získať informácie späť, a vy by ste tlačiť, že na obrazovke. Čo sa stane, je, keď je stránka pripravená, vytvoriť na funkciu click na toto tlačidlo s názvom privítanie. Čo to teda robí, je, keď je toto tlačidlo tlačil, hovoríte greetings.php, urobíte požiadavku POST, a hovoríš, hej, daj mi niečo z vašej stránky. Nemáme naozaj potreba popisovať, ale greetings.php, Povedzme, vracia "ahoj svet." Takže sa vrátime tento "Hello World", a na úspechu tohto, za predpokladu, že nič nie je v poriadku, potom stačí ísť do tejto cieľovej miesto že sme spresnili a my sme len držať odpoveď tam. A to je veľmi jednoduchý spôsob vytvorenia dotazu Ajax. Veľmi rýchlo, Rob nejako zmienil už, čo sa môže pokaziť, sa zlé veci sa stávajú, takže sa chcete zoznámiť s týmito kódmi odozvy HTTP. Čo sú to sú len ako, 200, všetko prebehlo v poriadku. Niečo iné, zlé veci sa stalo. Je to všeobecne, čo si chcete zapamätať. Ale je príjemné vedieť, že všetky z nich. A konečne, akonáhle sme prešli všetko, musíme veľmi rýchlo hovoriť o dizajne, a potom môžeme nechať všetko odísť. Design. Veci, ktoré chcete mať na pamäti. Opýtajte sa sami seba na tieto otázky: Kto bude používať tento? Aké budú používať ho? Čo moji užívatelia záleží? Čo sa to, čo ich zaujíma? Ste proste nechcú, aby sa o aplikáciu a nechať ju len rast a stať sa to obrie, všetky náročné vec, ktorú nemôžete ani dokončiť. Ak chcete mať jednotlivé ciele a plány, a veci, ktoré chcete osloviť. Nech je to ľahké. To všetko hovorí, v podstate, aby bolo jednoduché pre užívateľa, aby ho používať, nerobia to obrie blob texte ako je tento snímok je v skutočnosti. Proste chcem, aby to bolo niečo, kde je to veľmi jednoduché pre niekoho ísť a robiť to, čo chcú robiť. Nechcete, aby sa navigovať 5 strán sa dostať do primárnej funkcií vášho webu. Ak Google mal 5 strán, ako by ste mohli ešte hľadať niečo, nikto by sa používať. A konečne, prototyp papier, focus group. Majú dobrý dizajn a testovanie postupov. Len preto, že si myslíte, že to funguje u vás, neznamená, že niekto iný si myslí, že to funguje. Ale jo, to je ono. [CS50.TV]