[Review: Toets 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] [Lucas Freitas] Welkom almal. Dit is hersiening vir quiz 1. Net soos 'n disclaimer, dit is - ek bedoel, ons gaan probeer om te dek soveel materiaal as moontlik, maar dit beteken nie dat ons gaan al die dinge wat in quiz 1 kan wees om te dek. So maak seker dat jy ook 'n blik op lesing, artikels, alles wat jy kan. Quiz 1 gaan wees op Woensdag, volgende Woensdag. So seker wees om te studeer. Dit gaan wees, pretty much, soos die eerste toets ten opsigte van sy formaat, maar dit is waarskynlik gaan om te veel moeiliker. Ten minste, verlede jaar toe ek 50, het ek gedink dit was baie moeiliker. So bestudeer 'n baie. Ek gaan data strukture te dek en Huffman kodering. Dit is iets wat baie mense dink, is kompleks, maar Ek gaan om te probeer om dit so maklik as moontlik te maak. Eerste van alles wat ons wil hê julle om te weet vir quiz 1 is om te die konseptuele beskrywings van elk van die data strukture wat ek gaan aanbied verstaan. Dit beteken dat jy nie eintlik implementering van 'n hash tabel in jou quiz 1. Ons wil nie hê jy 'n hele hash tafel te implementeer; miskien sal ons probeer te maak dat jy 'n paar funksies te implementeer, die mees algemene bedrywighede, maar ons gaan nie maak dat jy alles te implementeer. Dus is dit belangrik dat jy die konsep agter elke data struktuur verstaan en ook dat jy in staat is om te kode in C, net die mees algemene bedrywighede hulle het vir elke data-struktuur. En ook in staat wees om wysers en structs te hersien, omdat dit lyk asof hulle 'n baie in die data strukture. Eerstens, gekoppel lyste. Geskakelde lyste is eintlik baie soortgelyk aan skikkings, maar die verskil tussen 'n geskakelde lys en 'n skikking, Eerste van alles, is dat 'n gekoppelde lys het 'n baie buigsame grootte, terwyl dit in skikkings wat jy hoef te kies om 'n baie groot grootte vir die skikking, sodat jy weet dat jy gaan in staat wees om al jou data in daardie skikking te stoor, of jy het malloc te gebruik om 'n buigsame lengte van verskeidenheid te hê. In verband lyste dit is baie maklik om net meer elemente, sit meer elemente in die geskakelde lys verwyder of elemente. En eintlik, as jy nie wil hê dat die geskakelde lys gesorteer moet word, kan jy soek en verwyder elemente in konstante tyd, so O (1) van tyd, so dit is baie handig. Jy moet net versigtig wees om altyd onthou om te malloc en vry wees om die knope, net omdat as jy dit nie doen nie, sal jy al die geheue lekkasies. So gekoppel lyste - die definisie van 'n knoop is net soos wat ons het net daar. Ek sit int n, maar jy kan enige inligting wat jy wil stoor. So as jy wil 'n string te slaan, is dit fine. As jy wil 'n struct te slaan, dit is goed, 'n dubbel, wat jy wil. Ek het net 'n int vir die voorbeelde hier. En jy het 'n wyser na die volgende knoop. So, basies, 'n gekoppelde lys het sommige data, en dan wys dit na die volgende knoop. As dit is die laaste element in die geskakelde lys, dit gaan om te wys op null. So, dit is 'n voorbeeld van 'n geskakelde lys. Goed, so nou kom ons kyk wat ons moet doen as ek wil 'n element in 'n geskakelde lys te voeg. Eerstens sal 'n funksie van die tipe insetsel nietig want ek wil nie iets om terug te keer. En ek gaan 'n int te neem as 'n argument, want ek wil weet wat ek wil hê om in te voeg. So, wat is die eerste ding wat ek moet doen? Wel, ek moet malloc op newnode, so dit is die eerste lyn. Ek is net 'n nuwe node te sit in 'n geskakelde lys. So, wat kan ek doen? Wel, ons weet dat ons in ons die implementering van geskakelde lyste in die klas, het ons altyd sit die kop as 'n globale veranderlike. So wat ons kan doen is om te verander die kop. Ek kan hierdie nuwe node wees om die nuwe hoof, en dit gaan om te wys op die vorige hoof. Hoe kan ons dit doen? Die eerste ding wat ek doen is verander die 'n 'in die nuwe knoop om die waarde, wat geslaag is aan die funksie. Dan newnode volgende gaan aan die hoof wees. Die hoof gaan newnode word. So dit is redelik eenvoudig. Vir die verwydering van 'n knoop, kan ons dit doen, soos - Een manier waarop ons dit kan doen is om te sê, okay, as ek wou om te verwyder, byvoorbeeld, 3, wat ek kan doen is om net wys die vorige node na die volgende knoop van 3. Daarom wil ek net iets soos dit. Maar wat is die probleem met die doen? Ek het 'n geheue lek, so ek toegang tot die nommer 3 het nie meer nie. Die probleem met dit is dat ek nie in staat sal wees dat node te bevry. Ek gaan 'n geheugenlek en (onverstaanbare) gaan my haat. So in plaas van om dit te doen, moet ek waarskynlik 'n tydelike wyser. So het ek temp. Dit gaan om te wys op die knoop wat ek wil om te verwyder. En dan het ek kan beweeg die vorige nodes om te wys op die volgende knoop van die knoop wat ek wil om te verwyder. En ten slotte, kan ek vry om die muis. Moet ek die wyser wat ek gemaak het net daar te bevry? Ek het nie, net omdat - Die verskil is dat hierdie knoop is geskep met behulp van malloc, dus is dit in die hoop, terwyl hierdie een is net verklaar as 'n leë skakelaar in die stapel. So ek hoef dit nie te bevry. Goed. So nou laat ons praat oor stapels. Stapels is redelik eenvoudig. Ons het stapels en toue in die klas net die gebruik van skikkings, maar jy moet vertroud wees - net bewus dat jy ook kan doen stapels in toue met behulp van geskakelde lyste as well. So as jy 'n skikking, wat sou 'n stapel wees? 'N stapel, eerste, sal 'n grote te hê. Jy het om te stoor wat is die grootte van die stapel dat jy nou. En ook sal jy 'n verskeidenheid het, in hierdie geval van getalle, Maar as jy wil, kan dit 'n skikking te wees van snare, 'n verskeidenheid van struct, enigiets wat jy wil stoor. Oor die stapel: Die verskil tussen 'n stapel en 'n geskakelde lys is dat in die stapel jy net toegang tot die laaste element wat gestel is in die stapel het. Dit is die laaste in die naam, eerste uit. Net soos jy het 'n stapel van bak, As jy 'n skinkbord op die top van die stapel, jy het dat die skinkbord om eerste te verwyder toegang tot die ander bak te hê. Dit is dieselfde ding met stapels. So as ek wil, byvoorbeeld, voeg 'n element van 'n stapel, wat moet ek doen? Dit is bekend as druk, en dit is redelik eenvoudig. Die eerste ding wat jy hoef te doen, is om te kyk of die grootte van die stapel is nie groter of gelyk aan die kapasiteit van die stapel. Want as jy reeds op volle kapasiteit, kan jy nie anders voeg. En dan as dit nie, jy moet net die element te voeg tot die stapel. En uiteindelik, inkrementeer die grootte. So dit is redelik eenvoudig. So ek voeg net die nommer 2. En as ek wil om te pop, wat beteken dat ek wil verwyder die laaste element wat bygevoeg is en die standaard van die waarde van die element, die eerste ding wat ek het om seker te maak dat die stapel nie leeg is nie. Want as dit leeg is, kan ek nie terugkeer nie. In daardie geval, ek terugkeer -1. Anders, ek gaan die grootte van die spec te decrement, en terugkeer nommers (s.size). Hoekom het ek decrement die grootte en terugkeer s.size dan? Dit is omdat, in hierdie geval, die spec het grootte 4, en ek wil die vierde element om terug te keer, reg? Maar wat is die indeks van die vierde element? Drie. Aangesien ek nie die grootte - gaan wees 3, ek kan net terug s.numbers (s.size) want dit is 3. So dit is net die indeks. Nou toue. Toue is pretty much dieselfde ding. Die enigste verskil is dat in plaas van laaste in, eerste uit, jy het eerste in, eerste uit. Waarskynlik as jy wag om te gaan na 'n konsert, jy sal nie gelukkig wees as jy 'n stapel in plaas van 'n tou. Synde die laaste persoon om te kom sou die eerste persoon om die konsert te betree nie. Jy sal waarskynlik nie gelukkig wees. In die ry, die eerste persoon om in te kom is ook die eerste persoon uit te kry. So in die definisie van 'n tou, behalwe dat die grootte van die skikking, jy het ook die kop, wat is die indeks aan die hoof van die stapel te hê. Dus is die eerste element op die oomblik. Enqueue is dieselfde as druk vir stapels. As jy baie naïef, sou jy net sê, Wel, ek kan net presies dieselfde ding doen soos ek gedoen het vir die druk. Ek kan net kyk of dit nie buite die vermoë. As dit is, ek terugkeer valse, anders kan ek net die uitvoer van die nuwe waarde en dan inkrementeer die grootte. Maar hoekom is dit verkeerd? Kom ons kyk na hierdie voorbeeld. Ek probeer 'n klomp van die dinge te enqueue, en dan gaan ek dequeue en enqueue. Daar is 'n baie opdragte, maar dit is baie eenvoudig. Ek gaan enqueue 5, so voeg 5, en dan 7, 1, 4, 6, en dan wil ek iets te dequeue, wat beteken dat ek gaan die eerste element te verwyder. So ek gaan die nommer 3 te verwyder, reg? Die eerste element. Goed. Nou as ek probeer om iets anders te enqueue, is wat gaan gebeur? Volgens my implementering, Ek is van plan om die volgende getal te sit in die indeks q.size. In hierdie geval, die grootte is 8, So het die indeks 8 sal hier wees in die laaste posisie. As ek probeer om enqueue 1 reg hier, sou ek die vervang word om die laaste posisie om die nommer 1, wat is heeltemal verkeerd. Wat ek wil doen is om draai om en gaan na die eerste posisie. Miskien sal jy net sê, goed, ek het net om seker te maak as ek kan eintlik iets sit daar. Indien nie, het ek net sê, o, die nuwe volle kapasiteit is eintlik kapasiteit - 1, en jy kan nie 'n element sit daar. Maar wat is die probleem? Die probleem is dat as ek dequeue net alles reg hier en dan het ek probeer om iets anders te voeg, sou dit net sê, Wel, jy was teen volle kapasiteit, wat is 0. Sodat jou ry is weg. Jy het om te draai om, en 'n manier om te draai om dat julle in visioenêre en ander psets geleer is met behulp van mod. Jy kan probeer om dit by die huis om te verstaan ​​waarom jy q.size + q.head sou doen mod kapasiteit, maar as jy kyk hier, ons kan sien dat dit werk. So in die laaste voorbeeld, was q.size 8 en die hoof was 1, want dit was hierdie posisie hier van die skikking. So sal dit wees 8 + 1, 9. Mod kapasiteit 9 sou wees 0. Dit sou gaan na die indeks 0. Ons sal wees in die regte posisie. En dan probeer om die tou by die huis. 'N paar belangrike dinge: probeer om die verskil tussen 'n stapel en 'n tou te verstaan. By die huis, probeer om baie vertroud is met die implementering van enqueue, dequeue, stoot en pop te kry. En ook verstaan ​​wanneer jy elkeen van hulle sal gebruik. So laat ontspan vir 10 sekondes met 'n klomp van die Pokemons. En nou, laat ons terug na data strukture gaan. Hash tabelle. Baie van die mense is bang vir hash tabelle. in probleem gestel 6, speltoetser. Hash tafels en drieë, 'n klomp mense raak bang vir hulle. Hulle dink hulle is so moeilik om te verstaan. Ja? [Rob Bowden] Probleem stel 5. Probleem stel 5, ja. Dankie Rob. Ja. Ses was Huff n 'puff, ja. Probleem stel 5 is Speltoetser, en jy het nie 'n gemors tafel of 'n drie te gebruik. Baie van die mense het gedink dat hulle super moeilik om te verstaan ​​nie, maar hulle is eintlik eenvoudig. Wat is 'n gemors tafel, basies? 'N gemors tabel is 'n verskeidenheid van geskakelde lyste. Die enigste verskil tussen 'n skikking en 'n hash tafel is dat in die hash tafel het jy iets genoem 'n hash funksie. Wat is 'n hash funksie? Ek weet nie of julle hier kan lees. Dit is 'n voorbeeld van 'n hash tafel. Sodat jy kan sien wat jy het 'n skikking met 31 elemente. En wat ons doen in 'n gemors tafel is 'n hash funksie wat gaan 'n sleutelrol te vertaal, elke int tot 'n indeks. As, byvoorbeeld, as ek wil om te kies vir B. Harrison, Ek sou sit B. Harrison in my hash funksies, en die hash funksie sal terugkeer 24. So ek weet wat ek wil B. Harrison te stoor in 24. So wat is die verskil tussen net met 'n skikking en 'n hash tafel. In die hash tafel sal jy 'n funksie wat gaan om jou te vertel het waar die data wat jy wil stoor te stoor. Vir die hash funksie, wat jy wil om te kyk vir 'n hash funksie wat deterministiese en goed versprei is. As jy hier kan sien, jy sien dat 'n groot deel van die data wat ek wou stoor was eintlik 19 in plaas van die gebruik van 31 en 30 en 29, wat almal gratis. So het die hash funksie wat ek gebruik het, was nie baie goed versprei. Wanneer ons sê goed versprei is, beteken dit dat ons wil hê, ongeveer, ten minste 1 of 2 vir elk van die - soos, 'n verskil van 1 of 2 vir elk van die indekse in die skikkings. Jy wil hê, ongeveer dieselfde aantal elemente in elke gekoppel lys in die skikking. En dit is maklik om te kyk of dit geldig is in die hash tafel, sien as hash tabelle. Dan bome. Dit is 'n boom. Bome in Rekenaarwetenskap is onderstebo vir een of ander rede. So hier het jy die wortel van die boom en dan die blare. Jy moet net weet wat die naam vir ouers en kind. Elke node het sy kinders, wat die knope wat onder die ouer. So, byvoorbeeld, is 2 gaan na die ouer te wees vir 3 en vir die ander kind net daar, terwyl 3 gaan die ouer vir 1 en die ander kinders wat daar te wees. En 1 gaan 3 se kind te wees, en so aan. Ons het iets baie meer interessant, bekend as 'n binêre soek boom in wat al die waardes op die reg van 'n knoop gaan wees aan die regterkant, reg hier - op die regte, gaan groter as die element in die stam te wees. So as ek die nommer 5 hier, al die elemente op die regte gaan meer as 5 te wees, en aan die linkerkant al die elemente gaan na minder as 5 wees. Hoekom is dit nuttig? Wel, as ek wil om te kyk of die nommer 7 is hier, byvoorbeeld, Ek gaan net tot 5 eerste en ek gaan om te sien, is 7 meer of minder as 5? Dit is groter, so ek weet dit gaan hê om op die reg van die boom. So ek het baie minder dinge om na te kyk. In die implementering van 'n binêre soek boom, die knoop, is ek net gaan hê om data te hê, so int n, jy kan ook 'n string of enigiets wat jy wil. Jy moet net versigtig op die definisie van wat is groter wees, wat minder is. So as jy het stringe, byvoorbeeld, jy kan definieer dat al hierdie dinge op die regte gaan groter lengte te hê, links gaan laer lengtes te hê, so dit is regtig aan jou. Hoe kan ek implementeer vind vir BST? Die eerste ding wat ons sal moet doen, is om seker te maak dat die wortel is leeg. As dit is NULL, beteken dit dat die ding is nie daar nie omdat jy hoef nie eens 'n boom, reg? So ek terugkom onwaar. Anders, ek gaan om te kyk of die nommer is groter as die waarde in die wortel. Ek gaan om te probeer om die element te vind op die regte van die boom. Jy sien dat ek met behulp van rekursie hier. En dan as dit is minder, ek gaan om te kyk na die linkerkant. En uiteindelik, anders, as dit is nie minder of nie groter, beteken dit dat dit die waarde self. So ek terugkeer net waar. Jy kan hier sien dat ek gebruik as, as, indien. En onthou, in quiz 0, ons het 'n probleem wat het as, as, as, en jy is veronderstel om die ondoeltreffendheid te vind, en die ondoeltreffendheid is dat jy gebruik indien. Jy moet gebruik het as, anders as, anders as, en anders. So, moet ek gebruik anders as en anders as en hier nog? Is daar iemand - ja? [Studente praat, onhoorbaar] Dit is perfek nie. So sy sê dat dit nie saak maak, Net omdat die ondoeltreffendheid wat ons gehad het voordat was dit omdat, miskien as 'n toestand tevrede was, sodat jy het 'n aksie uitgevoer word, maar dan is jy gaan al die ander voorwaardes na te gaan. Maar in hierdie geval, is dit terug dadelik, so dit maak nie saak. So jy hoef nie te anders gebruik as. En uiteindelik, laat ons praat oor drieë, wat is almal se gunsteling. 'N Drie is 'n boom van skikkings. Dit is baie vinnig om op te kyk waardes, maar dit maak gebruik van 'n baie van die geheue. En dit is gewoonlik woorde te filter, sodat wanneer jy wil implementeer, byvoorbeeld, weet ek nie, soos 'n telefoon boek in jou selfoon en jy wil in staat wees om B te tik en net die name van mense wat B. het Dit is baie maklik om te implementeer met behulp van 'n drie, byvoorbeeld. Hoe kan jy 'n knoop definieer in 'n probeer? Jy moet net 'n Bool wat gaan is_word word te hê. Dit verteenwoordig dat die gebruik van al die karakters voor die knoop, jy in staat was om 'n woord te vorm, en dan sal jy 'n verskeidenheid van verwysings na nodes. Kan jy sien dat ons 'n verskeidenheid van ouer knope, so knoop * verskeidenheid? Ja? So laat ons sien hoe dit sal werk. Vir die speltoets, Ons het 'n verskeidenheid van 27 elemente, want ons het al die briewe plus die toespraak. Voor hier is ek net gaan om te gebruik 2, want ek wil in staat wees om op die bord te skryf. Goed. So, dit is 'n voorbeeld van 'n drie. As ek maar net definieer die eerste knoop, sal ek 'n skikking van 2 elemente wat 2 verwysings na NULL, so ek net 'n 'en' B '. En ek gaan 'n Bool wat sê is_word te hê. Dit gaan onwaar is vir die eerste een te wees, net omdat, voor dat jy nie enige karakters het nie. So 'n leë woord is nie 'n woord. So dit is onwaar. As ek wil 'n "toe te voeg tot hierdie woordeboek, wat sou ek doen? Ek wil net 'n nuwe knoop vir 'n 'te malloc, en voeg dan die woord waar. So is dit net verteenwoordig dat hy 'n "gaan om waar te wees. Sin maak? Dan as ek wil 'ba' by te voeg, sal ek moet malloc 1 vir 'b', en dan gaan ek die opstel van die boolean vals, omdat 'b' op sigself is nie 'n woord. Dan gaan ek 'n ander een vir 'n ", so 'ba' to malloc, en dan gaan ek te rig dit is 'n woord te ware. Omdat 'ba' is 'n woord. En dan as ek wil om te sien of 'B' is in hierdie woordeboek, Ek kan net gaan na die eerste een, "b". Ek gaan af, en ek kyk na is, en dit sê onwaar. So dit is nie 'n woord. As ek wil 'ba' om seker te maak, Ek gaan aan die eerste een, "b", en dan gaan jy na 'n ", en ek sien waar is, so dit is 'n woord. Sin maak? Baie van die mense deurmekaar raak deur drieë gedruk. Nee? Ten slotte, Huffman kodering. Huffman kodering is baie nuttig geheue te red en teks lêers compress, Net omdat 'n baie kere wat jy gebruik 'n "en" e ", byvoorbeeld, in jou dokumente, maar ek weet nie of julle ouens gebruik 'Q' of 'Z' soveel. Na net 1 byte vir elke enkele karakter, elke enkele - die 256 karakters wat ons in die ASCII tabel is nie baie optimale, net omdat daar is 'n paar karakters wat jy baie meer gebruik nie, sodat jy moet waarskynlik minder geheue gebruik vir diegene. Hoe gebruik ek Huffman kodering? Ons het 'n Huffman boom te doen.  'N Huffman boom het nodes wat 'n simbool wat gaan wees soos 'n "," b "," c ", die brief, watter letter jy, 'n frekwensie wat is die frekwensie wat die woord in die teks, dat jy die skep van die Huffman boom, en dan 'n knoop wat gaan om te wys aan die linkerkant van die Huffman boom en 'n ander knoop wat gaan om te wys op die regterkant. Dus net soos 'n boom. Hoe kan jy 'n Huffman boom bou? Jy gaan die 2 nodes wat die laagste frekwensies te tel. As jy 'n das jy gaan die 2 nodes te kies wat die laagste ASCII waardes as well. Dan is jy gaan 'n nuwe boom uit die 2 nodes te skep wat gaan die gesamentlike frekwensie in die voorgangernode te hê. En dan gaan jy die 2 kinders uit die bos te verwyder en dit te vervang met die ouer. En jy gaan om dit te herhaal totdat jy het net 1 boom in die bos. So laat ons sien hoe jy 'n Huffman boom doen vir ZAMYLA. Jy kan hier sien dat al die briewe het frekwensie 1, behalwe vir 'n '; wat frekwensie 2. So ek gemaak nodes vir al die briewe wat ek sit in orde van ASCII waarde en frekwensie. So as ek wil die eerste boom te skep, sal dit met 'L' en 'M'. So dit is hier. Die frekwensie van die paar sal wees 2 want dit is 1 + 1, dan is die volgende 2 met die laagste frekwensie is 'Y' en 'Z'. En dan moet ek hulle almal om - 'n frekwensie van 2. So watter is die een wat die laagste ASCII waarde vir die volgende een? 'A' en 'L'. So ek skep van die nuwe knoop, en uiteindelik, dit is 4 en 2, so 2 gaan wees op die linkerkant. En dit is die Huffman boom. Dan as ek wil 'n paar teks te skryf, soos in binêre om te skakel na die teks, met behulp van die Huffman boom is baie maklik. Byvoorbeeld, as ek sê dat die verskuiwing na links is 'n 0 en beweeg na die regterkant is 'n 1, Wat is dit gaan voor te stel? Dus, net soos 1, 1, so reg, reg, en dan 0, so gelaat sou wees L, en dan 1, 0, 0. So 1, 0, sodat net 1, 0, 'A'. En dan 0, 1, so 'Z'. En dan 1, 0, 0 - geen. 0, 0 sal wees 'Y', so lui. So dit is al wat vir my, Rob se gaan oor te neem. [Rob Bowden] So, week 7 dinge. Ons het 'n baie om te gaan oor baie vinnig. Bis-operateurs, buffer oorloop, CS50 biblioteek, dan HTML, HTTP, CSS. Almal net 15 tot 20 minute. Bis-operateurs. Daar is 6 van hulle wat jy nodig het om te weet. Bitwise en bis of, XOR, links verskuiwing, reg verskuiwing en nie. Reg te skuif en nie jy skaars gesien in lesing by almal. Ons gaan oor dit vinnig hier, maar dit is goed om te weet dat hierdie is die 6 wat bestaan. Onthou dat bis operateurs is soos wanneer jy 3 + 4. Jy word nie met die binêre van 3 en 4. Met bis operateurs jy eintlik die hantering van die individuele stukkies van die nommers 3 en 4. Dus is die eerste een wat ons sal sê, is bis nie, en al wat dit doen is om al die stukkies te draai. So hier is, as jy dit wil skryf in C, sou jy dit nie skryf as ~ 11011 of wat ook al, sou jy skryf dit graag ~ 4, en dan sal dit die binêre voorstelling van 4 flip. So hier, ~ van 'n paar binêre getal 1101101 gaan presies al 1's tot 0 se Flip en alle 0 se 1's. As ek sê daar is die gereelde gebruik van hierdie, en ons sal sien dit in 'n bietjie, is soos ons wil met 'n paar nommer te kom waar al die stukkies is 1, behalwe vir een van hulle. So is dit gewoonlik makliker om die nommer te druk waar net dat enkele bietjie gestel is, en dan neem die ~ van dit, sodat elke ander bietjie is ingestel behalwe vir daardie een. So dit is wat ons gaan meer in 'n bietjie om te gebruik. Bitwise of. Hier is 2 binêre getalle, en dié 2 getalle is redelik verteenwoordigende, aangesien hulle verteenwoordig elke moontlike kombinasie van stukkies kan jy nodig het om te werk op. Hier, toe ek or'd elke bietjie, ons is maar net gaan reguit af vergelyk. So aan die linkerkant ons het 'n 1 en 'n 1. Toe ek bis | diegene, wat gaan ek te kry? Een. Dan bis | 0 en 1 gaan my te gee nie? Een. Bis 1 en 0 gaan dieselfde ding, een. Bis 0 | 0 gaan gee my 0. Dus is die enigste geval waar ek 0 is in die 0 | 0 geval. En jy kan dink wat net soos jou logiese ors. So as jy dink van 1 as waar en 0 as vals, dieselfde ding hier van toepassing. So waar of waar is, is waar, waar of vals is waar. Vals of waar is waar, vals of onwaar is die enigste ding wat is eintlik onwaar is. Hier is die voorbeeld wat jy moet weet as 'n goeie voorbeeld van wanneer bis operateurs gebruik word. Hier sou ons of kapitaal "A" met Ox20, en ons sal kyk na dit in 'n tweede, het ons iets kry. En as ons of klein 'n "met Ox20 ons iets kry. So laat trek ASCII-tabel. Goed. Hier sien ons dat 'A' is - hier het ons 'A' desimale 65. Maar ek sal gaan met heksadesimale, wat Ox41. Redelik seker ons het dit gesien in die klas. Ek dink ons ​​het dit gesien in die klas dat dit is redelik maklik om te sit van heksadesimaal na binêr. So hier, as ek wil om te sit in 4 binêre, wat net gaan 0100. Dit is 1 se plek, 2 se plek, 4 se plek, so dit is 4. Dan kan ek verdeel 1 in binêre, wat gaan wees 0001. En so dit gaan die verteenwoordiging van 'A' in binêre te wees. Neem klein 'n ", is dit nou gaan wees Ox61, waar hierdie te verdeel in sy binêre, so 'n 6 - Kom ons werklik te doen - daar is geen gom? Uitveër. Ox61. So verdeel 6 in binêre gaan wees 0 + 4 + 2 + 0. En verdeel 1 gaan wees 0001. Kyk na die verskil tussen hierdie 2, sien ons dat die enigste verskil tussen 'n klein en 'n kapitale 'A' is die enkele bietjie. So terug te kom hier - okay. Kom terug na hier, as ons kyk na wat die bietjie Ox20 is, so verdeel Ox20 in sy binêre, is 0010, 0000. Ox20, die enigste stukkie wat gestel is, is die bietjie wat ons is betrokke by, met die skakel tussen hoofletters en klein 'n ". As ek of 'A', wat is hierdie een, 'A', As ek of 'A' met Ox20, Wat gaan ek te kry? [Student, onhoorbaar] klein letters 'n ", want dit gaan hierdie bietjie om te draai na 'n 1. En as ek of 'n 'met Ox20, wat gaan ek te kry? Kleinletter a, want net oring 'n 'met Ox20, Ek is net gaan om te oring hierdie enkele bietjie na 'n 1; dit is reeds 'n 1, so dit maak nie saak. So kry ons 'n 'en 'n'. Bitwise en. Weereens, kan ons dink aan dit as ons logies en eweknie. Aan die linkerkant het ons ware en waar. Dit gaan om waar te wees, en vir al die gevalle, valse & waar of true & vals of onwaar & valse, nie een van daardie dinge is waar. So wat ons uiteindelik kry is 1000. So nou, hier, hier is waar ek die betroubare bis gebruik het nie, waar ons Ox20. So dit is Ox20. Nou wat ek wil doen, bis ~ van Ox20. Dit gaan al die stukkies om te draai. So ek het 1101, 1111. En so 'A' anded met ~ Ox20 gaan my te gee wat? Die enigste stukkie ons regtig nodig het om te dink oor is hierdie een, sedert, as al hierdie stukkies is ingestel op 1, dan gaan ons te kry presies wat 'A' was, behalwe vir, moontlik, wat dit bietjie is. Want as dit was 'n 1, nou is dit gaan ingestel word om 'n 0, want alles wat dit is, anded met hierdie gaan wees 0. So, wat is 'n '& ~ Ox20 gaan gee my? [Studente beantwoord, onhoorbaar] En wat is 'n "en - dit is 'A'. En wat is 'n '& ~ Ox20 gaan gee my? 'A.' Want dit is tans 'n 1. Anding met hierdie 0 gaan maak dit 'n 0, en nou is ons gaan 'n 'A' te kry. Beide is 'n "en laaste maar nie die minste van hierdie tipe, ons het XOR. Dit is baie soos of, behalwe dit beteken uitsluitlik of. Dit is soos wat jy gewoonlik dink as of in die werklike wêreld. So jy óf 'x' of 'y', maar nie beide nie. Hier 1 ^ 1 gaan wees 0. Omdat die ware, dit is nie - dit is nie so goed werk met die logiese ware en valse as bis-& en of doen nie, maar waar ^ waar is, is onwaar. Omdat ons wil net om terug te keer waar as slegs een van hulle is waar. So 1 ^ 1 0. Wat van 0 ^ 1? Is 1. 1 ^ 0 is 1, 0 ^ 0 0. So onder alle omstandighede, is 0 bis iets 0 gaan wees 0. 1 bis iets 0 of 0 bis 1, As dit is | of ^, sal dit 'n 1, en as dit is en dit sal wees 0. En die enigste geval waar 1 bis 1 is nie 1 is met 'n eksklusiewe of. Dit is 0110. So hier en nou, met behulp van XOR - so ons is terug by die 20. 'A' ^ Ox20 is hierdie 2 stukkies ons vergelyk. So 'n 1 ^ 0 gaan om te gee my 'n wat? 'N Een. 'A' ^ Ox20 gaan my te gee nie? Kleinletter a. 'N' ^ Ox20 gaan my te gee nie? Capital A. Want alles wat dit doen, is dit XORing met Ox20 effektief daarby net hierdie stukkie is. As dit 'n 0, dit gaan nou 'n 1. Aangesien dit 'n 1, 1 ^ 1 0. So ons 'n "geword" A ", en ons 'A' het geword 'n '. So XOR is 'n baie maklike manier om net daarby die geval nie. Jy wil net Itereer oor 'n string van letters en wissel die geval van elke enkele karakter, jy net XOR alles met Ox20. Nou het ons skof verlaat. Links verskuiwing gaan net, basies, druk al die nommers in, of aan die linkerkant, en voeg 0 se agter hulle. So hier het ons 00001101. Ons gaan 3 0's in te stoot van die reg, en ons kry 01101000. In nonbinary terme, sien ons dat dit is regtig die hantering 13 links verskuif met 3, wat ons gee 104. So links verskuiwing, hier sien ons, x << y is basies x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 is 8, so 13 * 8 104. As jy net dink oor binêre in die algemeen, hoe elke syfer, As ons begin van die reg, dit is die 1 se plek, dan is die 2 se plek, dan is die 4 se plek. So deur te druk in 0's van die reg, ons is maar net besig om dinge wat in die 4 se plek op die 8 se plek, en dinge wat in die 8 se plek aan die 16 se plek. Elke skof vermeerder net deur 2. Ja? [Studente] Wat gebeur as jy verskuif deur 5? [Bowden] As jy geskuif 5 sal jy net syfers verloor. Onvermydelik, dit is dieselfde ding. Soos, heelgetalle is slegs 32 stukkies, So as jy 2 baie groot heelgetalle voeg, is dit net nie pas in 'n heelgetal. So dit is dieselfde ding hier. As jy verskuif deur 5, Ons wil net verloor dat een. En dit is soort van wat ek bedoel met "ongeveer" waar as jy te ver verskuif, verloor jy stukkies. Right verskuiwing gaan die teenoorgestelde te wees, waar ons gaan 0 se af die einde te stoot, en vir ons doeleindes, vul 0's van die linkerkant. So om dit te doen, ons is basies omkeer wat ons reeds gedoen. En ons sien dat die drie 0 se op die regte het net afgeval, en ons het gestoot die 1101 al die pad na regs. Dit is om te doen 104 3, wat is, effektief, x / 2 ^ y. So nou, hier, dit is 'n soortgelyke idee. Hoekom is dit net sowat x / 2 ^ y, en nie eintlik x / 2 ^ y? Want as ek met 4 verskuif het, sou ek verloor het 'n 1. Basies, wat jy dink, dink net aan integer-afdeling in die algemeen. So, soos 5/2 is 2. Dit is nie 2.5. Dit is dieselfde idee hier. Wanneer ons deel deur 2, ons kan verloor vreemde stukkies langs die pad. So nou - dit is dit vir bis. Dit is al wat jy nodig het om te weet. Onthou om die gebruik van gevalle het ons gesien in die klas, soos 'n bietjie masker is nuttig vir bis-operateurs, of jy dit gebruik vir bietjie maskers. Hoofletters en kleinletters, doelskoppe is 'n mooi voorbeeld te voorbeeld. Goed, so buffer oorloop aanvalle. Enigeen onthou wat verkeerd met hierdie funksie was? Kennisgewing wat ons verklaar 'n skikking van 12 grepe, 12 karakters, en dan kopieer ons in ons buffer van 12 karakters van die hele string bar. So wat is die probleem hier? Die magic nommer 12 moet pretty much onmiddellik pop uit as - waarom 12? Wat as bar gebeur met meer as 12 karakters? Wat as bar is miljoene van die karakters? Hier is die probleem is memcpy. As bar is lank genoeg, dit sal net heeltemal - 'c', 'c' nie omgee dat dit net 12 karakters; 'C' nie omgee dat dit nie kan inpas dat baie grepe. Dit sal net heeltemal oorskryf kar, die 12 grepe ons daarvoor toegeken het, en alles verby in die geheue wat nie eintlik nie behoort aan dat buffer met alles wat die string bar is. So dit was die prentjie wat ons sien in die klas waar ons ons stapel grootword. Jy moet gebruik word om hierdie foto's of kry vertroud is met hulle weer. Ons het ons stapel grootword, geheue-adresse begin by 0 op die top en groei af te hou 4000000000 aan die onderkant. Ons het ons skikking 'c' iewers in die geheue, dan moet ons ons wyser te staaf reg onder dit, en dan het ons hierdie gered raam wyser in ons terugkeer adres en ons ouer roetine se stapel. Onthou wat die terugkeer adres is? Dit is wanneer hoof roep 'n funksie cat, roep 'n funksie bar, onvermydelik, Bar opbrengste. So wanneer bar opbrengste, wat hulle nodig het om te weet dat dit terug te gaan na cat dat dit genoem. So het die terugkeer adres is die adres van die funksie wat dit het om terug te keer wanneer die funksie gee. Die rede wat belangrik is vir die buffer oorloop aanvalle is omdat, gerieflik, hackers graag dat terugkeer adres te verander. In plaas van om terug te gaan cat, ek gaan terug na waar die hacker wil my om terug te gaan loop. En, gerieflik, waar die hacker wil gereeld terug te gaan na is die begin van die buffer wat ons aanvanklik gehad het. So sien weer, Little Indian. Die toestel is 'n voorbeeld van 'n klein Indiese stelsel, so 'n getal of 'n wyser word gestoor met die grepe omgekeer. So hier sien ons - is dit? Ja. Ons sien Ox80, OxC0, Ox35, OxO8. Onthou die heksadesimale syfers? Ons het die heksadesimale syfers in Little Indian omkeer nie, omdat 2 hexadecimalen maak 'n enkele byte, en ons reverse die grepe. Dit is hoekom ons nie stoor nie, soos, 80530CO8. Ons stoor, in plaas daarvan, elke paar 2 syfers, vanaf die regterkant. Dit adres verwys na die adres van die begin van ons buffer wat ons wou eintlik te kopieer in die eerste plek. Die rede is dat dit nuttig is omdat, wat as die aanvaller gebeur het, in plaas van om 'n string wat was net 'n onskadelike string van soos, hul naam of iets, Wat as, in plaas daarvan, dat die snaar was net 'n paar arbitrêre kode dat alles gedoen wat hulle wou hê om dit te doen? Sodat hulle kon - Ek kan nie dink aan enige koel kode. Dit kan enigiets wees, al is. Enige rampspoedige kode. As hulle wou, kon hulle net iets op seg foute te doen nie, maar dat dit sal nutteloos wees. Hulle doen dit gewoonlik jou stelsel te kap. Goed. CS50 biblioteek. Dit is basies, getint, getString, al die funksies wat ons voorsien vir jou. So het ons 'n kar * string, en dit is die onttrekking dat ons weggewaai op 'n stadium gedurende die semester. Onthou dat 'n string is net 'n verskeidenheid van die karakters. So hier sien ons 'n verkorte weergawe van getString. Jy moet terug te kyk na dit om te onthou hoe dit is eintlik geïmplementeer word. Sleutel besonderhede, sien ons kry in 'n enkele karakter op 'n tyd van standaard in, wat net soos ons die tik op die sleutelbord. So 'n enkele karakter op 'n tyd, en as ons te veel karakters, So as n + 1 is groter as kapasiteit, dan moet ons die kapasiteit van ons buffer te verhoog. So hier is ons die verdubbeling van die grootte van ons buffer. En dit gaan hou nie, ons voeg die karakter in ons buffer totdat ons 'n nuwe lyn of einde van die lêer of wat ook al, in welke geval, ons klaar is met die string en dan die werklike getString krimp die geheue, soos as ons te veel geheue toegeken sal dit terug te gaan en 'n bietjie krimp. So wys ons dit nie, maar die belangrikste idee is dit het om te lees in 'n enkele karakter op 'n tyd. Dit kan nie net lees in 'n hele ding op 'n keer, omdat hul buffer is slegs van 'n sekere grootte. So as die string wat dit probeer in te voeg in buffer te groot is, dan sou dit oorloop. So hier is ons verhoed dat slegs deur te lees in 'n enkele karakter op 'n tyd en groeiende wanneer ons nodig het om te. So getint en die ander CS50 biblioteek funksies geneig getString te gebruik in hul implementering. So ek het die belangrike dinge hier. Dit is dan getString 'n string te kry. As getString misluk geheue om terug te keer, onthou dat getString mallocs iets, so wanneer jy getString noem jy moet nie (onverstaanbare) vry wat string wat jy het. So hier, as dit nie iets te malloc, keer ons terug INT_MAX as net 'n vlag wat, hey, ons was nie eintlik in staat om 'n heelgetal te kry. Jy moet ignoreer alles wat ek na julle terugkeer, of moet jy dit nie hanteer as 'n geldige toevoer. Ten slotte, in die veronderstelling dat het wel daarin geslaag het, gebruik ons ​​sscanf met daardie spesiale vlag wat beteken, eerste wedstryd 'n heelgetal, dan pas enige karakters nadat heelgetal. So sien ons dit wil gelyk 1. So sscanf opbrengste Hoeveel vuurhoutjies indien dit suksesvol gemaak het? Dit sal terugkeer 1 as dit suksesvol ooreenstem n heelgetal is, dit sal terugkeer 0 as dit nie ooreenstem met 'n heelgetal, en dit sal terugkeer 2 As dit ooreenstem met 'n heelgetal, gevolg deur 'n paar karakter. So sien ons weer probeer as ons ooreenstem met enigiets, maar 1. So as ons het 1, 2, 3, C, of ​​1, 2, 3, X, daarna 1, 2, 3 sal gestoor kry in die getal, X sal gestoor kry op die karakter, sscanf sou terugkeer 2, en ons sal weer probeer, want ons wil net 'n heelgetal. Vinnig waai deur HTML, HTTP, CSS. HyperText Markup Language is die struktuur en semantiek van die web. Hier is die voorbeeld van lesing waar ons HTML tags. Ons het kop tags, liggaam etikette, Ons het voorbeelde van leë tags waar ons nie eintlik 'n begin en naby tag, ons net skakel en beeld. Daar is geen sluitingsdatum beeld tag, daar is net 'n enkele tag dat alles wat die etiket moet doen accomplishes. Die skakel is 'n voorbeeld, ons sal sien hoe jy 'n skakel na CSS, die script is 'n voorbeeld van hoe jy 'n skakel na 'n eksterne JavaScript. Dit is redelik maklik, en onthou, HTML is nie 'n programmeertaal. Hier, onthou hoe jy 'n vorm te definieer of ten minste wat dit sou doen? So 'n vorm het 'n aksie en 'n metode. Die metodes wat jy net ooit sal sien is AOO en post. So is die weergawe waar die ding kry sit in die URL KRY. Pos is waar dit sit nie in die URL. In plaas daarvan, is 'n data van die vorm ingevoeg meer verborge in die HTTP-versoek. So hier, aksie definieer waar die HTTP versoek gaan. Waar dit gaan is google.com / soek. Metode. Onthou om die verskille tussen AOO en post, En net sê as 'n voorbeeld, as jy wil boekmerk iets. Jy sal nooit in staat wees om te boekmerk 'n NA URL omdat die data is nie ingesluit in die URL. HTTP, nou, is HyperText Transfer Protocol. Die HyperText Transfer Protocol, sou jy verwag dat dit oor te dra HyperText Markup Language, en dit doen nie. Maar dit dra ook enige beelde wat jy kry op die web, enige afgelaai jy begin as 'n HTTP-versoek. So HTTP is net die taal van die World Wide Web. En hier moet jy hierdie soort van 'n HTTP-versoek te erken. Hier HTTP/1.1 aan die kant sê net dit is die weergawe van die protokol wat ek gebruik nie. Dit is pretty much altyd gaan HTTP/1.1 te wees, soos wat jy dit sal sien. Dan sien ons dat dit kry, hoe alternatiewe as post, dat jy kan sien. En die URL wat ek besig was om te besoek was www.google.com/search?q = blah, blah, blah. So onthou dat hierdie, die vraagteken q = blah blah blah, is die soort van dinge wat voorgelê word deur 'n vorm. Die reaksie dit kan terugkeer na my sou iets soos hierdie lyk. Weereens, wat begin met die protokol, wat gaan dit wees, gevolg deur die status kode. Hier is dit 200 OK. En laastens, die webblad wat ek eintlik gevra sal gevolg word. Die moontlike status kode wat jy kan sien, en jy 'n paar van hulle moet weet. 200 OK jy het waarskynlik gesien het nie. 403 Forbidden, 404 nie gevind nie, 500 Interne server fout gewoonlik as jy gaan na 'n webwerf en iets is gebreek of hul PHP-kode ongelukke, terwyl dit in die toestel het ons dat die groot oranje vak wat kom en sê, soos, iets is verkeerd, beteken dit-kode nie werk nie of hierdie funksie se slegte. Gewoonlik webwerwe wil nie hê jy weet wat funksies is eintlik sleg, So in plaas hulle sal net gee jou 500 Interne server foute. TCP / IP is 1 laag onder HTTP. Onthou dat daar is Internet buite die World Wide Web. Soos as jy 'n aanlyn-wedstryd wat nie deur HTTP speel, dit gaan deur 'n ander - dit is nog steeds met behulp van die Internet, maar dit beteken nie gebruik HTTP. HTTP is net een voorbeeld van protokol gebou op TCP / IP. IP beteken letterlik Internet Protocol. Elke rekenaar het 'n IP adres, hulle is die 4-syfer dinge soos 192.168.2.1, of wat ook al, wat geneig is om 'n plaaslike een. Maar dit is die patroon van 'n IP-adres. So het die DNS, Domain Name Service, dit is wat dinge soos google.com vertaal na 'n werklike IP-adres. So as jy tik dat IP adres in 'n URL, wat jou sal bring jy na Google, maar jy is geneig om nie daardie dinge te onthou. Jy is geneig om te onthou google.com plaas. Die laaste ding wat ons het, is hawens, waar dit die TCP deel van IP. TCP doen meer. Dink oor, soos, jy het jou webblaaier hardloop. Miskien het jy 'n paar e-pos aansoek hardloop; Miskien het jy 'n ander program wat gebruik maak van die Internet bedryf. Hulle het almal toegang tot die Internet, maar jou rekenaar het net 1 WiFi-kaart of wat ook al. So hawens is die manier wat ons in staat is om te verdeel hoe hierdie programme in staat is om die Internet te gebruik. Elke aansoek kry 1 spesifieke hawe wat dit kan luister, en by verstek, HTTP poort 80 gebruik. Sommige e-pos dienste gebruik 25. Die lae-geteldes geneig om gereserveer word. Jy is gewoonlik in staat om hoër-geteldes vir jouself te kry. CSS, Cascading Style Sheets. Ons styl webblaaie met CSS, nie met HTML. Daar is 3 plekke wat jy kan jou CSS sit. Dit kan inline wees, tussen styl etikette, of in 'n heeltemal aparte lêer en dan gekoppel in En hier is net 'n voorbeeld van CSS. Jy moet hierdie patroon herken, waar die eerste voorbeeld is ons wat ooreenstem met die liggaam tag, En hier is ons sentrering die liggaam tag. Die tweede voorbeeld, is ons wat ooreenstem met die ding met ID voet, en ons is die toepassing van sommige style nie. Let daarop dat ID footer teks uitgelijnd die linkerkant, terwyl die liggaam teks uitgelijnd sentrum. Footer is binne-in die liggaam. Dit sal, in plaas, text-align verlaat, selfs al is die liggaam sê text-align sentrum. Dit is die hele waterval deel daarvan. Jy kan - jy kan spesifiseer style vir die liggaam, en dan dinge in die liggaam wat jy kan spesifiseer meer spesifieke style, en dinge werk soos jy verwag. Meer spesifieke CSS bestek voorrang geniet. Ek dink dit is dit. [Ali Nahm] Hi almal. As ek maar net jou aandag kry. Ek is Ali en ek gaan om te gaan deur PHP en SQL baie vinnig. Sodat ons kan begin. PHP is kort vir PHP: Hypertext Preprocessor. En as jy al behoort te weet, is dit 'n bediener-kant skripte taal, en ons gebruik dit vir die agterkant van die webtuistes, en hoe dit 'n baie van die berekeninge, die agter-skerms deel. Sintaksis. Dit is nie soos C, verrassing, verrassing. Dit was nog altyd om te begin met die, as jy kan sien, die - ek kan nie vorentoe te beweeg. Jy kan sien wat jy nodig het om die nuwe vorme van draadjies en dan moet jy ook die? PHP. Dit is altyd hoe jy jou PHP teks, jou PHP-kode te raam. So kan dit nie net soos C, waar jy soort van sit dit op die eerste. Jy moet altyd omring. En nou, die groot sintaksis is dat al die veranderlikes moet begin met die $ karakter. Jy moet dit te doen wanneer jy die definisie daarvan, jy moet dit te doen wanneer jy verwys na hulle later op. Jy moet altyd dat $. Dit is jou nuwe beste vriend, pretty much. Jy het nie - anders C, jy hoef nie te sit watter soort veranderlike tipe dit is. Dus, terwyl jy nodig het om die $, jy hoef nie te sit, soos, int x of y string, ensovoorts, ensovoorts. So 'n effense verskil. As gevolg van hierdie, beteken dit dat PHP is 'n swak tipe. PHP is 'n swak tipe taal, en dit het swak getik veranderlikes. Met ander woorde, dit beteken dat jy kan wissel tussen verskillende soorte veranderlike tipes. Jy kan jou nommer 1 stoor as 'n int, kan jy dit stoor as 'n string, en jy kan dit stoor as 'n vlot, en dit sal al wees wat nommer 1. Selfs al is jy om dit te stoor in verskillende vorme, dit is nog steeds - die veranderlike tipes is nog steeds vashou aan die einde. So as jy kyk hier, as jy onthou van pset 7, baie van julle het waarskynlik probleme met hierdie. Twee gelyke tekens, 3 gelyke tekens, 4 gelyke tekens. Goed, daar is geen tekens 4 gelyke, maar daar is 2 en 3. Jy gebruik 2 gelykaantekens die waardes na te gaan. Dit kan kyk oor tipes. So as jy kan sien by die eerste voorbeeld, Ek het num_int == num_string. So jou int en jou string is beide tegnies, 1, maar hulle is verskillende tipes. Maar vir die dubbel gelykes, sal dit nog steeds gebeur. Maar vir die drie gelykes, dit kontroleer waarde sowel as die verskillende tipes. Dit beteken dat dit nie gaan om te slaag in die tweede geval is hier, waar jy met 3 gelyke tekens plaas. So dit is 'n groot verskil wat jy moet almal nou gewys. String aaneenskakellling is nog 'n kragtige ding wat jy kan gebruik in PHP. Dit is basies net hierdie handige dot-notasie, en dit is hoe jy kan saam bind snare. So as jy 'Kat en jy het Dog, en jy wil hê dat die 2 snare saam te stel, jy kan die tydperk te gebruik, en dit is soort van hoe dit werk. Jy kan ook net plaas hulle langs mekaar, as jy hier kan sien in die onderste byvoorbeeld waar ek eggo string 1, ruimte string 2. PHP sal weet om dit te vervang as sodanig. Skikkings. Nou, in PHP, is daar 2 verskillende vorme van skikkings. Jy kan gereelde skikkings, en jy kan ook assosiatiewe skikkings, en ons gaan om te gaan deur hulle op die oomblik. Gereelde skikkings is net dit in C, en so het jy indekse wat getel is. Op die oomblik het ons net gaan een te skep en sit - so dit is hoe ons 'n leë skikking, dan gaan ons sit in die indeks nommer 0. Ons gaan die nommer 6, die waarde 6 te sit. Jy kan dit sien aan die onderkant hier. Where's - ten indeks nommer 1 gaan ons waarde nommer 4 te sit, en sodat jy kan sien daar is 'n 6, is daar 'n 4, en dan as ons die druk van dinge, wanneer ons probeer en druk die waarde gestoor indeks nommer 0, dan sal ons die waarde sien 6 gedruk het. Cool? So dit is gereelde skikkings vir jou. Nog 'n manier waarop jy kan ook dinge voeg tot gereelde skikkings nou is jy kan net voeg hulle by die einde. Dit beteken dat jy nie die spesifieke indeks te bepaal. Jy kan sien nommer, en dan in die vierkantige hakies daar is geen indeks vermeld. En dit sal weet - PHP sal weet net voeg dit by die einde van die lys, die volgende vrye plek. Sodat jy kan sien die 1 reg daar op daardie 0 plek, die 2 het net daar op die eerste plek. Die 3 gaan - is daar ook bygevoeg. So maak dat die soort van sin. Jy is net voortdurend toe te voeg nie, en dan wanneer ons aansluit by die indeks van nommer 1, dit sal die druk van die waarde 2. Dan het ons skikkings wat assosiatiewe skikkings. Assosiatiewe skikkings, in plaas van om numeriese indekse, wat hulle doen is, hulle het indekse wat deur string. Jy kan sien, in plaas van - ek het ontslae te raak van al die aantal indekse, en nou is dit key1, key2, key3, en hulle is in dubbele aanhalingstekens om aan te dui dat hulle alle stringe. So kan ons 'n voorbeeld hiervan. Die voorbeeld van hierdie is dat ons die tf, en dit is die indeks se naam. Ons gaan sit "Ali" soos die naam, op die indeks, kalorieë geëet het, ons kan 'n int sit hierdie keer in plaas van 'n string, en dan na die indeks hou, kan ons 'n hele verskeidenheid sit binnekant van dit. So dit is soort van - dit is 'n soortgelyke konsep oor hoe ons moes indekse met getalle, maar nou kan ons die indekse om te verander hulle het as stringe plaas. Jy kan dit ook doen, behalwe net om dit te doen individueel, jy kan dit alles in een stuk. So kan jy sien dat tf van die skikking, en dan sit ons almal in 'n reuse-vierkante hakies stel. Sodat dinge kan bespoedig. Dit is meer van 'n stilistiese keuse as om nie. Ons het ook loops. In C ons het sirkelroetes soos hierdie werk. Ons het ons skikking, en ons het uit die indeks van 0 aan die einde van die lys, en ons druk dit alles, reg? Behalwe die probleem is, vir assosiatiewe skikkings, ons nie noodwendig nie geweet diegene numeriese indekse want nou het ons die string-indekse. Nou gebruik ons ​​foreach loops, wat weer, moet jy hopelik in pset 7. Foreach sirkelroetes sal weet net elke enkele deel van die lys. En dit is nie presies die numeriese indeks wat jy hoef te weet. So jy het die foreach sintaksis, so dit is foreach, jy sit die skikking. So my skikking genoem pset, en dan as die woord as, en dan kan jy hierdie tydelike plaaslike veranderlike wat jy gaan gebruik Net vir die spesifieke ding wat gaan die spesifieke te hou - een geval of 'n deel van die skikking. Pset num sal hou 1, en dan miskien sal dit die nommer 6 hou, en dan sal dit die nommer 2 hou. Maar dit is gewaarborg om te gaan deur middel van elke enkele waarde wat in die skikking. Nuttige funksies wat jy moet weet in PHP is die vereistes, so wat maak seker dat jy insluitende sekere lêers, eggo, afrit, leeg. Ek raai jy kyk na pset 7 en kyk na die funksies. Jy mag hê diegene te leer ken, so ek sal beslis weet wat, presies, dit is al doen. En nou is ons gaan om te gaan deur middel van omvang regtig vinnig. In omvang, PHP is 'n soort van 'n funky ding, in teenstelling met C, en so het ons net gaan om te gaan deur dit vinnig. So kom ons sê ons begin by daardie pyl dat ons daar. En ons gaan om te begin met $ i. So het die veranderlike 'i' gaan wees 0, en ons is net gaan om te hou om dit te druk in die groot wit blok daar. Ons gaan om te begin met I0, en dan moet ons gaan om dit te eggo. So is daar die 0. En dan gaan ons dit te inkrementeer deur die lus, en dan gaan dit waarde van 1 te wees. Een daarvan is minder as 3, so dit gaan deur wat vir lus, en dan gaan ons sien dit weer gedruk. Ons gaan dit te inkrementeer weer tot 2, en 2 is minder as 3, so dit sal slaag om die lus vir, en dit sal druk die 2. Dan sal jy daarop let dat 3 is nie minder nie as 3, so ons sal weg te breek van die for-lus. So nou het ons opgewonde, en dan gaan ons om te gaan in aFunction. Goed. So jy het om daarop te let dat hierdie veranderlike wat ons gemaak het, 'i 'n veranderlike, is nie plaaslik scoped. Dit beteken dat dit nie die plaaslike aan die lus, en dat veranderlike ons kan nog steeds toegang tot en verander daarna, en dit sal nog steeds van krag wees. So as jy gaan in die funksie nou, sal jy sien dat ons ook gebruik om die 'i 'n veranderlike, en ons gaan inkrementeer 'i' + +. Jy sou dink, op die eerste, gebaseer op C, dat dit is 'n afskrif van die 'i 'n veranderlike. Dit is 'n heeltemal ander ding, wat korrek is. So wanneer ons dit druk, gaan ons druk 'i' + +, wat gaan om uit te druk wat 4, en dan gaan ons - jammer. Daarna het ons gaan aan die einde van daardie funksie, en ons gaan wees waar die pyl is nou. Dit beteken dat dan egter, selfs al is die funksie verander die waarde van 'i', dit het nie buite die funksie verander, omdat die funksie het 'n aparte ruimte. Dit beteken dat wanneer ons eggo 'i', dit het nie verander in die omvang van die funksie, en so dan gaan ons te druk 3. Verskillende dinge oor omvang in PHP as in C. Nou in PHP en HTML. PHP gebruik webblaaie dinamiese te maak. Dit maak soort van dinge anders. Ons het dit verskil van HTML. Met HTML, het ons altyd net dieselfde statiese ding, soos hoe Rob het, terwyl PHP, kan jy dinge verander gebaseer op wat die gebruiker is. So as ek hierdie, ek het, "Jy is aangeteken as -" en dan die naam, en ek kan die naam verander. So nou die naam is Joseph, en dit het die "oor my", maar dan kan ek ook die naam verander Tommy het. En dit sou 'n ander ding. So dan kan ons ook verskillende dinge oor hom verander, en dit sal 'n ander inhoud te wys wat gebaseer is op die naam. So PHP kan soort van verandering wat gaan aan in jou webblad. Dieselfde hier. Tog, daarop dat hulle het verskillende inhoud, selfs al is jy tegnies steeds toegang tot daardie selfde web bladsy op die oppervlak. Genereer HTML. Daar is 2 verskillende maniere waarop jy dit kan doen. So ons gaan nou deur middel van daardie reg. Die eerste manier is, moet jy - ja, jammer. So jy moet net jou gereelde lus in PHP, en dan moet jy eggo in PHP en jy eggo uit HTML. Gebruik wat Rob het jy van HTML script en dan met behulp van die PHP druk net druk dit uit na die webblad. Die alternatiewe manier is om dit te doen asof jy skei die PHP en HTML. So kan jy 'n lyn van PHP dat die lus begin het, dan kan jy die lyn van die HTML het in 'n aparte ding, en dan kan jy die einde van die lus, weer, met 'n PHP. So dit is soort van die skeiding van dit uit. Aan die linkerkant, kan jy dat jy al die - dit is net 1 stuk van PHP. Aan die regterkant kan jy sien dat jy 'n lyn van PHP, jy het 'n lyn van HTML, en jy het 'n lyn van PHP weer. So skei dit uit in wat hulle doen. En jy sal daarop let dat een manier, vir een van hulle, hulle nog steeds die druk van die beeld, die beeld, die beeld, sodat HTML nog gedruk word op dieselfde manier. En dan sal jy sien nog steeds die 3 beelde vertoon op jou webwerf. So dit is 2 verskillende maniere om dieselfde ding. Nou het ons vorms en versoeke. As Rob het jy, daar is vorms van HTML, en ons sal net briesie deur hierdie. Jy het 'n aksie en jy het 'n metode, en jou optrede soort wys jou waar jy gaan om dit te stuur, en die metode is of dit gaan 'n AOO-of 'n pos te wees. En 'n GET-versoek, soos Rob sê, beteken dat jy gaan om dit te sit in 'n vorm en jy sal sien dit as 'n URL, terwyl die POST versoek sal jy nie in 'n URL te sien. So 'n effense verskil. Maar een ding wat 'n soortgelyke ding is dat NA en kry ewe onseker. So jy mag dalk dink dat net omdat jy sien dit nie in die URL, wat beteken dat die pos is meer veilig, maar jy kan nog steeds sien dit in jou koekies in die inligting wat jy stuur. So moenie dink dat omtrent die een of die ander. Nog 'n ding om daarop te let is dat jy ook artikel veranderlikes. Julle gebruik dit in pset 7 jou gebruiker-ID inligting te kry. Wat gebeur het, was dat jy kan hierdie assosiatiewe skikking te gebruik, die $ _SESSION, en dan is jy in staat om verskillende dinge om toegang te verkry en stoor verskillende dinge oor die bladsye. Laaste ding is dat ons SQL, Structured Query Language, en dit is 'n programmeertaal databasisse te bestuur. Wat, presies, is databasisse? Hulle is versamelings van tafels, en elke tafel kan hê soortgelyke vorme van voorwerpe. So het ons 'n tafel van die gebruikers in jou finansies pset. En hoekom is hulle nuttig? Want dit is 'n manier om permanent te stoor inligting. Dit is 'n manier om die dop dinge en bestuur van dinge en eintlik sien dit op verskillende bladsye en die dop. Terwyl as jy net stoor dit op daardie een onmiddellike oomblik en dan gebruik dit later, sal jy nie in staat wees om enigiets wat jy gered om toegang te verkry. Ons het 4 groot dinge wat ons gebruik vir SQL opdragte. Ons het kies, voeg, te verwyder, en te werk. Dit is uiters belangrik dat jy die ouens om te weet vir jou toets. Ons sal vinnig gaan oor kies nou. Basies, jy kies rye uit 'n databasis. So as jy het, reg hier - ons het hierdie 2 verskillende dinge, en ons wil om te kies uit die klasse tafel waar ontsagwekkende - waar in die ontsagwekkende kolom die waarde is 1. So jy hier kan sien, ons het hierdie 2 dinge van die klas se naam, CS50 en Stat110, en ons het die klas-ID's en die slagspreuk. So wil ons almal van daardie inligting te kies. Dan kan jy sien hier dat dit is soort van die pluk uit wat awesome kolom waar al die dinge is 1, en dan is dit die klas ID, klas se naam en slagspreuk dat dit kan kies uit. Hoe presies doen jy dit in die kode? U het PHP te gebruik. So dit is soort van hoe PHP en SQL is verwant aan mekaar. Nou het ons ons kode, en ons gaan ons navraag funksie te gebruik soos ons gedoen het in pset 7, en ons gaan die SQL navraag uit te voer. Daarna het ons gaan hê - ons het altyd om te kyk of ry se driedubbele gelyk is as onwaar. So weer, wil jy die tipe en die waarde om te kyk, en dan as dit nie werk nie, dan is jy wil om verskoning vra, soos gewoonlik, soos ons gedoen het in pset 7. Anders, wat jy wil om te loop deur alles met dié handige foreach sirkelroetes ons net gaan oor. Nou dat ons deur middel van herhaling en het ons dit verlede Kom ons veronderstel dat ons navraag geslaag het, nou het ons ons foreach lus. En die eerste ry dit het, so hier is die ry, reg hier, dit is doos. Dit gaan om uit te druk al die inligting wat dit gekry het. So dit gaan om uit te druk op die onderste "Wil jy leer HTML?" Dan is dit gaan om te gaan na die volgende ry, want dit is voltooi die eerste lus, en so dan gaan dit om uit te druk van die tweede lyn van dit, wat gaan wees STAT110, Vind al die oomblikke. Een laaste ding is op SQL probleme. Ek weet David aangeraak dit 'n bietjie in lesing. Jy kan dit later lees. Dit is regtig snaaks. SQL-inspuiting is 'n soort van moeilike ding. Kom ons sê dat jy net vashou daardie veranderlikes reg in jou navraag, soos jy kan sien in die eerste lyn. So lyk dit goed, reg? Jy is net om in die gebruiker se naam en wagwoord vir jou SQL navraag, en jy wil om dit te stuur af en kry alles wat in jou data tafel. Dit lyk redelik eenvoudig. So kan sê iemand sit in, vir die wagwoord, hierdie of teks reg hier - eintlik moet wees in die rooi boks. So kom ons sê dat hulle die wagwoord in - dit is wat hulle betree. So hulle is om OF "1" = 1. Soort van 'n dom wagwoord te hê. Nou laat vervang net dit in, en jy sal daarop let dat in die SQL navraag nou, dit evalueer wat altyd waar nie, want jy sal daarop let dat jy kan SQL navraag kies al van hierdie inligting of jy kan net 1 = 1. So dit is altyd iets om te evalueer waar. Dit gaan nie regtig werk nie, want dit beteken dat die hacker kan breek in jou stelsel. Die oplossing hiervoor is dat jy die BOB stelsel te gebruik, wat beteken dat jy 'n vraagteken te gebruik, en dit is wat julle ouens gebruik in pset 7, waar jy gaan 'n vraagteken te gebruik in die plek van waar jy wil iets om te sit, en dan gaan jy 'n komma te hê, en dan sal jy daarna het, na jou string, die verskillende veranderlikes wat jy wil om te vervang in jou vraagteken. So sal jy daarop te let dat nou het ek hierdie rooi vraagtekens. Dan sit ek die veranderlikes na my snare so ek weet om hulle te vervang in daardie volgorde daarna. Dit sal seker maak dat as iemand dit doen soos hierdie, en hulle het die of 1 = 1 situasie, wat seker sal maak, in die agterkant, maak seker dat dit nie eintlik breek die SQL navraag. Goed, so dit is pretty much dit, 'n storm van PHP en SQL. Beste van geluk aan julle almal, en nou Oregon [Oreoluwatomiwa Babarinsa] Goed almal. Tyd om te gaan 'n paar JavaScript en 'n paar ander dinge baie vinnig so ons hou jou nie vanaand. JavaScript. Ja. JavaScript is 'n soort van 'n koel ding, na bewering. Die dinge wat jy regtig nodig het om te weet oor JavaScript, dit is soort van soos die kliënt-kant einde van wat jou web app gaan om te doen. Daar is 'n paar dinge wat jy wil net nie te sorg van al die tyd op die bediener kant. Al die klein interaksies, beklemtoon een ding, maak iets verdwyn. Jy wil regtig nie hê om te praat met jou bediener al die tyd vir daardie. En sommige van dit is nie eens moontlik te doen om op die bediener kant. Dit is hoekom ons iets soos JavaScript nodig. Koel dinge oor JavaScript: Dit is dinamies getik. Wat dit beteken, is dat jou program nie nodig om te weet wat, presies, die veranderlikes is wanneer jy dit uitskryf. Dit sal net soort van figuur dit uit as dit loop. Ander dinge wat koel oor dit: Dit is 'n krullerige stut taal, wat beteken dat die sintaksis is soortgelyk aan C en PHP. Jy hoef nie veel herwerken te doen wanneer jy leer JavaScript. Hier het ons 'n bietjie van JavaScript. Interessante ding hier is dat, as jy kyk na dit, ons het 'n bietjie van JavaScript net daar in die kop tag. Wat is nie is basies net sluit in 'n JavaScript-lêer. Dit is een manier kan jy JavaScript sluit in jou program. Dan die tweede bietjie is eintlik 'n paar inline JavaScript, baie soortgelyk aan 'n geïntegreerde styl met CSS, en jy net die skryf van sommige kode baie vinnig daar. JavaScript het skikkings. Net nog 'n manier om data te rond hou, baie nuttig. Baie mooi en maklik sintaksis. Jy gebruik vierkantige hakies alles om toegang te verkry en hou alles saam. Niks is te kompleks. Die cool ding oor JavaScript en script tale in die algemeen is dat jy nie hoef te bekommer oor die verskeidenheid groottes. Jy kan net gebruik array.length en hou van dit, en ook die skikking kan groei of krimp as wat jy nodig het om dit te. So jy hoef nie eens te bekommer oor enige soort, O nee, ek moet meer dinge, of iets soos dit toe te ken. Die cool ding hier is dat JavaScript het iets genoem voorwerpe. Dit is 'n objekgeoriënteerde taal, so wat dit is, in wese, 'n manier vir jou om te groep data saam, ietwat soortgelyk aan 'n struct, maar jy kan dit toegang soos 'n struct of in 'n assosiatiewe skikking sintaksis. Dit is eenvoudig en wat jy kan doen met dit is die groep data saam As jy 'n klomp van die data wat is verwant. Want dit is al die dinge wat jy nodig het om 'n motor te beskryf, jy hoef nie om dit te hê in 'n klomp verskillende plekke. Jy kan net plak dit in 1 voorwerp in JavaScript. Soos u waarskynlik weet, iterating is een van daardie vervelige take. Jy doen dit net meer as 'n weer. Jy moet praat met elke voorwerp in die motor, of jy moet gaan deur elke item in 'n lys of iets soos dit. So het JavaScript, soortgelyk aan PHP, 'n foreach sintaksis. In hierdie geval, dit is 'n in-lus. Jy wil om dit te gebruik net op voorwerpe. Daar is 'n paar probleme wat optree as jy dit op skikkings. Dit is oor die algemeen een van daardie dinge, al is, dit is baie handig, omdat jy skakel 'n baie van oorhoofse omdat jy nie hoef te trek om alles in jou voorwerp deur jouself. Jy hoef nie al die sleutel name te onthou. Jy het net soort van kry hulle terug in hierdie sintaksis. In hierdie, met vir, jy wil net om te onthou dat jy terug kry al die sleutels, in 'n baie soortgelyke wyse tafel hash. As jy onthou dat, wanneer jy wil sit in 'n string kan jy iets uit te kry wat wil hê dat 'n verband waarde met dit. Wat jy kan doen met dit wat jy kan sê, alles reg, Ek sit in 'n motor, en ek het dit 'n Ferrari. Sodat jy kan later in die string Ferrari sit weer, en jy kan uit te kry nie. En jy kan dit doen in 'n lus met die in-lus. So net meer oor voorwerpe. Die belangrikste ding van dit wat jy nodig het om te onthou is dat jy kan die voorwerp struct gebruik soos sintaksis wanneer jy wil met hierdie, behalwe as wat jou gaan gebruik as 'n string is nie 'n geldige veranderlike naam. So as jy kyk na wat daar, ons het die sleutel met spasies. Wel, as jy object.key te sit, ruimte, met, ruimte, ruimte, wat sou net nie sin sintakties maak. Sodat jy kan net doen wat met hierdie soort van bracket sintaksis. Ook JavaScript is baie omvang-wyse te PHP. Jy het 2 maniere om die omvang. Jy kan nie die var in die voorkant van 'n veranderlike, en dit beteken net dit is globale. Jy kan dit sien vanaf enige plek. Selfs as jy dit in 'n if-stelling te sit, nêrens anders in jou kode na daardie punt wat jy kan sien dat veranderlike. Nog 'n ding, al is, is saam met die bul, dit is beperk tot net die funksie wat jy in As jy nie in 'n funksie, wel, dit is globale. Maar as jy in 'n funksie is dit net binne daardie funksie sigbaar. Ek het nie 'n voorbeeld nie, maar, ja. Dit is een van daardie dinge waar jy kan beheer wat veranderlikes wat jy wil globale wees, wat veranderlikes wat jy wil plaaslike wees nie, maar jy moet versigtig wees oor hierdie, omdat jy nie die tipe van fyn graan beheer wat jy doen in C, waar as iets in 'n verklaarde vir lus, gaan dit in daardie om te bly vir lus. Die ding wat ons eintlik omgee oor die gebruik van JavaScript vir manipuleer web bladsye, reg? Ek bedoel, dit is hoekom ons hierdie doen. Om dit te doen, ons gebruik iets genoem die DOM. Die Document Object Model. Basies, wat dit doen, is dit neem al jou HTML en modelle dit uit in 'n klomp van die voorwerpe wat nes binne mekaar. Jy begin met iets soos hierdie. Jy het aan die regterkant vir my 'n klomp van die kode daar buite wat is soort van - Jy sou dink dat sou baie moeilik om te manipuleer wees, omdat jy die ontleding van word deur 'n klomp van die teks en met dinge uitmekaar te stuk. En wat as dit is nie korrek geformateer? Slegte dinge sal gebeur. So JavaScript sorg van hierdie vir jou, en jy kry 'n mooi data struktuur, soos die een op my gelaat, waar jy net 'n dokument, en binne-in dat jy iets genoem HTML, en binne-in dat jy het 'n kop en 'n liggaam, en binne daardie hoof het jy 'n titel, ensovoorts, ensovoorts, ensovoorts. Dit vereenvoudig manipuleer 'n webblad sodat dit is net, O ja, ek wil net om te praat met hierdie voorwerp. Soort van 'n baie soortgelyke manier waarop jy wil praat met 'n ander voorwerp jy self gemaak het. Soos ek gesê het, het al die DOM is in die dokument voorwerp. Óf dit is net een plek en dan kan jy gaan daarin om dinge te vind, en jy kan dit doen - dit is die ou styl om dit te doen, daar, waar jy document.getElementById, en dan die naam, en as jy waarskynlik kan sê, dit raak baie lomp na 'n ruk. So het jy waarskynlik nie wil hê om dit te doen. Dit is hoekom ons 'n die volgende ding wat ons gaan om te praat oor na hierdie. Die belangrikste ding hier is dat, alles reg, jy het al hierdie elemente, reg? So miskien kan ek die kleur van iets wanneer die bladsy laai verander. So, wat? Wat as my gebruiker iets druk? Ek wil dit iets interessant om te doen wanneer hulle iets klik. Dit is hoekom ons 'n gebeure. Jy kan, basies, vind 'n element in jou DOM, en dan sê, hey. Wanneer hierdie laai of iemand dit klik, of wanneer hulle die muis oor dit, doen iets met dit. En wat jy het is, jy het funksies wat dit vir jou hanteer. Hierdie funksies is event handlers. Wat they're - dit is net 'n fancy manier om te sê, hierdie funksie is slegs uitgevoer word wanneer hierdie gebeurtenis. So dit hanteer die geval wat plaasvind. Dit is hoe jy sal uit te lê 'n gebeurtenis hanteerder. Ek het 'n paar knoppie, en wanneer jy kliek op dit, dit ontplof. So kliek nie die knoppie. Dit is een manier om dit te nader, reg? Jy het 'n knoppie etiket, en op kliek wat jy het 'n string wat sê, O, by the way, ek doen dit ontplof ding vir my. Andersins, is dit net soos 'n gereelde knoppie wat jy nou net gemaak het. Jy kan dit ook doen 'n ander manier, deur gryp die DOM element nie, maar ons sal red wat na ons praat oor jQuery. JQuery: Dit is 'n biblioteek wat kruis-leser. Jy kan dit gebruik in pretty much enigiets. En dit is net gee jou 'n baie gereedskap om te werk met. Omdat JavaScript, terwyl kragtige, het nie al die gereedskap wat jy nodig uit die boks aan 'n web app regtig pak jy dalk wil om te doen. So dit vereenvoudig baie dinge, gee jou 'n baie funksies uit die boks wat jy normaalweg sou hê om jouself te skryf, oor en oor en oor weer. En maak net dinge baie eenvoudig. Jy het ook die keurders, wat laat jy neem al die elemente uit jou DOM baie meer eenvoudig, in plaas van om hierdie baie lang funksie oproepe om te gebruik. Meer oor hierdie keurders. Jy het, daar jy het, kom ons sê Ek wil 'n element te kry met die ID "rock." Wel, in jQuery, dit is net $ en dan 'n string wat 'n pond, en dan "rock." Dit is baie eenvoudig en 'n baie vinniger as die tradisionele JavaScript manier aanpak van hierdie probleem. En jy het 'n soortgelyke dinge vir klasse en element tipes. jQuery is - een van die interessante eienskappe is wat jy kan soort van compress down jou navrae op jou DOM baie, baie vinnig. Nou is ons terug na gebeurtenis hantering, en dit is hoe jy een byeenkoms in jQuery hanteer. So wat ons hier gaan is ons sê, alles reg. Ek het 'n script tag, reg? So ek het hierdie inline JavaScript. Wat ons gaan doen, is ons gaan om te sê, alles reg. Wanneer die dokument gereed is, wat beteken dat die dokument gelaai, Ons gaan om te gaan in daardie funksie, en ons gaan om te sê, alles reg, hierdie funksie is eintlik iets anders doen. Dit is basies sê, alles reg, kry vir my die element met die ID "myid." En dan gee dit 'n funksie hanteerder wat voer wanneer jy dit kliek. Basies wat dit beteken is, sê dit, alles reg. Die bladsy laai, so ek gaan in, vind hierdie element, gee hierdie gebeurtenis hanteerder, en dit basies sit jou bladsy vir jou. En dit is hoe jy wil om te dink oor geval hantering. Jy wil net om te dink oor, alles reg, wanneer daar iets gebeur, wat ek wil hê moet gebeur? Jy wil nie om te dink oor, okay, ek moet seker hierdie ding praat met hierdie saak te maak, hierdie ding blah blah blah, want jy wil net iets om te praat in terme van die gebeure. Wanneer dit gebeur, dit gebeur nie. Wanneer dit gebeur, dit gebeur. En as dinge sneller ander dinge, dit is groot. Maar jy wil nie om te probeer en doen ingewikkelde kode waar jy verwek verskeie dinge op dieselfde tyd, omdat jy net gaan om te gee jouself 'n hoofpyn. Alle regte. Nou kan ons ons bladsy gebeure te hanteer, maar kom ons sê my gebruiker 'n knoppie druk. Wat as ek wil hê dat die versoek om terug na die bediener stuur, maar ek wil nie die bladsy te laai, want met 'n nuwe bladsy te laai elke keer kry soort van saai, en hoekom moet ek weer trek die kop, en die voet weer en al die elemente van die bladsy weer net die groet of die tyd om te verfris? So dit is hoekom ons het iets soos Ajax. Wat kan ons hier doen met Ajax is wat ons kan sê, alles reg, Ek wil 'n paar data te stuur na die bediener, en ek wil 'n antwoord terug te kry sodat ek kan my bladsy werk, of dalk net doen sommige algoritmiese berekening wat nie noodwendig enigiets aan die gebruiker vertoon. Wat het jy nodig om dit te doen? Wel, jy moet 'n URL wat jy nodig het om te praat. Jou bediener kan nie net mettertyd luister uit die bloute. Jy moet 'n spesifieke plek waar jy die data wil stuur om te hê. En jy moet ook 'n paar data te stuur, of miskien is dit 'n dataless navraag. Jy wil net terug na die bediener ping en sê, hey, ek is in die lewe, of iets soos dit. En dan wil jy 'n funksie wat basies handvatsels met sukses. Kom ons sê jy terug sekere inligting van jou bediener, en jy wil hê dat die gebruiker se titel te verander op hulle bladsy. So sal jy die inligting terug te kry, en jy sal druk wat op die skerm. Wat gebeur is, wanneer die bladsy is gereed, jy 'n op klik-funksie vir hierdie knoppie genoem groet. Wat dit dan doen, is, wanneer daardie knoppie gedruk, jy praat greetings.php, maak jy 'n POST versoek en jy sê, hey, kry my iets van jou bladsy. Ons het nie regtig nodig om dit te beskryf nie, maar greetings.php, Laat ons net sê, gee terug "hallo wêreld." So kry ons terug hierdie "Hello World", en op die sukses van hierdie, veronderstelling niks verkeerd gaan, dan het ons net na hierdie teiken plek dat ons bepaalde en ons het net plak die reaksie daar. En dit is 'n baie eenvoudige manier van die opstel van 'n Ajax navraag. Baie vinnig, Rob soort genoem hierdie reeds dinge kan verkeerd gaan, kan slegte dinge gebeur, sodat jy wil om jouself vertroud te maak met hierdie HTTP reaksie kodes. Wat dit is net soos, 200, alles het okay. Iets anders, slegte dinge gebeur. Dit is gewoonlik die ding wat jy wil om te onthou. Maar dit is lekker om al hierdie te leer ken. En uiteindelik, wanneer ons gegaan het deur al daardie, ons nodig het om baie vinnig te praat oor die ontwerp, en dan kan ons u al verlaat. Ontwerp. Dinge wat jy wil om te onthou. Vra jouself die volgende vrae: Wie sal gebruik word om hierdie? Wat sal hulle gebruik word om dit vir? Wat doen my gebruikers omgee? Wat doen hulle nie omgee? Jy wil net nie 'n app te maak en laat dit net groei en word hierdie reuse, al beslag ding wat jy kan nie eens voltooi. Jy wil diskrete doelwitte en planne en dinge wat jy wil aan te spreek nie. Maak dit moeiteloos. Al hierdie sê, basies, maak dit maklik vir die gebruiker om dit te gebruik nie, moenie maak dit 'n reuse-blob van die teks soos hierdie skyfie is, eintlik. Jy wil dit net iets waar dit is baie maklik vir iemand om te gaan in wees en doen wat hulle wil doen. Jy wil nie hê dat hulle het 5 bladsye te navigeer te kry om jou primêre funksie van jou site. As Google het 5 bladsye voordat jy kan selfs soek iets, sou niemand dit gebruik. En laastens, papier prototipe, fokusgroep. Het 'n goeie ontwerp en toetsing praktyke. Net omdat jy dink dit werk vir jou, beteken nie enigiemand anders dink dit werk. Maar ja, dit is dit. [CS50.TV]