1 00:00:00,000 --> 00:00:02,270 >> [Review: Toets 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard Universiteit] 3 00:00:04,620 --> 00:00:07,660 [Hierdie is CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Welkom almal. Dit is hersiening vir quiz 1. 5 00:00:11,610 --> 00:00:15,040 Net soos 'n disclaimer, dit is - ek bedoel, ons gaan probeer om te dek 6 00:00:15,040 --> 00:00:17,770 soveel materiaal as moontlik, maar dit beteken nie dat 7 00:00:17,770 --> 00:00:20,780 ons gaan al die dinge wat in quiz 1 kan wees om te dek. 8 00:00:20,780 --> 00:00:25,270 So maak seker dat jy ook 'n blik op lesing, artikels, alles wat jy kan. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 gaan wees op Woensdag, volgende Woensdag. 10 00:00:28,240 --> 00:00:33,800 So seker wees om te studeer. Dit gaan wees, pretty much, soos die eerste toets 11 00:00:33,800 --> 00:00:36,390 ten opsigte van sy formaat, maar dit is waarskynlik gaan om te veel moeiliker. 12 00:00:36,390 --> 00:00:39,600 Ten minste, verlede jaar toe ek 50, het ek gedink dit was baie moeiliker. 13 00:00:39,600 --> 00:00:42,410 So bestudeer 'n baie. 14 00:00:42,410 --> 00:00:45,190 >> Ek gaan data strukture te dek en Huffman kodering. 15 00:00:45,190 --> 00:00:47,910 Dit is iets wat baie mense dink, is kompleks, 16 00:00:47,910 --> 00:00:51,930 maar Ek gaan om te probeer om dit so maklik as moontlik te maak. 17 00:00:51,930 --> 00:00:56,330 Eerste van alles wat ons wil hê julle om te weet vir quiz 1 is om te 18 00:00:56,330 --> 00:01:00,970 die konseptuele beskrywings van elk van die data strukture wat ek gaan aanbied verstaan. 19 00:01:00,970 --> 00:01:03,960 Dit beteken dat jy nie eintlik 20 00:01:03,960 --> 00:01:07,020 implementering van 'n hash tabel in jou quiz 1. 21 00:01:07,020 --> 00:01:10,250 Ons wil nie hê jy 'n hele hash tafel te implementeer; miskien sal ons probeer 22 00:01:10,250 --> 00:01:13,090 te maak dat jy 'n paar funksies te implementeer, 23 00:01:13,090 --> 00:01:16,940 die mees algemene bedrywighede, maar ons gaan nie maak dat jy alles te implementeer. 24 00:01:16,940 --> 00:01:21,010 Dus is dit belangrik dat jy die konsep agter elke data struktuur verstaan 25 00:01:21,010 --> 00:01:23,510 en ook dat jy in staat is om te kode in C, 26 00:01:23,510 --> 00:01:27,880 net die mees algemene bedrywighede hulle het vir elke data-struktuur. 27 00:01:27,880 --> 00:01:30,090 En ook in staat wees om wysers en structs te hersien, 28 00:01:30,090 --> 00:01:33,470 omdat dit lyk asof hulle 'n baie in die data strukture. 29 00:01:33,470 --> 00:01:37,380 >> Eerstens, gekoppel lyste. Geskakelde lyste is eintlik baie soortgelyk aan skikkings, 30 00:01:37,380 --> 00:01:39,930 maar die verskil tussen 'n geskakelde lys en 'n skikking, 31 00:01:39,930 --> 00:01:45,160 Eerste van alles, is dat 'n gekoppelde lys het 'n baie buigsame grootte, 32 00:01:45,160 --> 00:01:50,060 terwyl dit in skikkings wat jy hoef te kies om 'n baie groot grootte vir die skikking, 33 00:01:50,060 --> 00:01:53,710 sodat jy weet dat jy gaan in staat wees om al jou data in daardie skikking te stoor, 34 00:01:53,710 --> 00:01:59,370 of jy het malloc te gebruik om 'n buigsame lengte van verskeidenheid te hê. 35 00:01:59,370 --> 00:02:03,680 In verband lyste dit is baie maklik om net meer elemente, 36 00:02:03,680 --> 00:02:07,210 sit meer elemente in die geskakelde lys verwyder of elemente. 37 00:02:07,210 --> 00:02:09,370 En eintlik, as jy nie wil hê dat die geskakelde lys gesorteer moet word, 38 00:02:09,370 --> 00:02:13,950 kan jy soek en verwyder elemente in konstante tyd, 39 00:02:13,950 --> 00:02:16,800 so O (1) van tyd, so dit is baie handig. 40 00:02:16,800 --> 00:02:20,660 Jy moet net versigtig wees om altyd onthou om te malloc en vry wees om die knope, 41 00:02:20,660 --> 00:02:25,510 net omdat as jy dit nie doen nie, sal jy al die geheue lekkasies. 42 00:02:25,510 --> 00:02:31,480 So gekoppel lyste - die definisie van 'n knoop is net soos wat ons het net daar. 43 00:02:31,480 --> 00:02:35,110 Ek sit int n, maar jy kan enige inligting wat jy wil stoor. 44 00:02:35,110 --> 00:02:37,280 So as jy wil 'n string te slaan, is dit fine. 45 00:02:37,280 --> 00:02:41,690 As jy wil 'n struct te slaan, dit is goed, 'n dubbel, wat jy wil. 46 00:02:41,690 --> 00:02:44,630 Ek het net 'n int vir die voorbeelde hier. 47 00:02:44,630 --> 00:02:46,800 En jy het 'n wyser na die volgende knoop. 48 00:02:46,800 --> 00:02:51,940 So, basies, 'n gekoppelde lys het sommige data, en dan wys dit na die volgende knoop. 49 00:02:51,940 --> 00:02:56,710 As dit is die laaste element in die geskakelde lys, dit gaan om te wys op null. 50 00:02:56,710 --> 00:02:59,060 So, dit is 'n voorbeeld van 'n geskakelde lys. 51 00:02:59,250 --> 00:03:05,960 >> Goed, so nou kom ons kyk wat ons moet doen as ek wil 'n element in 'n geskakelde lys te voeg. 52 00:03:05,960 --> 00:03:08,810 Eerstens sal 'n funksie van die tipe insetsel nietig 53 00:03:08,810 --> 00:03:11,350 want ek wil nie iets om terug te keer. 54 00:03:11,350 --> 00:03:14,200 En ek gaan 'n int te neem as 'n argument, 55 00:03:14,200 --> 00:03:17,090 want ek wil weet wat ek wil hê om in te voeg. 56 00:03:17,090 --> 00:03:21,840 So, wat is die eerste ding wat ek moet doen? Wel, ek moet malloc op newnode, 57 00:03:21,840 --> 00:03:24,240 so dit is die eerste lyn. 58 00:03:24,240 --> 00:03:27,580 Ek is net 'n nuwe node te sit in 'n geskakelde lys. 59 00:03:27,580 --> 00:03:32,360 So, wat kan ek doen? Wel, ons weet dat ons in ons die implementering van geskakelde lyste 60 00:03:32,360 --> 00:03:38,180 in die klas, het ons altyd sit die kop as 'n globale veranderlike. 61 00:03:38,180 --> 00:03:41,800 So wat ons kan doen is om te verander die kop. 62 00:03:41,800 --> 00:03:44,300 Ek kan hierdie nuwe node wees om die nuwe hoof, 63 00:03:44,300 --> 00:03:46,670 en dit gaan om te wys op die vorige hoof. 64 00:03:46,670 --> 00:03:50,390 Hoe kan ons dit doen? Die eerste ding wat ek doen 65 00:03:50,390 --> 00:03:54,770 is verander die 'n 'in die nuwe knoop om die waarde, 66 00:03:54,770 --> 00:03:57,530 wat geslaag is aan die funksie. 67 00:03:57,530 --> 00:04:01,050 Dan newnode volgende gaan aan die hoof wees. 68 00:04:01,050 --> 00:04:05,800 Die hoof gaan newnode word. So dit is redelik eenvoudig. 69 00:04:05,800 --> 00:04:10,090 Vir die verwydering van 'n knoop, kan ons dit doen, soos - 70 00:04:10,090 --> 00:04:14,790 Een manier waarop ons dit kan doen is om te sê, 71 00:04:14,790 --> 00:04:18,160 okay, as ek wou om te verwyder, byvoorbeeld, 3, 72 00:04:18,160 --> 00:04:24,850 wat ek kan doen is om net wys die vorige node 73 00:04:24,850 --> 00:04:27,580 na die volgende knoop van 3. 74 00:04:27,580 --> 00:04:29,400 Daarom wil ek net iets soos dit. 75 00:04:29,400 --> 00:04:33,400 Maar wat is die probleem met die doen? 76 00:04:33,400 --> 00:04:37,400 Ek het 'n geheue lek, so ek toegang tot die nommer 3 het nie meer nie. 77 00:04:37,400 --> 00:04:42,480 Die probleem met dit is dat ek nie in staat sal wees dat node te bevry. 78 00:04:42,480 --> 00:04:45,360 Ek gaan 'n geheugenlek en (onverstaanbare) gaan my haat. 79 00:04:45,360 --> 00:04:49,370 So in plaas van om dit te doen, moet ek waarskynlik 'n tydelike wyser. 80 00:04:49,370 --> 00:04:53,210 So het ek temp. Dit gaan om te wys op die knoop wat ek wil om te verwyder. 81 00:04:53,210 --> 00:04:58,170 En dan het ek kan beweeg die vorige nodes om te wys op die volgende knoop 82 00:04:58,170 --> 00:05:00,390 van die knoop wat ek wil om te verwyder. 83 00:05:00,390 --> 00:05:02,730 En ten slotte, kan ek vry om die muis. 84 00:05:02,730 --> 00:05:07,480 Moet ek die wyser wat ek gemaak het net daar te bevry? 85 00:05:07,480 --> 00:05:09,560 Ek het nie, net omdat - 86 00:05:09,560 --> 00:05:13,430 Die verskil is dat hierdie knoop is geskep met behulp van malloc, 87 00:05:13,430 --> 00:05:17,280 dus is dit in die hoop, terwyl hierdie een is net verklaar as 'n leë skakelaar in die stapel. 88 00:05:17,280 --> 00:05:20,000 So ek hoef dit nie te bevry. 89 00:05:20,000 --> 00:05:22,030 >> Goed. So nou laat ons praat oor stapels. 90 00:05:22,030 --> 00:05:24,680 Stapels is redelik eenvoudig. 91 00:05:24,680 --> 00:05:29,540 Ons het stapels en toue in die klas net die gebruik van skikkings, 92 00:05:29,540 --> 00:05:32,820 maar jy moet vertroud wees - net bewus 93 00:05:32,820 --> 00:05:40,740 dat jy ook kan doen stapels in toue met behulp van geskakelde lyste as well. 94 00:05:40,740 --> 00:05:44,460 So as jy 'n skikking, wat sou 'n stapel wees? 95 00:05:44,460 --> 00:05:46,810 'N stapel, eerste, sal 'n grote te hê. 96 00:05:46,810 --> 00:05:49,950 Jy het om te stoor wat is die grootte van die stapel dat jy nou. 97 00:05:49,950 --> 00:05:52,980 En ook sal jy 'n verskeidenheid het, in hierdie geval van getalle, 98 00:05:52,980 --> 00:05:55,120 Maar as jy wil, kan dit 'n skikking te wees 99 00:05:55,120 --> 00:06:00,380 van snare, 'n verskeidenheid van struct, enigiets wat jy wil stoor. 100 00:06:00,380 --> 00:06:03,240 Oor die stapel: Die verskil tussen 'n stapel en 'n geskakelde lys 101 00:06:03,240 --> 00:06:08,590 is dat in die stapel jy net toegang tot die laaste element wat gestel is in die stapel het. 102 00:06:08,590 --> 00:06:11,770 Dit is die laaste in die naam, eerste uit. 103 00:06:11,770 --> 00:06:15,090 Net soos jy het 'n stapel van bak, 104 00:06:15,090 --> 00:06:17,670 As jy 'n skinkbord op die top van die stapel, 105 00:06:17,670 --> 00:06:22,670 jy het dat die skinkbord om eerste te verwyder toegang tot die ander bak te hê. 106 00:06:22,670 --> 00:06:26,310 Dit is dieselfde ding met stapels. 107 00:06:26,310 --> 00:06:31,220 So as ek wil, byvoorbeeld, voeg 'n element van 'n stapel, wat moet ek doen? 108 00:06:31,220 --> 00:06:34,070 Dit is bekend as druk, en dit is redelik eenvoudig. 109 00:06:34,070 --> 00:06:37,130 Die eerste ding wat jy hoef te doen, is om te kyk of die grootte van die stapel 110 00:06:37,130 --> 00:06:40,150 is nie groter of gelyk aan die kapasiteit van die stapel. 111 00:06:40,150 --> 00:06:45,810 Want as jy reeds op volle kapasiteit, kan jy nie anders voeg. 112 00:06:45,810 --> 00:06:51,140 En dan as dit nie, jy moet net die element te voeg tot die stapel. 113 00:06:51,140 --> 00:06:54,530 En uiteindelik, inkrementeer die grootte. So dit is redelik eenvoudig. 114 00:06:54,530 --> 00:06:57,140 So ek voeg net die nommer 2. 115 00:06:57,140 --> 00:07:00,350 En as ek wil om te pop, wat beteken dat ek wil verwyder 116 00:07:00,350 --> 00:07:03,870 die laaste element wat bygevoeg is en die standaard van die waarde van die element, 117 00:07:03,870 --> 00:07:09,180 die eerste ding wat ek het om seker te maak dat die stapel nie leeg is nie. 118 00:07:09,180 --> 00:07:11,510 Want as dit leeg is, kan ek nie terugkeer nie. 119 00:07:11,510 --> 00:07:14,820 In daardie geval, ek terugkeer -1. 120 00:07:14,820 --> 00:07:18,960 Anders, ek gaan die grootte van die spec te decrement, 121 00:07:18,960 --> 00:07:22,510 en terugkeer nommers (s.size). 122 00:07:22,510 --> 00:07:27,230 Hoekom het ek decrement die grootte en terugkeer s.size dan? 123 00:07:27,230 --> 00:07:30,930 Dit is omdat, in hierdie geval, die spec het grootte 4, 124 00:07:30,930 --> 00:07:33,810 en ek wil die vierde element om terug te keer, reg? 125 00:07:33,810 --> 00:07:36,030 Maar wat is die indeks van die vierde element? Drie. 126 00:07:36,030 --> 00:07:44,510 Aangesien ek nie die grootte - gaan wees 3, ek kan net terug s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 want dit is 3. So dit is net die indeks. 128 00:07:48,410 --> 00:07:50,380 >> Nou toue. Toue is pretty much dieselfde ding. 129 00:07:50,380 --> 00:07:54,950 Die enigste verskil is dat in plaas van laaste in, eerste uit, 130 00:07:54,950 --> 00:07:57,480 jy het eerste in, eerste uit. 131 00:07:57,480 --> 00:07:59,460 Waarskynlik as jy wag om te gaan na 'n konsert, 132 00:07:59,460 --> 00:08:04,260 jy sal nie gelukkig wees as jy 'n stapel in plaas van 'n tou. 133 00:08:04,260 --> 00:08:07,730 Synde die laaste persoon om te kom sou die eerste persoon om die konsert te betree nie. 134 00:08:07,730 --> 00:08:09,760 Jy sal waarskynlik nie gelukkig wees. 135 00:08:09,760 --> 00:08:15,020 In die ry, die eerste persoon om in te kom is ook die eerste persoon uit te kry. 136 00:08:15,020 --> 00:08:18,720 So in die definisie van 'n tou, behalwe dat die grootte van die skikking, 137 00:08:18,720 --> 00:08:23,360 jy het ook die kop, wat is die indeks aan die hoof van die stapel te hê. 138 00:08:23,360 --> 00:08:29,000 Dus is die eerste element op die oomblik. 139 00:08:29,000 --> 00:08:32,710 Enqueue is dieselfde as druk vir stapels. 140 00:08:32,710 --> 00:08:34,980 As jy baie naïef, sou jy net sê, 141 00:08:34,980 --> 00:08:39,289 Wel, ek kan net presies dieselfde ding doen soos ek gedoen het vir die druk. 142 00:08:39,289 --> 00:08:44,030 Ek kan net kyk of dit nie buite die vermoë. 143 00:08:44,030 --> 00:08:48,760 As dit is, ek terugkeer valse, anders kan ek net die uitvoer van die nuwe waarde 144 00:08:48,760 --> 00:08:50,630 en dan inkrementeer die grootte. 145 00:08:50,630 --> 00:08:52,750 Maar hoekom is dit verkeerd? 146 00:08:52,750 --> 00:08:55,010 Kom ons kyk na hierdie voorbeeld. 147 00:08:55,010 --> 00:08:57,020 Ek probeer 'n klomp van die dinge te enqueue, 148 00:08:57,020 --> 00:08:58,390 en dan gaan ek dequeue en enqueue. 149 00:08:58,390 --> 00:09:00,550 Daar is 'n baie opdragte, maar dit is baie eenvoudig. 150 00:09:00,550 --> 00:09:04,790 Ek gaan enqueue 5, so voeg 5, en dan 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, en dan wil ek iets te dequeue, 152 00:09:09,310 --> 00:09:12,000 wat beteken dat ek gaan die eerste element te verwyder. 153 00:09:12,000 --> 00:09:14,640 So ek gaan die nommer 3 te verwyder, reg? 154 00:09:14,640 --> 00:09:17,320 Die eerste element. Goed. 155 00:09:17,320 --> 00:09:21,450 Nou as ek probeer om iets anders te enqueue, is wat gaan gebeur? 156 00:09:21,450 --> 00:09:24,290 Volgens my implementering, 157 00:09:24,290 --> 00:09:31,040 Ek is van plan om die volgende getal te sit in die indeks q.size. 158 00:09:31,040 --> 00:09:35,140 In hierdie geval, die grootte is 8, 159 00:09:35,140 --> 00:09:38,640 So het die indeks 8 sal hier wees in die laaste posisie. 160 00:09:38,640 --> 00:09:43,900 As ek probeer om enqueue 1 reg hier, sou ek die vervang word om die laaste posisie 161 00:09:43,900 --> 00:09:45,870 om die nommer 1, wat is heeltemal verkeerd. 162 00:09:45,870 --> 00:09:49,870 Wat ek wil doen is om draai om en gaan na die eerste posisie. 163 00:09:49,870 --> 00:09:52,870 Miskien sal jy net sê, goed, ek het net om seker te maak 164 00:09:52,870 --> 00:09:55,600 as ek kan eintlik iets sit daar. 165 00:09:55,600 --> 00:09:58,560 Indien nie, het ek net sê, o, die nuwe volle kapasiteit 166 00:09:58,560 --> 00:10:02,010 is eintlik kapasiteit - 1, en jy kan nie 'n element sit daar. 167 00:10:02,010 --> 00:10:06,150 Maar wat is die probleem? Die probleem is dat as ek dequeue net alles reg hier 168 00:10:06,150 --> 00:10:08,240 en dan het ek probeer om iets anders te voeg, sou dit net sê, 169 00:10:08,240 --> 00:10:11,210 Wel, jy was teen volle kapasiteit, wat is 0. 170 00:10:11,210 --> 00:10:13,620 Sodat jou ry is weg. 171 00:10:13,620 --> 00:10:16,990 Jy het om te draai om, en 'n manier om te draai om 172 00:10:16,990 --> 00:10:22,040 dat julle in visioenêre en ander psets geleer is met behulp van mod. 173 00:10:22,040 --> 00:10:29,090 Jy kan probeer om dit by die huis om te verstaan ​​waarom jy q.size + q.head sou doen 174 00:10:29,090 --> 00:10:31,080 mod kapasiteit, maar as jy kyk hier, 175 00:10:31,080 --> 00:10:34,760 ons kan sien dat dit werk. 176 00:10:34,760 --> 00:10:37,760 So in die laaste voorbeeld, was q.size 8 177 00:10:37,760 --> 00:10:47,590 en die hoof was 1, want dit was hierdie posisie hier van die skikking. 178 00:10:47,590 --> 00:10:51,970 So sal dit wees 8 + 1, 9. Mod kapasiteit 9 sou wees 0. 179 00:10:51,970 --> 00:10:56,640 Dit sou gaan na die indeks 0. Ons sal wees in die regte posisie. 180 00:10:56,640 --> 00:10:59,750 En dan probeer om die tou by die huis. 181 00:10:59,750 --> 00:11:04,950 'N paar belangrike dinge: probeer om die verskil tussen 'n stapel en 'n tou te verstaan. 182 00:11:04,950 --> 00:11:11,620 By die huis, probeer om baie vertroud is met die implementering van enqueue, dequeue, stoot en pop te kry. 183 00:11:11,620 --> 00:11:16,560 En ook verstaan ​​wanneer jy elkeen van hulle sal gebruik. 184 00:11:16,560 --> 00:11:22,830 >> So laat ontspan vir 10 sekondes met 'n klomp van die Pokemons. 185 00:11:22,830 --> 00:11:26,080 En nou, laat ons terug na data strukture gaan. 186 00:11:26,080 --> 00:11:29,770 Hash tabelle. Baie van die mense is bang vir hash tabelle. 187 00:11:29,770 --> 00:11:33,650 in probleem gestel 6, speltoetser. 188 00:11:33,650 --> 00:11:35,980 Hash tafels en drieë, 'n klomp mense raak bang vir hulle. 189 00:11:35,980 --> 00:11:38,540 Hulle dink hulle is so moeilik om te verstaan. Ja? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Probleem stel 5. >> Probleem stel 5, ja. Dankie Rob. 191 00:11:41,490 --> 00:11:43,370 Ja. Ses was Huff n 'puff, ja. 192 00:11:43,370 --> 00:11:49,340 Probleem stel 5 is Speltoetser, en jy het nie 'n gemors tafel of 'n drie te gebruik. 193 00:11:49,340 --> 00:11:55,360 Baie van die mense het gedink dat hulle super moeilik om te verstaan ​​nie, maar hulle is eintlik eenvoudig. 194 00:11:55,360 --> 00:12:01,290 Wat is 'n gemors tafel, basies? 'N gemors tabel is 'n verskeidenheid van geskakelde lyste. 195 00:12:01,290 --> 00:12:06,730 Die enigste verskil tussen 'n skikking en 'n hash tafel 196 00:12:06,730 --> 00:12:09,730 is dat in die hash tafel het jy iets genoem 'n hash funksie. 197 00:12:09,730 --> 00:12:12,080 Wat is 'n hash funksie? 198 00:12:12,080 --> 00:12:13,970 Ek weet nie of julle hier kan lees. 199 00:12:13,970 --> 00:12:16,090 Dit is 'n voorbeeld van 'n hash tafel. 200 00:12:16,090 --> 00:12:19,220 Sodat jy kan sien wat jy het 'n skikking met 31 elemente. 201 00:12:19,220 --> 00:12:22,440 En wat ons doen in 'n gemors tafel is 'n hash funksie 202 00:12:22,440 --> 00:12:26,660 wat gaan 'n sleutelrol te vertaal, elke int tot 'n indeks. 203 00:12:26,660 --> 00:12:31,740 As, byvoorbeeld, as ek wil om te kies vir B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Ek sou sit B. Harrison in my hash funksies, 205 00:12:34,190 --> 00:12:36,960 en die hash funksie sal terugkeer 24. 206 00:12:36,960 --> 00:12:40,930 So ek weet wat ek wil B. Harrison te stoor in 24. 207 00:12:40,930 --> 00:12:46,580 So wat is die verskil tussen net met 'n skikking en 'n hash tafel. 208 00:12:46,580 --> 00:12:48,740 In die hash tafel sal jy 'n funksie wat gaan om jou te vertel het 209 00:12:48,740 --> 00:12:54,740 waar die data wat jy wil stoor te stoor. 210 00:12:54,740 --> 00:12:57,040 Vir die hash funksie, wat jy wil om te kyk vir 'n hash funksie 211 00:12:57,040 --> 00:13:00,600 wat deterministiese en goed versprei is. 212 00:13:00,600 --> 00:13:07,810 As jy hier kan sien, jy sien dat 'n groot deel van die data wat ek wou stoor was eintlik 19 213 00:13:07,810 --> 00:13:12,470 in plaas van die gebruik van 31 en 30 en 29, wat almal gratis. 214 00:13:12,470 --> 00:13:16,920 So het die hash funksie wat ek gebruik het, was nie baie goed versprei. 215 00:13:16,920 --> 00:13:20,710 Wanneer ons sê goed versprei is, beteken dit dat ons wil hê, 216 00:13:20,710 --> 00:13:26,520 ongeveer, ten minste 1 of 2 vir elk van die - 217 00:13:26,520 --> 00:13:32,190 soos, 'n verskil van 1 of 2 vir elk van die indekse in die skikkings. 218 00:13:32,190 --> 00:13:43,950 Jy wil hê, ongeveer dieselfde aantal elemente in elke gekoppel lys in die skikking. 219 00:13:43,950 --> 00:13:48,600 En dit is maklik om te kyk of dit geldig is in die hash tafel, sien as hash tabelle. 220 00:13:48,600 --> 00:13:51,770 >> Dan bome. Dit is 'n boom. 221 00:13:51,770 --> 00:13:56,400 Bome in Rekenaarwetenskap is onderstebo vir een of ander rede. 222 00:13:56,400 --> 00:14:00,150 So hier het jy die wortel van die boom en dan die blare. 223 00:14:00,150 --> 00:14:05,630 Jy moet net weet wat die naam vir ouers en kind. 224 00:14:05,630 --> 00:14:12,880 Elke node het sy kinders, wat die knope wat onder die ouer. 225 00:14:12,880 --> 00:14:19,660 So, byvoorbeeld, is 2 gaan na die ouer te wees vir 3 en vir die ander kind net daar, 226 00:14:19,660 --> 00:14:25,290 terwyl 3 gaan die ouer vir 1 en die ander kinders wat daar te wees. 227 00:14:25,290 --> 00:14:29,990 En 1 gaan 3 se kind te wees, en so aan. 228 00:14:29,990 --> 00:14:34,610 Ons het iets baie meer interessant, bekend as 'n binêre soek boom 229 00:14:34,610 --> 00:14:39,040 in wat al die waardes op die reg van 'n knoop 230 00:14:39,040 --> 00:14:41,660 gaan wees aan die regterkant, reg hier - op die regte, 231 00:14:41,660 --> 00:14:46,780 gaan groter as die element in die stam te wees. 232 00:14:46,780 --> 00:14:49,780 So as ek die nommer 5 hier, al die elemente op die regte 233 00:14:49,780 --> 00:14:51,940 gaan meer as 5 te wees, en aan die linkerkant 234 00:14:51,940 --> 00:14:56,770 al die elemente gaan na minder as 5 wees. 235 00:14:56,770 --> 00:14:58,780 Hoekom is dit nuttig? 236 00:14:58,780 --> 00:15:01,660 Wel, as ek wil om te kyk of die nommer 7 is hier, byvoorbeeld, 237 00:15:01,660 --> 00:15:05,960 Ek gaan net tot 5 eerste en ek gaan om te sien, is 7 meer of minder as 5? 238 00:15:05,960 --> 00:15:09,540 Dit is groter, so ek weet dit gaan hê om op die reg van die boom. 239 00:15:09,540 --> 00:15:13,980 So ek het baie minder dinge om na te kyk. 240 00:15:13,980 --> 00:15:19,520 In die implementering van 'n binêre soek boom, die knoop, is ek net gaan hê om data te hê, 241 00:15:19,520 --> 00:15:21,750 so int n, jy kan ook 'n string 242 00:15:21,750 --> 00:15:23,630 of enigiets wat jy wil. 243 00:15:23,630 --> 00:15:28,100 Jy moet net versigtig op die definisie van wat is groter wees, wat minder is. 244 00:15:28,100 --> 00:15:30,390 So as jy het stringe, byvoorbeeld, jy kan definieer 245 00:15:30,390 --> 00:15:34,690 dat al hierdie dinge op die regte gaan groter lengte te hê, 246 00:15:34,690 --> 00:15:40,940 links gaan laer lengtes te hê, so dit is regtig aan jou. 247 00:15:40,940 --> 00:15:44,930 >> Hoe kan ek implementeer vind vir BST? 248 00:15:44,930 --> 00:15:47,840 Die eerste ding wat ons sal moet doen, is om seker te maak dat die wortel is leeg. 249 00:15:47,840 --> 00:15:50,920 As dit is NULL, beteken dit dat die ding is nie daar nie 250 00:15:50,920 --> 00:15:53,330 omdat jy hoef nie eens 'n boom, reg? 251 00:15:53,330 --> 00:15:55,790 So ek terugkom onwaar. 252 00:15:55,790 --> 00:15:58,740 Anders, ek gaan om te kyk of die nommer is groter 253 00:15:58,740 --> 00:16:01,720 as die waarde in die wortel. 254 00:16:01,720 --> 00:16:04,250 Ek gaan om te probeer om die element te vind op die regte 255 00:16:04,250 --> 00:16:08,590 van die boom. 256 00:16:08,590 --> 00:16:11,310 Jy sien dat ek met behulp van rekursie hier. 257 00:16:11,310 --> 00:16:14,150 En dan as dit is minder, ek gaan om te kyk na die linkerkant. 258 00:16:14,150 --> 00:16:18,330 En uiteindelik, anders, as dit is nie minder of nie groter, 259 00:16:18,330 --> 00:16:20,660 beteken dit dat dit die waarde self. 260 00:16:20,660 --> 00:16:23,010 So ek terugkeer net waar. 261 00:16:23,010 --> 00:16:26,360 Jy kan hier sien dat ek gebruik as, as, indien. 262 00:16:26,360 --> 00:16:30,820 En onthou, in quiz 0, ons het 'n probleem wat het as, as, as, 263 00:16:30,820 --> 00:16:32,780 en jy is veronderstel om die ondoeltreffendheid te vind, 264 00:16:32,780 --> 00:16:35,180 en die ondoeltreffendheid is dat jy gebruik indien. 265 00:16:35,180 --> 00:16:39,060 Jy moet gebruik het as, anders as, anders as, en anders. 266 00:16:39,060 --> 00:16:44,240 So, moet ek gebruik anders as en anders as en hier nog? 267 00:16:44,240 --> 00:16:46,200 Is daar iemand - ja? 268 00:16:46,200 --> 00:16:51,140 [Studente praat, onhoorbaar] 269 00:16:51,140 --> 00:16:53,480 Dit is perfek nie. So sy sê dat dit nie saak maak, 270 00:16:53,480 --> 00:16:55,930 Net omdat die ondoeltreffendheid wat ons gehad het voordat 271 00:16:55,930 --> 00:16:59,550 was dit omdat, miskien as 'n toestand tevrede was, 272 00:16:59,550 --> 00:17:03,570 sodat jy het 'n aksie uitgevoer word, maar dan is jy gaan al die ander voorwaardes na te gaan. 273 00:17:03,570 --> 00:17:06,319 Maar in hierdie geval, is dit terug dadelik, so dit maak nie saak. 274 00:17:06,319 --> 00:17:09,220 So jy hoef nie te anders gebruik as. 275 00:17:09,220 --> 00:17:11,740 >> En uiteindelik, laat ons praat oor drieë, 276 00:17:11,740 --> 00:17:13,800 wat is almal se gunsteling. 277 00:17:13,800 --> 00:17:15,980 'N Drie is 'n boom van skikkings. 278 00:17:15,980 --> 00:17:20,369 Dit is baie vinnig om op te kyk waardes, maar dit maak gebruik van 'n baie van die geheue. 279 00:17:20,369 --> 00:17:22,530 En dit is gewoonlik woorde te filter, sodat wanneer jy 280 00:17:22,530 --> 00:17:27,920 wil implementeer, byvoorbeeld, weet ek nie, soos 'n telefoon boek in jou selfoon 281 00:17:27,920 --> 00:17:30,440 en jy wil in staat wees om B te tik 282 00:17:30,440 --> 00:17:32,510 en net die name van mense wat B. het 283 00:17:32,510 --> 00:17:37,960 Dit is baie maklik om te implementeer met behulp van 'n drie, byvoorbeeld. 284 00:17:37,960 --> 00:17:39,820 Hoe kan jy 'n knoop definieer in 'n probeer? 285 00:17:39,820 --> 00:17:43,910 Jy moet net 'n Bool wat gaan is_word word te hê. 286 00:17:43,910 --> 00:17:48,660 Dit verteenwoordig dat die gebruik van al die karakters voor die knoop, 287 00:17:48,660 --> 00:17:51,920 jy in staat was om 'n woord te vorm, 288 00:17:51,920 --> 00:17:57,230 en dan sal jy 'n verskeidenheid van verwysings na nodes. 289 00:17:57,230 --> 00:18:03,120 Kan jy sien dat ons 'n verskeidenheid van ouer knope, so knoop * verskeidenheid? Ja? 290 00:18:03,120 --> 00:18:06,050 So laat ons sien hoe dit sal werk. Vir die speltoets, 291 00:18:06,050 --> 00:18:08,230 Ons het 'n verskeidenheid van 27 elemente, 292 00:18:08,230 --> 00:18:12,150 want ons het al die briewe plus die toespraak. 293 00:18:12,150 --> 00:18:17,800 Voor hier is ek net gaan om te gebruik 2, want ek wil in staat wees om op die bord te skryf. 294 00:18:17,800 --> 00:18:20,230 Goed. So, dit is 'n voorbeeld van 'n drie. 295 00:18:20,230 --> 00:18:25,600 As ek maar net definieer die eerste knoop, sal ek 'n skikking van 2 elemente 296 00:18:25,600 --> 00:18:29,290 wat 2 verwysings na NULL, so ek net 'n 'en' B '. 297 00:18:29,290 --> 00:18:32,430 En ek gaan 'n Bool wat sê is_word te hê. 298 00:18:32,430 --> 00:18:34,420 Dit gaan onwaar is vir die eerste een te wees, 299 00:18:34,420 --> 00:18:37,370 net omdat, voor dat jy nie enige karakters het nie. 300 00:18:37,370 --> 00:18:40,900 So 'n leë woord is nie 'n woord. So dit is onwaar. 301 00:18:40,900 --> 00:18:46,320 As ek wil 'n "toe te voeg tot hierdie woordeboek, wat sou ek doen? 302 00:18:46,320 --> 00:18:49,760 Ek wil net 'n nuwe knoop vir 'n 'te malloc, 303 00:18:49,760 --> 00:18:54,630 en voeg dan die woord waar. 304 00:18:54,630 --> 00:19:00,180 So is dit net verteenwoordig dat hy 'n "gaan om waar te wees. Sin maak? 305 00:19:00,180 --> 00:19:04,120 Dan as ek wil 'ba' by te voeg, sal ek moet malloc 1 vir 'b', 306 00:19:04,120 --> 00:19:07,550 en dan gaan ek die opstel van die boolean vals, 307 00:19:07,550 --> 00:19:10,160 omdat 'b' op sigself is nie 'n woord. 308 00:19:10,160 --> 00:19:13,010 Dan gaan ek 'n ander een vir 'n ", so 'ba' to malloc, 309 00:19:13,010 --> 00:19:16,290 en dan gaan ek te rig dit is 'n woord te ware. 310 00:19:16,290 --> 00:19:18,950 Omdat 'ba' is 'n woord. 311 00:19:18,950 --> 00:19:21,910 En dan as ek wil om te sien of 'B' is in hierdie woordeboek, 312 00:19:21,910 --> 00:19:26,730 Ek kan net gaan na die eerste een, "b". Ek gaan af, en ek kyk na is, en dit sê onwaar. 313 00:19:26,730 --> 00:19:30,110 So dit is nie 'n woord. As ek wil 'ba' om seker te maak, 314 00:19:30,110 --> 00:19:38,010 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? 315 00:19:38,010 --> 00:19:41,950 Baie van die mense deurmekaar raak deur drieë gedruk. Nee? 316 00:19:41,950 --> 00:19:44,740 >> Ten slotte, Huffman kodering. Huffman kodering is baie nuttig 317 00:19:44,740 --> 00:19:47,550 geheue te red en teks lêers compress, 318 00:19:47,550 --> 00:19:52,270 Net omdat 'n baie kere wat jy gebruik 'n "en" e ", byvoorbeeld, 319 00:19:52,270 --> 00:19:57,710 in jou dokumente, maar ek weet nie of julle ouens gebruik 'Q' of 'Z' soveel. 320 00:19:57,710 --> 00:20:02,040 Na net 1 byte vir elke enkele karakter, 321 00:20:02,040 --> 00:20:08,520 elke enkele - die 256 karakters wat ons in die ASCII tabel is nie baie optimale, 322 00:20:08,520 --> 00:20:11,410 net omdat daar is 'n paar karakters wat jy baie meer gebruik nie, 323 00:20:11,410 --> 00:20:15,180 sodat jy moet waarskynlik minder geheue gebruik vir diegene. 324 00:20:15,180 --> 00:20:17,560 Hoe gebruik ek Huffman kodering? 325 00:20:17,560 --> 00:20:20,010 Ons het 'n Huffman boom te doen. 326 00:20:20,010 --> 00:20:23,370  'N Huffman boom het nodes 327 00:20:23,370 --> 00:20:27,760 wat 'n simbool wat gaan wees soos 'n "," b "," c ", die brief, 328 00:20:27,760 --> 00:20:32,990 watter letter jy, 'n frekwensie wat is die frekwensie wat die woord in die teks, 329 00:20:32,990 --> 00:20:36,280 dat jy die skep van die Huffman boom, 330 00:20:36,280 --> 00:20:41,800 en dan 'n knoop wat gaan om te wys aan die linkerkant van die Huffman boom 331 00:20:41,800 --> 00:20:47,210 en 'n ander knoop wat gaan om te wys op die regterkant. Dus net soos 'n boom. 332 00:20:47,210 --> 00:20:49,440 Hoe kan jy 'n Huffman boom bou? 333 00:20:49,440 --> 00:20:54,020 Jy gaan die 2 nodes wat die laagste frekwensies te tel. 334 00:20:54,020 --> 00:20:56,490 As jy 'n das jy gaan die 2 nodes te kies 335 00:20:56,490 --> 00:20:59,870 wat die laagste ASCII waardes as well. 336 00:20:59,870 --> 00:21:02,420 Dan is jy gaan 'n nuwe boom uit die 2 nodes te skep 337 00:21:02,420 --> 00:21:08,030 wat gaan die gesamentlike frekwensie in die voorgangernode te hê. 338 00:21:08,030 --> 00:21:13,240 En dan gaan jy die 2 kinders uit die bos te verwyder 339 00:21:13,240 --> 00:21:15,570 en dit te vervang met die ouer. 340 00:21:15,570 --> 00:21:18,930 En jy gaan om dit te herhaal totdat jy het net 1 boom in die bos. 341 00:21:18,930 --> 00:21:23,840 So laat ons sien hoe jy 'n Huffman boom doen vir ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Jy kan hier sien dat al die briewe het frekwensie 1, behalwe vir 'n '; wat frekwensie 2. 343 00:21:29,220 --> 00:21:34,090 So ek gemaak nodes vir al die briewe wat ek sit in orde van ASCII waarde en frekwensie. 344 00:21:34,090 --> 00:21:40,090 So as ek wil die eerste boom te skep, sal dit met 'L' en 'M'. 345 00:21:40,090 --> 00:21:43,100 So dit is hier. Die frekwensie van die paar sal wees 2 346 00:21:43,100 --> 00:21:49,470 want dit is 1 + 1, dan is die volgende 2 met die laagste frekwensie is 'Y' en 'Z'. 347 00:21:49,470 --> 00:21:53,180 En dan moet ek hulle almal om - 'n frekwensie van 2. 348 00:21:53,180 --> 00:22:00,470 So watter is die een wat die laagste ASCII waarde vir die volgende een? 349 00:22:00,470 --> 00:22:04,830 'A' en 'L'. So ek skep van die nuwe knoop, 350 00:22:04,830 --> 00:22:09,930 en uiteindelik, dit is 4 en 2, so 2 gaan wees op die linkerkant. 351 00:22:09,930 --> 00:22:12,430 En dit is die Huffman boom. 352 00:22:12,430 --> 00:22:16,060 Dan as ek wil 'n paar teks te skryf, 353 00:22:16,060 --> 00:22:24,440 soos in binêre om te skakel na die teks, met behulp van die Huffman boom is baie maklik. 354 00:22:24,440 --> 00:22:30,220 Byvoorbeeld, as ek sê dat die verskuiwing na links is 'n 0 en beweeg na die regterkant is 'n 1, 355 00:22:30,220 --> 00:22:32,410 Wat is dit gaan voor te stel? 356 00:22:32,410 --> 00:22:35,530 Dus, net soos 1, 1, so reg, reg, 357 00:22:35,530 --> 00:22:40,370 en dan 0, so gelaat sou wees L, en dan 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 So 1, 0, sodat net 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 En dan 0, 1, so 'Z'. 360 00:22:47,540 --> 00:22:52,170 En dan 1, 0, 0 - geen. 361 00:22:52,170 --> 00:22:56,780 0, 0 sal wees 'Y', so lui. 362 00:22:56,780 --> 00:23:06,060 So dit is al wat vir my, Rob se gaan oor te neem. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] So, week 7 dinge. 364 00:23:08,400 --> 00:23:11,390 Ons het 'n baie om te gaan oor baie vinnig. 365 00:23:11,390 --> 00:23:13,430 Bis-operateurs, buffer oorloop, 366 00:23:13,430 --> 00:23:16,760 CS50 biblioteek, dan HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Almal net 15 tot 20 minute. 368 00:23:20,990 --> 00:23:24,330 Bis-operateurs. Daar is 6 van hulle wat jy nodig het om te weet. 369 00:23:24,330 --> 00:23:31,200 Bitwise en bis of, XOR, links verskuiwing, reg verskuiwing en nie. 370 00:23:31,200 --> 00:23:35,420 Reg te skuif en nie jy skaars gesien in lesing by almal. 371 00:23:35,420 --> 00:23:40,480 Ons gaan oor dit vinnig hier, maar dit is goed om te weet dat hierdie is die 6 wat bestaan. 372 00:23:40,480 --> 00:23:45,070 Onthou dat bis operateurs is soos wanneer jy 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Jy word nie met die binêre van 3 en 4. 374 00:23:49,420 --> 00:23:56,550 Met bis operateurs jy eintlik die hantering van die individuele stukkies van die nommers 3 en 4. 375 00:23:56,550 --> 00:23:59,120 >> Dus is die eerste een wat ons sal sê, is bis nie, 376 00:23:59,120 --> 00:24:02,340 en al wat dit doen is om al die stukkies te draai. 377 00:24:02,340 --> 00:24:05,500 So hier is, as jy dit wil skryf in C, sou jy dit nie skryf 378 00:24:05,500 --> 00:24:09,380 as ~ 11011 of wat ook al, sou jy skryf dit graag ~ 4, 379 00:24:09,380 --> 00:24:12,970 en dan sal dit die binêre voorstelling van 4 flip. 380 00:24:12,970 --> 00:24:24,800 So hier, ~ van 'n paar binêre getal 1101101 gaan presies al 1's tot 0 se Flip en alle 0 se 1's. 381 00:24:24,800 --> 00:24:27,600 As ek sê daar is die gereelde gebruik van hierdie, 382 00:24:27,600 --> 00:24:30,830 en ons sal sien dit in 'n bietjie, is soos ons wil met 'n paar nommer te kom 383 00:24:30,830 --> 00:24:35,460 waar al die stukkies is 1, behalwe vir een van hulle. 384 00:24:35,460 --> 00:24:38,560 So is dit gewoonlik makliker om die nommer te druk 385 00:24:38,560 --> 00:24:40,630 waar net dat enkele bietjie gestel is, 386 00:24:40,630 --> 00:24:44,650 en dan neem die ~ van dit, sodat elke ander bietjie is ingestel behalwe vir daardie een. 387 00:24:44,650 --> 00:24:50,300 So dit is wat ons gaan meer in 'n bietjie om te gebruik. 388 00:24:50,300 --> 00:24:58,220 >> Bitwise of. Hier is 2 binêre getalle, en dié 2 getalle 389 00:24:58,220 --> 00:25:00,780 is redelik verteenwoordigende, aangesien hulle verteenwoordig elke moontlike 390 00:25:00,780 --> 00:25:07,290 kombinasie van stukkies kan jy nodig het om te werk op. 391 00:25:07,290 --> 00:25:13,540 Hier, toe ek or'd elke bietjie, ons is maar net gaan reguit af vergelyk. 392 00:25:13,540 --> 00:25:15,410 So aan die linkerkant ons het 'n 1 en 'n 1. 393 00:25:15,410 --> 00:25:20,510 Toe ek bis | diegene, wat gaan ek te kry? Een. 394 00:25:20,510 --> 00:25:25,320 Dan bis | 0 en 1 gaan my te gee nie? Een. 395 00:25:25,320 --> 00:25:27,840 Bis 1 en 0 gaan dieselfde ding, een. 396 00:25:27,840 --> 00:25:31,880 Bis 0 | 0 gaan gee my 0. 397 00:25:31,880 --> 00:25:37,300 Dus is die enigste geval waar ek 0 is in die 0 | 0 geval. 398 00:25:37,300 --> 00:25:40,020 En jy kan dink wat net soos jou logiese ors. 399 00:25:40,020 --> 00:25:44,830 So as jy dink van 1 as waar en 0 as vals, dieselfde ding hier van toepassing. 400 00:25:44,830 --> 00:25:50,040 So waar of waar is, is waar, waar of vals is waar. 401 00:25:50,040 --> 00:25:57,150 Vals of waar is waar, vals of onwaar is die enigste ding wat is eintlik onwaar is. 402 00:25:57,150 --> 00:26:00,100 Hier is die voorbeeld wat jy moet weet 403 00:26:00,100 --> 00:26:05,160 as 'n goeie voorbeeld van wanneer bis operateurs gebruik word. 404 00:26:05,160 --> 00:26:08,660 Hier sou ons of kapitaal "A" met Ox20, 405 00:26:08,660 --> 00:26:11,830 en ons sal kyk na dit in 'n tweede, het ons iets kry. 406 00:26:11,830 --> 00:26:16,020 En as ons of klein 'n "met Ox20 ons iets kry. 407 00:26:16,020 --> 00:26:26,750 So laat trek ASCII-tabel. 408 00:26:26,750 --> 00:26:34,000 Goed. Hier sien ons dat 'A' is - 409 00:26:34,000 --> 00:26:36,920 hier het ons 'A' desimale 65. 410 00:26:36,920 --> 00:26:45,120 Maar ek sal gaan met heksadesimale, wat Ox41. 411 00:26:45,120 --> 00:26:48,280 Redelik seker ons het dit gesien in die klas. Ek dink ons ​​het dit gesien in die klas 412 00:26:48,280 --> 00:26:52,730 dat dit is redelik maklik om te sit van heksadesimaal na binêr. 413 00:26:52,730 --> 00:26:55,280 So hier, as ek wil om te sit in 4 binêre, 414 00:26:55,280 --> 00:26:59,550 wat net gaan 0100. 415 00:26:59,550 --> 00:27:03,620 Dit is 1 se plek, 2 se plek, 4 se plek, so dit is 4. 416 00:27:03,620 --> 00:27:08,550 Dan kan ek verdeel 1 in binêre, wat gaan wees 0001. 417 00:27:08,550 --> 00:27:14,280 En so dit gaan die verteenwoordiging van 'A' in binêre te wees. 418 00:27:14,280 --> 00:27:22,720 Neem klein 'n ", is dit nou gaan wees Ox61, 419 00:27:22,720 --> 00:27:27,050 waar hierdie te verdeel in sy binêre, so 'n 6 - 420 00:27:27,050 --> 00:27:37,830 Kom ons werklik te doen - daar is geen gom? Uitveër. 421 00:27:37,830 --> 00:27:48,220 Ox61. So verdeel 6 in binêre gaan wees 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 En verdeel 1 gaan wees 0001. 423 00:27:54,610 --> 00:27:56,520 Kyk na die verskil tussen hierdie 2, 424 00:27:56,520 --> 00:28:04,250 sien ons dat die enigste verskil tussen 'n klein en 'n kapitale 'A' is die enkele bietjie. 425 00:28:04,250 --> 00:28:11,810 So terug te kom hier - okay. 426 00:28:11,810 --> 00:28:15,920 Kom terug na hier, as ons kyk na wat die bietjie Ox20 is, 427 00:28:15,920 --> 00:28:22,210 so verdeel Ox20 in sy binêre, 428 00:28:22,210 --> 00:28:27,310 is 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, die enigste stukkie wat gestel is, is die bietjie wat ons is betrokke by, 430 00:28:33,470 --> 00:28:38,210 met die skakel tussen hoofletters en klein 'n ". 431 00:28:38,210 --> 00:28:47,610 As ek of 'A', wat is hierdie een, 'A', 432 00:28:47,610 --> 00:28:50,580 As ek of 'A' met Ox20, 433 00:28:50,580 --> 00:28:53,490 Wat gaan ek te kry? 434 00:28:53,490 --> 00:28:58,960 [Student, onhoorbaar] >> klein letters 'n ", want dit gaan hierdie bietjie om te draai na 'n 1. 435 00:28:58,960 --> 00:29:04,170 En as ek of 'n 'met Ox20, wat gaan ek te kry? 436 00:29:04,170 --> 00:29:08,780 Kleinletter a, want net oring 'n 'met Ox20, 437 00:29:08,780 --> 00:29:14,580 Ek is net gaan om te oring hierdie enkele bietjie na 'n 1; dit is reeds 'n 1, so dit maak nie saak. 438 00:29:14,580 --> 00:29:17,960 So kry ons 'n 'en 'n'. 439 00:29:17,960 --> 00:29:24,820 >> Bitwise en. Weereens, kan ons dink aan dit as ons logies en eweknie. 440 00:29:24,820 --> 00:29:28,180 Aan die linkerkant het ons ware en waar. 441 00:29:28,180 --> 00:29:31,160 Dit gaan om waar te wees, en vir al die gevalle, 442 00:29:31,160 --> 00:29:36,270 valse & waar of true & vals of onwaar & valse, 443 00:29:36,270 --> 00:29:38,550 nie een van daardie dinge is waar. 444 00:29:38,550 --> 00:29:44,170 So wat ons uiteindelik kry is 1000. 445 00:29:44,170 --> 00:29:48,830 So nou, hier, hier is waar ek die betroubare bis gebruik het nie, 446 00:29:48,830 --> 00:29:52,230 waar ons Ox20. 447 00:29:52,230 --> 00:29:54,350 So dit is Ox20. 448 00:29:54,350 --> 00:29:59,570 Nou wat ek wil doen, bis ~ van Ox20. 449 00:29:59,570 --> 00:30:03,600 Dit gaan al die stukkies om te draai. 450 00:30:03,600 --> 00:30:09,330 So ek het 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 En so 'A' anded met ~ Ox20 gaan my te gee wat? 452 00:30:18,940 --> 00:30:22,430 Die enigste stukkie ons regtig nodig het om te dink oor is hierdie een, 453 00:30:22,430 --> 00:30:26,020 sedert, as al hierdie stukkies is ingestel op 1, 454 00:30:26,020 --> 00:30:29,000 dan gaan ons te kry presies wat 'A' was, 455 00:30:29,000 --> 00:30:31,260 behalwe vir, moontlik, wat dit bietjie is. 456 00:30:31,260 --> 00:30:34,460 Want as dit was 'n 1, nou is dit gaan ingestel word om 'n 0, 457 00:30:34,460 --> 00:30:39,810 want alles wat dit is, anded met hierdie gaan wees 0. 458 00:30:39,810 --> 00:30:43,280 So, wat is 'n '& ~ Ox20 gaan gee my? 459 00:30:43,280 --> 00:30:48,200 [Studente beantwoord, onhoorbaar] >> En wat is 'n "en - dit is 'A'. 460 00:30:48,200 --> 00:30:52,170 En wat is 'n '& ~ Ox20 gaan gee my? 461 00:30:52,170 --> 00:30:56,720 'A.' Want dit is tans 'n 1. 462 00:30:56,720 --> 00:30:59,570 Anding met hierdie 0 gaan maak dit 'n 0, 463 00:30:59,570 --> 00:31:02,530 en nou is ons gaan 'n 'A' te kry. 464 00:31:02,530 --> 00:31:06,600 >> Beide is 'n "en laaste maar nie die minste van hierdie tipe, 465 00:31:06,600 --> 00:31:10,830 ons het XOR. Dit is baie soos of, 466 00:31:10,830 --> 00:31:14,400 behalwe dit beteken uitsluitlik of. 467 00:31:14,400 --> 00:31:18,420 Dit is soos wat jy gewoonlik dink as of in die werklike wêreld. 468 00:31:18,420 --> 00:31:23,190 So jy óf 'x' of 'y', maar nie beide nie. 469 00:31:23,190 --> 00:31:28,700 Hier 1 ^ 1 gaan wees 0. 470 00:31:28,700 --> 00:31:33,650 Omdat die ware, dit is nie - dit is nie so goed werk met die logiese ware en valse 471 00:31:33,650 --> 00:31:37,150 as bis-& en of doen nie, 472 00:31:37,150 --> 00:31:40,100 maar waar ^ waar is, is onwaar. 473 00:31:40,100 --> 00:31:44,810 Omdat ons wil net om terug te keer waar as slegs een van hulle is waar. 474 00:31:44,810 --> 00:31:50,950 So 1 ^ 1 0. Wat van 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Is 1. 1 ^ 0 is 1, 0 ^ 0 0. 476 00:31:56,010 --> 00:32:03,890 So onder alle omstandighede, is 0 bis iets 0 gaan wees 0. 477 00:32:03,890 --> 00:32:10,270 1 bis iets 0 of 0 bis 1, 478 00:32:10,270 --> 00:32:14,660 As dit is | of ^, sal dit 'n 1, en as dit is en dit sal wees 0. 479 00:32:14,660 --> 00:32:20,850 En die enigste geval waar 1 bis 1 is nie 1 is met 'n eksklusiewe of. 480 00:32:20,850 --> 00:32:24,580 Dit is 0110. 481 00:32:24,580 --> 00:32:36,520 So hier en nou, met behulp van XOR - so ons is terug by die 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ Ox20 is hierdie 2 stukkies ons vergelyk. 483 00:32:43,480 --> 00:32:50,020 So 'n 1 ^ 0 gaan om te gee my 'n wat? 'N Een. 484 00:32:50,020 --> 00:32:58,430 'A' ^ Ox20 gaan my te gee nie? Kleinletter a. 485 00:32:58,430 --> 00:33:04,010 'N' ^ Ox20 gaan my te gee nie? Capital A. 486 00:33:04,010 --> 00:33:09,310 Want alles wat dit doen, is dit XORing met Ox20 487 00:33:09,310 --> 00:33:15,380 effektief daarby net hierdie stukkie is. 488 00:33:15,380 --> 00:33:21,240 As dit 'n 0, dit gaan nou 'n 1. 489 00:33:21,240 --> 00:33:26,160 Aangesien dit 'n 1, 1 ^ 1 0. 490 00:33:26,160 --> 00:33:33,280 So ons 'n "geword" A ", en ons 'A' het geword 'n '. 491 00:33:33,280 --> 00:33:36,910 So XOR is 'n baie maklike manier om net daarby die geval nie. 492 00:33:36,910 --> 00:33:39,960 Jy wil net Itereer oor 'n string van letters 493 00:33:39,960 --> 00:33:44,330 en wissel die geval van elke enkele karakter, 494 00:33:44,330 --> 00:33:50,680 jy net XOR alles met Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Nou het ons skof verlaat. Links verskuiwing gaan net, basies, 496 00:33:55,220 --> 00:34:01,250 druk al die nommers in, of aan die linkerkant, en voeg 0 se agter hulle. 497 00:34:01,250 --> 00:34:05,550 So hier het ons 00001101. 498 00:34:05,550 --> 00:34:08,560 Ons gaan 3 0's in te stoot van die reg, 499 00:34:08,560 --> 00:34:13,580 en ons kry 01101000. 500 00:34:13,580 --> 00:34:16,380 In nonbinary terme, 501 00:34:16,380 --> 00:34:24,699 sien ons dat dit is regtig die hantering 13 links verskuif met 3, wat ons gee 104. 502 00:34:24,699 --> 00:34:32,530 So links verskuiwing, hier sien ons, x << y is basies x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 is 8, so 13 * 8 104. 504 00:34:40,139 --> 00:34:45,679 As jy net dink oor binêre in die algemeen, hoe elke syfer, 505 00:34:45,679 --> 00:34:49,530 As ons begin van die reg, dit is die 1 se plek, dan is die 2 se plek, dan is die 4 se plek. 506 00:34:49,530 --> 00:34:51,330 So deur te druk in 0's van die reg, 507 00:34:51,330 --> 00:34:55,080 ons is maar net besig om dinge wat in die 4 se plek op die 8 se plek, 508 00:34:55,080 --> 00:34:57,920 en dinge wat in die 8 se plek aan die 16 se plek. 509 00:34:57,920 --> 00:35:01,280 Elke skof vermeerder net deur 2. Ja? 510 00:35:01,280 --> 00:35:05,210 [Studente] Wat gebeur as jy verskuif deur 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] As jy geskuif 5 sal jy net syfers verloor. 512 00:35:10,790 --> 00:35:15,410 Onvermydelik, dit is dieselfde ding. Soos, heelgetalle is slegs 32 stukkies, 513 00:35:15,410 --> 00:35:20,750 So as jy 2 baie groot heelgetalle voeg, is dit net nie pas in 'n heelgetal. 514 00:35:20,750 --> 00:35:23,660 So dit is dieselfde ding hier. As jy verskuif deur 5, 515 00:35:23,660 --> 00:35:25,650 Ons wil net verloor dat een. 516 00:35:25,650 --> 00:35:28,820 En dit is soort van wat ek bedoel met "ongeveer" 517 00:35:28,820 --> 00:35:37,470 waar as jy te ver verskuif, verloor jy stukkies. 518 00:35:37,470 --> 00:35:39,830 >> Right verskuiwing gaan die teenoorgestelde te wees, 519 00:35:39,830 --> 00:35:43,090 waar ons gaan 0 se af die einde te stoot, 520 00:35:43,090 --> 00:35:48,400 en vir ons doeleindes, vul 0's van die linkerkant. 521 00:35:48,400 --> 00:35:52,910 So om dit te doen, ons is basies omkeer wat ons reeds gedoen. 522 00:35:52,910 --> 00:35:57,780 En ons sien dat die drie 0 se op die regte het net afgeval, 523 00:35:57,780 --> 00:36:02,020 en ons het gestoot die 1101 al die pad na regs. 524 00:36:02,020 --> 00:36:08,380 Dit is om te doen 104 >> 3, wat is, effektief, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 So nou, hier, dit is 'n soortgelyke idee. 526 00:36:11,200 --> 00:36:18,720 Hoekom is dit net sowat x / 2 ^ y, en nie eintlik x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Want as ek met 4 verskuif het, sou ek verloor het 'n 1. 528 00:36:22,240 --> 00:36:25,950 Basies, wat jy dink, dink net aan integer-afdeling in die algemeen. 529 00:36:25,950 --> 00:36:31,070 So, soos 5/2 is 2. Dit is nie 2.5. 530 00:36:31,070 --> 00:36:35,000 Dit is dieselfde idee hier. Wanneer ons deel deur 2, 531 00:36:35,000 --> 00:36:39,910 ons kan verloor vreemde stukkies langs die pad. 532 00:36:39,910 --> 00:36:43,870 So nou - dit is dit vir bis. Dit is al wat jy nodig het om te weet. 533 00:36:43,870 --> 00:36:46,340 Onthou om die gebruik van gevalle het ons gesien in die klas, 534 00:36:46,340 --> 00:36:49,340 soos 'n bietjie masker is nuttig vir bis-operateurs, 535 00:36:49,340 --> 00:36:53,220 of jy dit gebruik vir bietjie maskers. 536 00:36:53,220 --> 00:36:58,620 Hoofletters en kleinletters, doelskoppe is 'n mooi voorbeeld te voorbeeld. 537 00:36:58,620 --> 00:37:01,640 >> Goed, so buffer oorloop aanvalle. 538 00:37:01,640 --> 00:37:05,110 Enigeen onthou wat verkeerd met hierdie funksie was? 539 00:37:05,110 --> 00:37:10,140 Kennisgewing wat ons verklaar 'n skikking van 12 grepe, 12 karakters, 540 00:37:10,140 --> 00:37:18,510 en dan kopieer ons in ons buffer van 12 karakters van die hele string bar. 541 00:37:18,510 --> 00:37:25,080 So wat is die probleem hier? 542 00:37:25,080 --> 00:37:32,270 Die magic nommer 12 moet pretty much onmiddellik pop uit as - waarom 12? 543 00:37:32,270 --> 00:37:35,050 Wat as bar gebeur met meer as 12 karakters? 544 00:37:35,050 --> 00:37:41,200 Wat as bar is miljoene van die karakters? 545 00:37:41,200 --> 00:37:46,010 Hier is die probleem is memcpy. As bar is lank genoeg, 546 00:37:46,010 --> 00:37:50,330 dit sal net heeltemal - 'c', 'c' nie omgee dat dit net 12 karakters; 547 00:37:50,330 --> 00:37:53,280 'C' nie omgee dat dit nie kan inpas dat baie grepe. 548 00:37:53,280 --> 00:37:58,250 Dit sal net heeltemal oorskryf kar, die 12 grepe ons daarvoor toegeken het, 549 00:37:58,250 --> 00:38:01,830 en alles verby in die geheue wat nie eintlik nie behoort aan dat buffer 550 00:38:01,830 --> 00:38:06,520 met alles wat die string bar is. 551 00:38:06,520 --> 00:38:09,780 So dit was die prentjie wat ons sien in die klas 552 00:38:09,780 --> 00:38:12,220 waar ons ons stapel grootword. 553 00:38:12,220 --> 00:38:16,040 Jy moet gebruik word om hierdie foto's of kry vertroud is met hulle weer. 554 00:38:16,040 --> 00:38:21,260 Ons het ons stapel grootword, geheue-adresse begin by 0 op die top 555 00:38:21,260 --> 00:38:26,270 en groei af te hou 4000000000 aan die onderkant. 556 00:38:26,270 --> 00:38:28,820 Ons het ons skikking 'c' iewers in die geheue, 557 00:38:28,820 --> 00:38:32,260 dan moet ons ons wyser te staaf reg onder dit, 558 00:38:32,260 --> 00:38:38,720 en dan het ons hierdie gered raam wyser in ons terugkeer adres en ons ouer roetine se stapel. 559 00:38:38,720 --> 00:38:40,800 Onthou wat die terugkeer adres is? 560 00:38:40,800 --> 00:38:45,360 Dit is wanneer hoof roep 'n funksie cat, roep 'n funksie bar, 561 00:38:45,360 --> 00:38:48,100 onvermydelik, Bar opbrengste. 562 00:38:48,100 --> 00:38:52,610 So wanneer bar opbrengste, wat hulle nodig het om te weet dat dit terug te gaan na cat dat dit genoem. 563 00:38:52,610 --> 00:39:01,360 So het die terugkeer adres is die adres van die funksie wat dit het om terug te keer wanneer die funksie gee. 564 00:39:01,360 --> 00:39:05,830 Die rede wat belangrik is vir die buffer oorloop aanvalle is omdat, gerieflik, 565 00:39:05,830 --> 00:39:09,580 hackers graag dat terugkeer adres te verander. 566 00:39:09,580 --> 00:39:14,950 In plaas van om terug te gaan cat, ek gaan terug na waar die hacker wil my om terug te gaan loop. 567 00:39:14,950 --> 00:39:17,760 En, gerieflik, waar die hacker wil gereeld terug te gaan na 568 00:39:17,760 --> 00:39:22,400 is die begin van die buffer wat ons aanvanklik gehad het. 569 00:39:22,400 --> 00:39:26,170 So sien weer, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Die toestel is 'n voorbeeld van 'n klein Indiese stelsel, 571 00:39:28,490 --> 00:39:34,140 so 'n getal of 'n wyser word gestoor met die grepe omgekeer. 572 00:39:34,140 --> 00:39:38,980 So hier sien ons - is dit? Ja. 573 00:39:38,980 --> 00:39:45,660 Ons sien Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Onthou die heksadesimale syfers? 575 00:39:48,250 --> 00:39:50,640 Ons het die heksadesimale syfers in Little Indian omkeer nie, 576 00:39:50,640 --> 00:39:56,110 omdat 2 hexadecimalen maak 'n enkele byte, en ons reverse die grepe. 577 00:39:56,110 --> 00:40:00,300 Dit is hoekom ons nie stoor nie, soos, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Ons stoor, in plaas daarvan, elke paar 2 syfers, vanaf die regterkant. 579 00:40:07,520 --> 00:40:10,880 Dit adres verwys na die adres van die begin 580 00:40:10,880 --> 00:40:15,190 van ons buffer wat ons wou eintlik te kopieer in die eerste plek. 581 00:40:15,190 --> 00:40:19,230 Die rede is dat dit nuttig is omdat, wat as die aanvaller 582 00:40:19,230 --> 00:40:24,100 gebeur het, in plaas van om 'n string wat was net 583 00:40:24,100 --> 00:40:27,060 'n onskadelike string van soos, hul naam of iets, 584 00:40:27,060 --> 00:40:33,900 Wat as, in plaas daarvan, dat die snaar was net 'n paar arbitrêre kode 585 00:40:33,900 --> 00:40:38,610 dat alles gedoen wat hulle wou hê om dit te doen? 586 00:40:38,610 --> 00:40:45,630 Sodat hulle kon - Ek kan nie dink aan enige koel kode. 587 00:40:45,630 --> 00:40:47,780 Dit kan enigiets wees, al is. Enige rampspoedige kode. 588 00:40:47,780 --> 00:40:51,440 As hulle wou, kon hulle net iets op seg foute te doen nie, maar dat dit sal nutteloos wees. 589 00:40:51,440 --> 00:40:54,950 Hulle doen dit gewoonlik jou stelsel te kap. 590 00:40:54,950 --> 00:40:59,930 >> Goed. CS50 biblioteek. 591 00:40:59,930 --> 00:41:04,800 Dit is basies, getint, getString, al die funksies wat ons voorsien vir jou. 592 00:41:04,800 --> 00:41:10,630 So het ons 'n kar * string, en dit is die onttrekking dat ons weggewaai 593 00:41:10,630 --> 00:41:12,450 op 'n stadium gedurende die semester. 594 00:41:12,450 --> 00:41:18,220 Onthou dat 'n string is net 'n verskeidenheid van die karakters. 595 00:41:18,220 --> 00:41:23,240 So hier sien ons 'n verkorte weergawe van getString. 596 00:41:23,240 --> 00:41:25,920 Jy moet terug te kyk na dit om te onthou hoe dit is eintlik geïmplementeer word. 597 00:41:25,920 --> 00:41:30,950 Sleutel besonderhede, sien ons kry in 'n enkele karakter op 'n tyd 598 00:41:30,950 --> 00:41:34,570 van standaard in, wat net soos ons die tik op die sleutelbord. 599 00:41:34,570 --> 00:41:37,890 So 'n enkele karakter op 'n tyd, en as ons te veel karakters, 600 00:41:37,890 --> 00:41:40,580 So as n + 1 is groter as kapasiteit, 601 00:41:40,580 --> 00:41:44,140 dan moet ons die kapasiteit van ons buffer te verhoog. 602 00:41:44,140 --> 00:41:47,780 So hier is ons die verdubbeling van die grootte van ons buffer. 603 00:41:47,780 --> 00:41:51,840 En dit gaan hou nie, ons voeg die karakter in ons buffer 604 00:41:51,840 --> 00:41:56,220 totdat ons 'n nuwe lyn of einde van die lêer of wat ook al, 605 00:41:56,220 --> 00:41:59,380 in welke geval, ons klaar is met die string en dan die werklike getString 606 00:41:59,380 --> 00:42:05,120 krimp die geheue, soos as ons te veel geheue toegeken sal dit terug te gaan en 'n bietjie krimp. 607 00:42:05,120 --> 00:42:08,830 So wys ons dit nie, maar die belangrikste idee is 608 00:42:08,830 --> 00:42:11,960 dit het om te lees in 'n enkele karakter op 'n tyd. 609 00:42:11,960 --> 00:42:17,140 Dit kan nie net lees in 'n hele ding op 'n keer, 610 00:42:17,140 --> 00:42:19,550 omdat hul buffer is slegs van 'n sekere grootte. 611 00:42:19,550 --> 00:42:26,590 So as die string wat dit probeer in te voeg in buffer te groot is, dan sou dit oorloop. 612 00:42:26,590 --> 00:42:28,940 So hier is ons verhoed dat slegs deur te lees in 'n enkele karakter 613 00:42:28,940 --> 00:42:33,750 op 'n tyd en groeiende wanneer ons nodig het om te. 614 00:42:33,750 --> 00:42:40,270 So getint en die ander CS50 biblioteek funksies geneig getString te gebruik 615 00:42:40,270 --> 00:42:42,310 in hul implementering. 616 00:42:42,310 --> 00:42:45,370 So ek het die belangrike dinge hier. 617 00:42:45,370 --> 00:42:49,460 Dit is dan getString 'n string te kry. 618 00:42:49,460 --> 00:42:51,710 As getString misluk geheue om terug te keer, 619 00:42:51,710 --> 00:42:54,270 onthou dat getString mallocs iets, so wanneer jy getString noem 620 00:42:54,270 --> 00:42:57,820 jy moet nie (onverstaanbare) vry wat string wat jy het. 621 00:42:57,820 --> 00:43:02,870 So hier, as dit nie iets te malloc, keer ons terug INT_MAX as net 'n vlag wat, 622 00:43:02,870 --> 00:43:05,650 hey, ons was nie eintlik in staat om 'n heelgetal te kry. 623 00:43:05,650 --> 00:43:10,830 Jy moet ignoreer alles wat ek na julle terugkeer, of 624 00:43:10,830 --> 00:43:15,540 moet jy dit nie hanteer as 'n geldige toevoer. 625 00:43:15,540 --> 00:43:21,360 Ten slotte, in die veronderstelling dat het wel daarin geslaag het, gebruik ons ​​sscanf met daardie spesiale vlag 626 00:43:21,360 --> 00:43:23,820 wat beteken, eerste wedstryd 'n heelgetal, 627 00:43:23,820 --> 00:43:26,770 dan pas enige karakters nadat heelgetal. 628 00:43:26,770 --> 00:43:29,070 So sien ons dit wil gelyk 1. 629 00:43:29,070 --> 00:43:32,940 So sscanf opbrengste Hoeveel vuurhoutjies indien dit suksesvol gemaak het? 630 00:43:32,940 --> 00:43:37,010 Dit sal terugkeer 1 as dit suksesvol ooreenstem n heelgetal is, 631 00:43:37,010 --> 00:43:40,890 dit sal terugkeer 0 as dit nie ooreenstem met 'n heelgetal, en dit sal terugkeer 2 632 00:43:40,890 --> 00:43:45,920 As dit ooreenstem met 'n heelgetal, gevolg deur 'n paar karakter. 633 00:43:45,920 --> 00:43:49,780 So sien ons weer probeer as ons ooreenstem met enigiets, maar 1. 634 00:43:49,780 --> 00:43:55,230 So as ons het 1, 2, 3, C, of ​​1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 daarna 1, 2, 3 sal gestoor kry in die getal, 636 00:43:57,400 --> 00:43:59,620 X sal gestoor kry op die karakter, 637 00:43:59,620 --> 00:44:06,410 sscanf sou terugkeer 2, en ons sal weer probeer, want ons wil net 'n heelgetal. 638 00:44:06,410 --> 00:44:09,810 >> Vinnig waai deur HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language is die struktuur en semantiek van die web. 640 00:44:15,340 --> 00:44:19,960 Hier is die voorbeeld van lesing waar ons HTML tags. 641 00:44:19,960 --> 00:44:22,110 Ons het kop tags, liggaam etikette, 642 00:44:22,110 --> 00:44:27,770 Ons het voorbeelde van leë tags waar ons nie eintlik 'n begin en naby tag, 643 00:44:27,770 --> 00:44:30,820 ons net skakel en beeld. 644 00:44:30,820 --> 00:44:38,480 Daar is geen sluitingsdatum beeld tag, daar is net 'n enkele tag dat alles wat die etiket moet doen accomplishes. 645 00:44:38,480 --> 00:44:41,950 Die skakel is 'n voorbeeld, ons sal sien hoe jy 'n skakel na CSS, 646 00:44:41,950 --> 00:44:45,910 die script is 'n voorbeeld van hoe jy 'n skakel na 'n eksterne JavaScript. 647 00:44:45,910 --> 00:44:53,100 Dit is redelik maklik, en onthou, HTML is nie 'n programmeertaal. 648 00:44:53,100 --> 00:44:58,250 Hier, onthou hoe jy 'n vorm te definieer of ten minste wat dit sou doen? 649 00:44:58,250 --> 00:45:01,740 So 'n vorm het 'n aksie en 'n metode. 650 00:45:01,740 --> 00:45:06,210 Die metodes wat jy net ooit sal sien is AOO en post. 651 00:45:06,210 --> 00:45:09,040 So is die weergawe waar die ding kry sit in die URL KRY. 652 00:45:09,040 --> 00:45:11,680 Pos is waar dit sit nie in die URL. 653 00:45:11,680 --> 00:45:18,520 In plaas daarvan, is 'n data van die vorm ingevoeg meer verborge in die HTTP-versoek. 654 00:45:18,520 --> 00:45:22,390 So hier, aksie definieer waar die HTTP versoek gaan. 655 00:45:22,390 --> 00:45:27,490 Waar dit gaan is google.com / soek. 656 00:45:27,490 --> 00:45:32,890 Metode. Onthou om die verskille tussen AOO en post, 657 00:45:32,890 --> 00:45:37,200 En net sê as 'n voorbeeld, as jy wil boekmerk iets. 658 00:45:37,200 --> 00:45:40,660 Jy sal nooit in staat wees om te boekmerk 'n NA URL 659 00:45:40,660 --> 00:45:44,970 omdat die data is nie ingesluit in die URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, nou, is HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Die HyperText Transfer Protocol, sou jy verwag dat dit oor te dra 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, en dit doen nie. 663 00:45:57,710 --> 00:46:00,170 Maar dit dra ook enige beelde wat jy kry op die web, 664 00:46:00,170 --> 00:46:05,400 enige afgelaai jy begin as 'n HTTP-versoek. 665 00:46:05,400 --> 00:46:10,350 So HTTP is net die taal van die World Wide Web. 666 00:46:10,350 --> 00:46:15,610 En hier moet jy hierdie soort van 'n HTTP-versoek te erken. 667 00:46:15,610 --> 00:46:19,300 Hier HTTP/1.1 aan die kant sê net dit is die weergawe 668 00:46:19,300 --> 00:46:21,570 van die protokol wat ek gebruik nie. 669 00:46:21,570 --> 00:46:25,770 Dit is pretty much altyd gaan HTTP/1.1 te wees, soos wat jy dit sal sien. 670 00:46:25,770 --> 00:46:30,110 Dan sien ons dat dit kry, hoe alternatiewe as post, dat jy kan sien. 671 00:46:30,110 --> 00:46:40,790 En die URL wat ek besig was om te besoek was www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 So onthou dat hierdie, die vraagteken q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 is die soort van dinge wat voorgelê word deur 'n vorm. 674 00:46:49,040 --> 00:46:51,830 Die reaksie dit kan terugkeer na my sou iets soos hierdie lyk. 675 00:46:51,830 --> 00:46:54,050 Weereens, wat begin met die protokol, wat gaan dit wees, 676 00:46:54,050 --> 00:46:59,190 gevolg deur die status kode. Hier is dit 200 OK. 677 00:46:59,190 --> 00:47:05,060 En laastens, die webblad wat ek eintlik gevra sal gevolg word. 678 00:47:05,060 --> 00:47:08,210 Die moontlike status kode wat jy kan sien, en jy 'n paar van hulle moet weet. 679 00:47:08,210 --> 00:47:12,770 200 OK jy het waarskynlik gesien het nie. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 nie gevind nie, 500 Interne server fout 681 00:47:17,830 --> 00:47:22,140 gewoonlik as jy gaan na 'n webwerf en iets is gebreek of hul PHP-kode ongelukke, 682 00:47:22,140 --> 00:47:24,930 terwyl dit in die toestel het ons dat die groot oranje vak 683 00:47:24,930 --> 00:47:27,830 wat kom en sê, soos, iets is verkeerd, beteken dit-kode nie werk nie 684 00:47:27,830 --> 00:47:30,380 of hierdie funksie se slegte. 685 00:47:30,380 --> 00:47:33,230 Gewoonlik webwerwe wil nie hê jy weet wat funksies is eintlik sleg, 686 00:47:33,230 --> 00:47:37,880 So in plaas hulle sal net gee jou 500 Interne server foute. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP is 1 laag onder HTTP. 688 00:47:43,050 --> 00:47:47,550 Onthou dat daar is Internet buite die World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Soos as jy 'n aanlyn-wedstryd wat nie deur HTTP speel, 690 00:47:52,270 --> 00:47:55,740 dit gaan deur 'n ander - dit is nog steeds met behulp van die Internet, 691 00:47:55,740 --> 00:47:58,900 maar dit beteken nie gebruik HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP is net een voorbeeld van protokol gebou op TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP beteken letterlik Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Elke rekenaar het 'n IP adres, hulle is die 4-syfer dinge 695 00:48:11,500 --> 00:48:16,510 soos 192.168.2.1, of wat ook al, wat geneig is om 'n plaaslike een. 696 00:48:16,510 --> 00:48:23,390 Maar dit is die patroon van 'n IP-adres. 697 00:48:23,390 --> 00:48:29,060 So het die DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 dit is wat dinge soos google.com vertaal na 'n werklike IP-adres. 699 00:48:33,410 --> 00:48:37,700 So as jy tik dat IP adres in 'n URL, 700 00:48:37,700 --> 00:48:40,850 wat jou sal bring jy na Google, maar jy is geneig om nie daardie dinge te onthou. 701 00:48:40,850 --> 00:48:45,470 Jy is geneig om te onthou google.com plaas. 702 00:48:45,470 --> 00:48:51,560 Die laaste ding wat ons het, is hawens, waar dit die TCP deel van IP. 703 00:48:51,560 --> 00:48:54,880 TCP doen meer. Dink oor, soos, jy het jou webblaaier hardloop. 704 00:48:54,880 --> 00:48:58,670 Miskien het jy 'n paar e-pos aansoek hardloop; 705 00:48:58,670 --> 00:49:02,150 Miskien het jy 'n ander program wat gebruik maak van die Internet bedryf. 706 00:49:02,150 --> 00:49:05,090 Hulle het almal toegang tot die Internet, 707 00:49:05,090 --> 00:49:08,100 maar jou rekenaar het net 1 WiFi-kaart of wat ook al. 708 00:49:08,100 --> 00:49:10,780 So hawens is die manier wat ons in staat is om te verdeel 709 00:49:10,780 --> 00:49:13,550 hoe hierdie programme in staat is om die Internet te gebruik. 710 00:49:13,550 --> 00:49:17,230 Elke aansoek kry 1 spesifieke hawe wat dit kan luister, 711 00:49:17,230 --> 00:49:19,670 en by verstek, HTTP poort 80 gebruik. 712 00:49:19,670 --> 00:49:22,410 Sommige e-pos dienste gebruik 25. 713 00:49:22,410 --> 00:49:24,490 Die lae-geteldes geneig om gereserveer word. 714 00:49:24,490 --> 00:49:29,270 Jy is gewoonlik in staat om hoër-geteldes vir jouself te kry. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Ons styl webblaaie met CSS, nie met HTML. 717 00:49:36,030 --> 00:49:38,440 Daar is 3 plekke wat jy kan jou CSS sit. 718 00:49:38,440 --> 00:49:46,300 Dit kan inline wees, tussen styl etikette, of in 'n heeltemal aparte lêer en dan gekoppel in 719 00:49:46,300 --> 00:49:48,470 En hier is net 'n voorbeeld van CSS. 720 00:49:48,470 --> 00:49:50,450 Jy moet hierdie patroon herken, 721 00:49:50,450 --> 00:49:54,310 waar die eerste voorbeeld is ons wat ooreenstem met die liggaam tag, 722 00:49:54,310 --> 00:49:56,680 En hier is ons sentrering die liggaam tag. 723 00:49:56,680 --> 00:50:00,420 Die tweede voorbeeld, is ons wat ooreenstem met die ding 724 00:50:00,420 --> 00:50:04,740 met ID voet, en ons is die toepassing van sommige style nie. 725 00:50:04,740 --> 00:50:07,310 Let daarop dat ID footer teks uitgelijnd die linkerkant, 726 00:50:07,310 --> 00:50:09,840 terwyl die liggaam teks uitgelijnd sentrum. 727 00:50:09,840 --> 00:50:13,180 Footer is binne-in die liggaam. 728 00:50:13,180 --> 00:50:16,470 Dit sal, in plaas, text-align verlaat, selfs al is die liggaam sê text-align sentrum. 729 00:50:16,470 --> 00:50:18,880 Dit is die hele waterval deel daarvan. 730 00:50:18,880 --> 00:50:22,110 Jy kan - jy kan spesifiseer style vir die liggaam, 731 00:50:22,110 --> 00:50:25,320 en dan dinge in die liggaam wat jy kan spesifiseer meer spesifieke style, 732 00:50:25,320 --> 00:50:28,160 en dinge werk soos jy verwag. 733 00:50:28,160 --> 00:50:34,420 Meer spesifieke CSS bestek voorrang geniet. 734 00:50:34,420 --> 00:50:46,140 Ek dink dit is dit. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hi almal. As ek maar net jou aandag kry. 736 00:50:49,260 --> 00:50:53,990 Ek is Ali en ek gaan om te gaan deur PHP en SQL baie vinnig. 737 00:50:53,990 --> 00:51:00,310 Sodat ons kan begin. PHP is kort vir PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 En as jy al behoort te weet, is dit 'n bediener-kant skripte taal, 739 00:51:03,730 --> 00:51:06,800 en ons gebruik dit vir die agterkant van die webtuistes, 740 00:51:06,800 --> 00:51:12,540 en hoe dit 'n baie van die berekeninge, die agter-skerms deel. 741 00:51:12,540 --> 00:51:17,510 Sintaksis. Dit is nie soos C, verrassing, verrassing. 742 00:51:17,510 --> 00:51:22,060 Dit was nog altyd om te begin met die, as jy kan sien, die - ek kan nie vorentoe te beweeg. 743 00:51:22,060 --> 00:51:31,340 Jy kan sien wat jy nodig het om die nuwe vorme van draadjies en dan moet jy ook die? PHP. 744 00:51:31,340 --> 00:51:35,780 Dit is altyd hoe jy jou PHP teks, jou PHP-kode te raam. 745 00:51:35,780 --> 00:51:39,180 So kan dit nie net soos C, waar jy soort van sit dit op die eerste. 746 00:51:39,180 --> 00:51:42,290 Jy moet altyd omring. 747 00:51:42,290 --> 00:51:47,610 En nou, die groot sintaksis is dat al die veranderlikes moet begin met die $ karakter. 748 00:51:47,610 --> 00:51:49,490 Jy moet dit te doen wanneer jy die definisie daarvan, jy moet dit te doen 749 00:51:49,490 --> 00:51:51,860 wanneer jy verwys na hulle later op. 750 00:51:51,860 --> 00:51:56,510 Jy moet altyd dat $. Dit is jou nuwe beste vriend, pretty much. 751 00:51:56,510 --> 00:52:01,690 Jy het nie - anders C, jy hoef nie te sit watter soort veranderlike tipe dit is. 752 00:52:01,690 --> 00:52:04,940 Dus, terwyl jy nodig het om die $, jy hoef nie te sit, soos, 753 00:52:04,940 --> 00:52:09,470 int x of y string, ensovoorts, ensovoorts. 754 00:52:09,470 --> 00:52:11,490 So 'n effense verskil. 755 00:52:11,490 --> 00:52:15,590 As gevolg van hierdie, beteken dit dat PHP is 'n swak tipe. 756 00:52:15,590 --> 00:52:19,310 PHP is 'n swak tipe taal, en dit het swak getik veranderlikes. 757 00:52:19,310 --> 00:52:24,020 Met ander woorde, dit beteken dat jy kan wissel tussen verskillende soorte veranderlike tipes. 758 00:52:24,020 --> 00:52:27,230 Jy kan jou nommer 1 stoor as 'n int, 759 00:52:27,230 --> 00:52:29,650 kan jy dit stoor as 'n string, en jy kan dit stoor as 'n vlot, 760 00:52:29,650 --> 00:52:33,550 en dit sal al wees wat nommer 1. 761 00:52:33,550 --> 00:52:36,080 Selfs al is jy om dit te stoor in verskillende vorme, 762 00:52:36,080 --> 00:52:39,120 dit is nog steeds - die veranderlike tipes is nog steeds vashou aan die einde. 763 00:52:39,120 --> 00:52:41,540 So as jy kyk hier, as jy onthou van pset 7, 764 00:52:41,540 --> 00:52:43,500 baie van julle het waarskynlik probleme met hierdie. 765 00:52:43,500 --> 00:52:47,280 Twee gelyke tekens, 3 gelyke tekens, 4 gelyke tekens. 766 00:52:47,280 --> 00:52:49,990 Goed, daar is geen tekens 4 gelyke, maar daar is 2 en 3. 767 00:52:49,990 --> 00:52:53,320 Jy gebruik 2 gelykaantekens die waardes na te gaan. 768 00:52:53,320 --> 00:52:55,830 Dit kan kyk oor tipes. 769 00:52:55,830 --> 00:52:58,770 So as jy kan sien by die eerste voorbeeld, 770 00:52:58,770 --> 00:53:02,210 Ek het num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 So jou int en jou string is beide tegnies, 1, 772 00:53:06,710 --> 00:53:10,790 maar hulle is verskillende tipes. Maar vir die dubbel gelykes, sal dit nog steeds gebeur. 773 00:53:10,790 --> 00:53:15,510 Maar vir die drie gelykes, dit kontroleer waarde sowel as die verskillende tipes. 774 00:53:15,510 --> 00:53:18,760 Dit beteken dat dit nie gaan om te slaag in die tweede geval is hier, 775 00:53:18,760 --> 00:53:22,350 waar jy met 3 gelyke tekens plaas. 776 00:53:22,350 --> 00:53:26,590 So dit is 'n groot verskil wat jy moet almal nou gewys. 777 00:53:26,590 --> 00:53:31,570 >> String aaneenskakellling is nog 'n kragtige ding wat jy kan gebruik in PHP. 778 00:53:31,570 --> 00:53:34,080 Dit is basies net hierdie handige dot-notasie, 779 00:53:34,080 --> 00:53:36,230 en dit is hoe jy kan saam bind snare. 780 00:53:36,230 --> 00:53:40,800 So as jy 'Kat en jy het Dog, en jy wil hê dat die 2 snare saam te stel, 781 00:53:40,800 --> 00:53:44,080 jy kan die tydperk te gebruik, en dit is soort van hoe dit werk. 782 00:53:44,080 --> 00:53:46,660 Jy kan ook net plaas hulle langs mekaar, 783 00:53:46,660 --> 00:53:49,030 as jy hier kan sien in die onderste byvoorbeeld 784 00:53:49,030 --> 00:53:51,610 waar ek eggo string 1, ruimte string 2. 785 00:53:51,610 --> 00:53:56,930 PHP sal weet om dit te vervang as sodanig. 786 00:53:56,930 --> 00:53:59,780 Skikkings. Nou, in PHP, is daar 2 verskillende vorme van skikkings. 787 00:53:59,780 --> 00:54:03,180 Jy kan gereelde skikkings, en jy kan ook assosiatiewe skikkings, 788 00:54:03,180 --> 00:54:06,040 en ons gaan om te gaan deur hulle op die oomblik. 789 00:54:06,040 --> 00:54:08,280 Gereelde skikkings is net dit in C, 790 00:54:08,280 --> 00:54:11,240 en so het jy indekse wat getel is. 791 00:54:11,240 --> 00:54:13,160 Op die oomblik het ons net gaan een te skep en sit - 792 00:54:13,160 --> 00:54:15,500 so dit is hoe ons 'n leë skikking, dan gaan ons 793 00:54:15,500 --> 00:54:17,310 sit in die indeks nommer 0. 794 00:54:17,310 --> 00:54:19,200 Ons gaan die nommer 6, die waarde 6 te sit. 795 00:54:19,200 --> 00:54:21,500 Jy kan dit sien aan die onderkant hier. 796 00:54:21,500 --> 00:54:24,240 Where's - ten indeks nommer 1 gaan ons waarde nommer 4 te sit, 797 00:54:24,240 --> 00:54:26,720 en sodat jy kan sien daar is 'n 6, is daar 'n 4, 798 00:54:26,720 --> 00:54:29,160 en dan as ons die druk van dinge, 799 00:54:29,160 --> 00:54:33,550 wanneer ons probeer en druk die waarde gestoor indeks nommer 0, 800 00:54:33,550 --> 00:54:36,900 dan sal ons die waarde sien 6 gedruk het. Cool? 801 00:54:36,900 --> 00:54:40,160 So dit is gereelde skikkings vir jou. 802 00:54:40,160 --> 00:54:42,750 Nog 'n manier waarop jy kan ook dinge voeg tot gereelde skikkings nou 803 00:54:42,750 --> 00:54:44,780 is jy kan net voeg hulle by die einde. 804 00:54:44,780 --> 00:54:47,240 Dit beteken dat jy nie die spesifieke indeks te bepaal. 805 00:54:47,240 --> 00:54:51,000 Jy kan sien nommer, en dan in die vierkantige hakies daar is geen indeks vermeld. 806 00:54:51,000 --> 00:54:56,270 En dit sal weet - PHP sal weet net voeg dit by die einde van die lys, die volgende vrye plek. 807 00:54:56,270 --> 00:54:59,190 Sodat jy kan sien die 1 reg daar op daardie 0 plek, 808 00:54:59,190 --> 00:55:02,690 die 2 het net daar op die eerste plek. 809 00:55:02,690 --> 00:55:04,690 Die 3 gaan - is daar ook bygevoeg. 810 00:55:04,690 --> 00:55:06,720 So maak dat die soort van sin. Jy is net voortdurend toe te voeg nie, 811 00:55:06,720 --> 00:55:09,360 en dan wanneer ons aansluit by die indeks van nommer 1, 812 00:55:09,360 --> 00:55:13,080 dit sal die druk van die waarde 2. 813 00:55:13,080 --> 00:55:16,800 >> Dan het ons skikkings wat assosiatiewe skikkings. 814 00:55:16,800 --> 00:55:19,370 Assosiatiewe skikkings, in plaas van om numeriese indekse, 815 00:55:19,370 --> 00:55:23,630 wat hulle doen is, hulle het indekse wat deur string. 816 00:55:23,630 --> 00:55:25,670 Jy kan sien, in plaas van - ek het ontslae te raak van al die aantal indekse, 817 00:55:25,670 --> 00:55:32,140 en nou is dit key1, key2, key3, en hulle is in dubbele aanhalingstekens om aan te dui dat hulle alle stringe. 818 00:55:32,140 --> 00:55:34,470 So kan ons 'n voorbeeld hiervan. 819 00:55:34,470 --> 00:55:38,790 Die voorbeeld van hierdie is dat ons die tf, en dit is die indeks se naam. 820 00:55:38,790 --> 00:55:42,030 Ons gaan sit "Ali" soos die naam, op die indeks, kalorieë geëet het, 821 00:55:42,030 --> 00:55:47,640 ons kan 'n int sit hierdie keer in plaas van 'n string, 822 00:55:47,640 --> 00:55:52,240 en dan na die indeks hou, kan ons 'n hele verskeidenheid sit binnekant van dit. 823 00:55:52,240 --> 00:55:55,490 So dit is soort van - dit is 'n soortgelyke konsep oor hoe ons moes 824 00:55:55,490 --> 00:55:58,930 indekse met getalle, maar nou kan ons die indekse om te verander 825 00:55:58,930 --> 00:56:03,890 hulle het as stringe plaas. 826 00:56:03,890 --> 00:56:06,070 Jy kan dit ook doen, behalwe net om dit te doen individueel, 827 00:56:06,070 --> 00:56:09,400 jy kan dit alles in een stuk. So kan jy sien dat tf van die skikking, 828 00:56:09,400 --> 00:56:13,350 en dan sit ons almal in 'n reuse-vierkante hakies stel. 829 00:56:13,350 --> 00:56:15,220 Sodat dinge kan bespoedig. 830 00:56:15,220 --> 00:56:19,730 Dit is meer van 'n stilistiese keuse as om nie. 831 00:56:19,730 --> 00:56:21,550 Ons het ook loops. 832 00:56:21,550 --> 00:56:26,020 In C ons het sirkelroetes soos hierdie werk. 833 00:56:26,020 --> 00:56:29,690 Ons het ons skikking, en ons het uit die indeks van 0 aan die einde van die lys, 834 00:56:29,690 --> 00:56:31,740 en ons druk dit alles, reg? 835 00:56:31,740 --> 00:56:33,880 Behalwe die probleem is, vir assosiatiewe skikkings, 836 00:56:33,880 --> 00:56:36,610 ons nie noodwendig nie geweet diegene numeriese indekse 837 00:56:36,610 --> 00:56:39,610 want nou het ons die string-indekse. 838 00:56:39,610 --> 00:56:44,800 Nou gebruik ons ​​foreach loops, wat weer, moet jy hopelik in pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach sirkelroetes sal weet net elke enkele deel van die lys. 840 00:56:48,930 --> 00:56:52,450 En dit is nie presies die numeriese indeks wat jy hoef te weet. 841 00:56:52,450 --> 00:56:56,490 So jy het die foreach sintaksis, so dit is foreach, jy sit die skikking. 842 00:56:56,490 --> 00:57:00,430 So my skikking genoem pset, en dan as die woord as, 843 00:57:00,430 --> 00:57:04,530 en dan kan jy hierdie tydelike plaaslike veranderlike wat jy gaan gebruik 844 00:57:04,530 --> 00:57:10,690 Net vir die spesifieke ding wat gaan die spesifieke te hou - 845 00:57:10,690 --> 00:57:14,770 een geval of 'n deel van die skikking. 846 00:57:14,770 --> 00:57:18,350 Pset num sal hou 1, en dan miskien sal dit die nommer 6 hou, 847 00:57:18,350 --> 00:57:20,410 en dan sal dit die nommer 2 hou. 848 00:57:20,410 --> 00:57:26,630 Maar dit is gewaarborg om te gaan deur middel van elke enkele waarde wat in die skikking. 849 00:57:26,630 --> 00:57:30,530 Nuttige funksies wat jy moet weet in PHP is die vereistes, 850 00:57:30,530 --> 00:57:35,880 so wat maak seker dat jy insluitende sekere lêers, eggo, afrit, leeg. 851 00:57:35,880 --> 00:57:40,490 Ek raai jy kyk na pset 7 en kyk na die funksies. 852 00:57:40,490 --> 00:57:42,810 Jy mag hê diegene te leer ken, 853 00:57:42,810 --> 00:57:47,060 so ek sal beslis weet wat, presies, dit is al doen. 854 00:57:47,060 --> 00:57:50,080 >> En nou is ons gaan om te gaan deur middel van omvang regtig vinnig. 855 00:57:50,080 --> 00:57:53,490 In omvang, PHP is 'n soort van 'n funky ding, in teenstelling met C, 856 00:57:53,490 --> 00:57:56,170 en so het ons net gaan om te gaan deur dit vinnig. 857 00:57:56,170 --> 00:57:58,930 So kom ons sê ons begin by daardie pyl dat ons daar. 858 00:57:58,930 --> 00:58:02,900 En ons gaan om te begin met $ i. So het die veranderlike 'i' gaan wees 0, 859 00:58:02,900 --> 00:58:06,730 en ons is net gaan om te hou om dit te druk in die groot wit blok daar. 860 00:58:06,730 --> 00:58:09,220 Ons gaan om te begin met I0, en dan moet ons gaan om dit te eggo. 861 00:58:09,220 --> 00:58:12,670 So is daar die 0. 862 00:58:12,670 --> 00:58:15,210 En dan gaan ons dit te inkrementeer deur die lus, 863 00:58:15,210 --> 00:58:17,810 en dan gaan dit waarde van 1 te wees. 864 00:58:17,810 --> 00:58:20,070 Een daarvan is minder as 3, so dit gaan deur wat vir lus, 865 00:58:20,070 --> 00:58:23,230 en dan gaan ons sien dit weer gedruk. 866 00:58:23,230 --> 00:58:25,520 Ons gaan dit te inkrementeer weer tot 2, 867 00:58:25,520 --> 00:58:29,860 en 2 is minder as 3, so dit sal slaag om die lus vir, en dit sal druk die 2. 868 00:58:29,860 --> 00:58:35,100 Dan sal jy daarop let dat 3 is nie minder nie as 3, so ons sal weg te breek van die for-lus. 869 00:58:35,100 --> 00:58:40,050 So nou het ons opgewonde, en dan gaan ons om te gaan in aFunction. 870 00:58:40,050 --> 00:58:45,010 Goed. So jy het om daarop te let dat hierdie veranderlike wat ons gemaak het, 871 00:58:45,010 --> 00:58:48,270 'i 'n veranderlike, is nie plaaslik scoped. 872 00:58:48,270 --> 00:58:50,280 Dit beteken dat dit nie die plaaslike aan die lus, 873 00:58:50,280 --> 00:58:58,060 en dat veranderlike ons kan nog steeds toegang tot en verander daarna, en dit sal nog steeds van krag wees. 874 00:58:58,060 --> 00:59:02,160 So as jy gaan in die funksie nou, sal jy sien dat ons ook gebruik om die 'i 'n veranderlike, 875 00:59:02,160 --> 00:59:05,320 en ons gaan inkrementeer 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Jy sou dink, op die eerste, gebaseer op C, dat dit is 'n afskrif van die 'i 'n veranderlike. 877 00:59:09,410 --> 00:59:12,830 Dit is 'n heeltemal ander ding, wat korrek is. 878 00:59:12,830 --> 00:59:16,560 So wanneer ons dit druk, gaan ons druk 'i' + +, wat gaan om uit te druk wat 4, 879 00:59:16,560 --> 00:59:19,640 en dan gaan ons - jammer. 880 00:59:19,640 --> 00:59:22,030 Daarna het ons gaan aan die einde van daardie funksie, 881 00:59:22,030 --> 00:59:24,820 en ons gaan wees waar die pyl is nou. 882 00:59:24,820 --> 00:59:29,190 Dit beteken dat dan egter, selfs al is die funksie verander die waarde van 'i', 883 00:59:29,190 --> 00:59:32,620 dit het nie buite die funksie verander, 884 00:59:32,620 --> 00:59:35,060 omdat die funksie het 'n aparte ruimte. 885 00:59:35,060 --> 00:59:38,960 Dit beteken dat wanneer ons eggo 'i', dit het nie verander in die omvang van die funksie, 886 00:59:38,960 --> 00:59:43,660 en so dan gaan ons te druk 3. 887 00:59:43,660 --> 00:59:47,520 Verskillende dinge oor omvang in PHP as in C. 888 00:59:47,520 --> 00:59:51,130 >> Nou in PHP en HTML. 889 00:59:51,130 --> 00:59:53,510 PHP gebruik webblaaie dinamiese te maak. 890 00:59:53,510 --> 00:59:58,660 Dit maak soort van dinge anders. 891 00:59:58,660 --> 01:00:02,090 Ons het dit verskil van HTML. 892 01:00:02,090 --> 01:00:05,230 Met HTML, het ons altyd net dieselfde statiese ding, soos hoe Rob het, 893 01:00:05,230 --> 01:00:09,370 terwyl PHP, kan jy dinge verander gebaseer op wat die gebruiker is. 894 01:00:09,370 --> 01:00:11,830 So as ek hierdie, ek het, "Jy is aangeteken as -" en dan die naam, 895 01:00:11,830 --> 01:00:14,420 en ek kan die naam verander. So nou die naam is Joseph, 896 01:00:14,420 --> 01:00:18,880 en dit het die "oor my", maar dan kan ek ook die naam verander Tommy het. 897 01:00:18,880 --> 01:00:21,700 En dit sou 'n ander ding. 898 01:00:21,700 --> 01:00:23,840 So dan kan ons ook verskillende dinge oor hom verander, 899 01:00:23,840 --> 01:00:27,070 en dit sal 'n ander inhoud te wys wat gebaseer is op die naam. 900 01:00:27,070 --> 01:00:31,430 So PHP kan soort van verandering wat gaan aan in jou webblad. 901 01:00:31,430 --> 01:00:33,540 Dieselfde hier. Tog, daarop dat hulle het verskillende inhoud, 902 01:00:33,540 --> 01:00:38,870 selfs al is jy tegnies steeds toegang tot daardie selfde web bladsy op die oppervlak. 903 01:00:38,870 --> 01:00:43,450 Genereer HTML. Daar is 2 verskillende maniere waarop jy dit kan doen. 904 01:00:43,450 --> 01:00:48,980 So ons gaan nou deur middel van daardie reg. Die eerste manier is, moet jy - ja, jammer. 905 01:00:48,980 --> 01:00:51,150 So jy moet net jou gereelde lus in PHP, 906 01:00:51,150 --> 01:00:56,270 en dan moet jy eggo in PHP en jy eggo uit HTML. 907 01:00:56,270 --> 01:00:58,720 Gebruik wat Rob het jy van HTML script 908 01:00:58,720 --> 01:01:04,030 en dan met behulp van die PHP druk net druk dit uit na die webblad. 909 01:01:04,030 --> 01:01:09,520 Die alternatiewe manier is om dit te doen asof jy skei die PHP en HTML. 910 01:01:09,520 --> 01:01:11,940 So kan jy 'n lyn van PHP dat die lus begin het, 911 01:01:11,940 --> 01:01:16,020 dan kan jy die lyn van die HTML het in 'n aparte ding, 912 01:01:16,020 --> 01:01:19,700 en dan kan jy die einde van die lus, weer, met 'n PHP. 913 01:01:19,700 --> 01:01:21,800 So dit is soort van die skeiding van dit uit. 914 01:01:21,800 --> 01:01:24,020 Aan die linkerkant, kan jy dat jy al die - 915 01:01:24,020 --> 01:01:26,360 dit is net 1 stuk van PHP. 916 01:01:26,360 --> 01:01:28,510 Aan die regterkant kan jy sien dat jy 'n lyn van PHP, 917 01:01:28,510 --> 01:01:32,540 jy het 'n lyn van HTML, en jy het 'n lyn van PHP weer. 918 01:01:32,540 --> 01:01:36,870 So skei dit uit in wat hulle doen. 919 01:01:36,870 --> 01:01:39,330 En jy sal daarop let dat een manier, vir een van hulle, 920 01:01:39,330 --> 01:01:41,980 hulle nog steeds die druk van die beeld, die beeld, die beeld, 921 01:01:41,980 --> 01:01:44,540 sodat HTML nog gedruk word op dieselfde manier. 922 01:01:44,540 --> 01:01:49,870 En dan sal jy sien nog steeds die 3 beelde vertoon op jou webwerf. 923 01:01:49,870 --> 01:01:52,820 So dit is 2 verskillende maniere om dieselfde ding. 924 01:01:52,820 --> 01:01:55,060 >> Nou het ons vorms en versoeke. As Rob het jy, 925 01:01:55,060 --> 01:01:59,400 daar is vorms van HTML, en ons sal net briesie deur hierdie. 926 01:01:59,400 --> 01:02:02,040 Jy het 'n aksie en jy het 'n metode, en jou optrede 927 01:02:02,040 --> 01:02:04,350 soort wys jou waar jy gaan om dit te stuur, en die metode is of 928 01:02:04,350 --> 01:02:06,960 dit gaan 'n AOO-of 'n pos te wees. 929 01:02:06,960 --> 01:02:11,220 En 'n GET-versoek, soos Rob sê, beteken dat jy gaan om dit te sit in 'n vorm 930 01:02:11,220 --> 01:02:15,760 en jy sal sien dit as 'n URL, terwyl die POST versoek sal jy nie in 'n URL te sien. 931 01:02:15,760 --> 01:02:17,840 So 'n effense verskil. 932 01:02:17,840 --> 01:02:19,950 Maar een ding wat 'n soortgelyke ding 933 01:02:19,950 --> 01:02:22,560 is dat NA en kry ewe onseker. 934 01:02:22,560 --> 01:02:26,430 So jy mag dalk dink dat net omdat jy sien dit nie in die URL, 935 01:02:26,430 --> 01:02:28,790 wat beteken dat die pos is meer veilig, 936 01:02:28,790 --> 01:02:34,420 maar jy kan nog steeds sien dit in jou koekies in die inligting wat jy stuur. 937 01:02:34,420 --> 01:02:38,260 So moenie dink dat omtrent die een of die ander. 938 01:02:38,260 --> 01:02:42,160 Nog 'n ding om daarop te let is dat jy ook artikel veranderlikes. 939 01:02:42,160 --> 01:02:45,850 Julle gebruik dit in pset 7 jou gebruiker-ID inligting te kry. 940 01:02:45,850 --> 01:02:48,550 Wat gebeur het, was dat jy kan hierdie assosiatiewe skikking te gebruik, 941 01:02:48,550 --> 01:02:53,310 die $ _SESSION, en dan is jy in staat om verskillende dinge om toegang te verkry 942 01:02:53,310 --> 01:02:57,720 en stoor verskillende dinge oor die bladsye. 943 01:02:57,720 --> 01:03:00,750 >> Laaste ding is dat ons SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 en dit is 'n programmeertaal databasisse te bestuur. 945 01:03:04,360 --> 01:03:08,220 Wat, presies, is databasisse? Hulle is versamelings van tafels, 946 01:03:08,220 --> 01:03:10,630 en elke tafel kan hê soortgelyke vorme van voorwerpe. 947 01:03:10,630 --> 01:03:14,990 So het ons 'n tafel van die gebruikers in jou finansies pset. 948 01:03:14,990 --> 01:03:20,610 En hoekom is hulle nuttig? Want dit is 'n manier om permanent te stoor inligting. 949 01:03:20,610 --> 01:03:22,840 Dit is 'n manier om die dop dinge en bestuur van dinge 950 01:03:22,840 --> 01:03:25,890 en eintlik sien dit op verskillende bladsye en die dop. 951 01:03:25,890 --> 01:03:29,930 Terwyl as jy net stoor dit op daardie een onmiddellike oomblik 952 01:03:29,930 --> 01:03:33,720 en dan gebruik dit later, sal jy nie in staat wees om enigiets wat jy gered om toegang te verkry. 953 01:03:33,720 --> 01:03:37,660 Ons het 4 groot dinge wat ons gebruik vir SQL opdragte. 954 01:03:37,660 --> 01:03:40,190 Ons het kies, voeg, te verwyder, en te werk. 955 01:03:40,190 --> 01:03:42,880 Dit is uiters belangrik dat jy die ouens om te weet vir jou toets. 956 01:03:42,880 --> 01:03:45,990 >> Ons sal vinnig gaan oor kies nou. 957 01:03:45,990 --> 01:03:48,540 Basies, jy kies rye uit 'n databasis. 958 01:03:48,540 --> 01:03:52,400 So as jy het, reg hier - 959 01:03:52,400 --> 01:03:56,740 ons het hierdie 2 verskillende dinge, en ons wil om te kies uit die klasse tafel 960 01:03:56,740 --> 01:04:01,480 waar ontsagwekkende - waar in die ontsagwekkende kolom die waarde is 1. 961 01:04:01,480 --> 01:04:04,460 So jy hier kan sien, ons het hierdie 2 dinge van die klas se naam, 962 01:04:04,460 --> 01:04:08,490 CS50 en Stat110, en ons het die klas-ID's en die slagspreuk. 963 01:04:08,490 --> 01:04:13,150 So wil ons almal van daardie inligting te kies. 964 01:04:13,150 --> 01:04:17,480 Dan kan jy sien hier dat dit is soort van die pluk uit wat awesome kolom 965 01:04:17,480 --> 01:04:25,170 waar al die dinge is 1, en dan is dit die klas ID, klas se naam en slagspreuk dat dit kan kies uit. 966 01:04:25,170 --> 01:04:28,100 Hoe presies doen jy dit in die kode? U het PHP te gebruik. 967 01:04:28,100 --> 01:04:33,830 So dit is soort van hoe PHP en SQL is verwant aan mekaar. 968 01:04:33,830 --> 01:04:38,130 Nou het ons ons kode, en ons gaan ons navraag funksie te gebruik 969 01:04:38,130 --> 01:04:41,370 soos ons gedoen het in pset 7, en ons gaan die SQL navraag uit te voer. 970 01:04:41,370 --> 01:04:43,870 Daarna het ons gaan hê - 971 01:04:43,870 --> 01:04:46,280 ons het altyd om te kyk of ry se driedubbele gelyk is as onwaar. 972 01:04:46,280 --> 01:04:49,010 So weer, wil jy die tipe en die waarde om te kyk, 973 01:04:49,010 --> 01:04:53,880 en dan as dit nie werk nie, dan is jy wil om verskoning vra, soos gewoonlik, soos ons gedoen het in pset 7. 974 01:04:53,880 --> 01:04:55,870 Anders, wat jy wil om te loop deur alles met dié handige 975 01:04:55,870 --> 01:04:59,410 foreach sirkelroetes ons net gaan oor. 976 01:04:59,410 --> 01:05:01,280 Nou dat ons deur middel van herhaling en het ons dit verlede 977 01:05:01,280 --> 01:05:05,080 Kom ons veronderstel dat ons navraag geslaag het, nou het ons ons foreach lus. 978 01:05:05,080 --> 01:05:11,050 En die eerste ry dit het, so hier is die ry, reg hier, dit is doos. 979 01:05:11,050 --> 01:05:14,010 Dit gaan om uit te druk al die inligting wat dit gekry het. 980 01:05:14,010 --> 01:05:18,070 So dit gaan om uit te druk op die onderste "Wil jy leer HTML?" 981 01:05:18,070 --> 01:05:23,370 Dan is dit gaan om te gaan na die volgende ry, want dit is voltooi die eerste lus, 982 01:05:23,370 --> 01:05:26,510 en so dan gaan dit om uit te druk van die tweede lyn van dit, 983 01:05:26,510 --> 01:05:32,120 wat gaan wees STAT110, Vind al die oomblikke. 984 01:05:32,120 --> 01:05:34,290 >> Een laaste ding is op SQL probleme. 985 01:05:34,290 --> 01:05:37,300 Ek weet David aangeraak dit 'n bietjie in lesing. 986 01:05:37,300 --> 01:05:40,730 Jy kan dit later lees. Dit is regtig snaaks. 987 01:05:40,730 --> 01:05:45,320 SQL-inspuiting is 'n soort van moeilike ding. 988 01:05:45,320 --> 01:05:49,890 Kom ons sê dat jy net vashou daardie veranderlikes reg in jou navraag, 989 01:05:49,890 --> 01:05:52,290 soos jy kan sien in die eerste lyn. 990 01:05:52,290 --> 01:05:54,520 So lyk dit goed, reg? Jy is net om in die gebruiker se naam 991 01:05:54,520 --> 01:05:58,820 en wagwoord vir jou SQL navraag, en jy wil om dit te stuur af en kry alles wat in jou data tafel. 992 01:05:58,820 --> 01:06:01,450 Dit lyk redelik eenvoudig. So kan sê iemand sit in, 993 01:06:01,450 --> 01:06:04,910 vir die wagwoord, hierdie of teks reg hier - 994 01:06:04,910 --> 01:06:06,780 eintlik moet wees in die rooi boks. 995 01:06:06,780 --> 01:06:11,920 So kom ons sê dat hulle die wagwoord in - dit is wat hulle betree. 996 01:06:11,920 --> 01:06:16,520 So hulle is om OF "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Soort van 'n dom wagwoord te hê. 998 01:06:20,880 --> 01:06:25,070 Nou laat vervang net dit in, en jy sal daarop let dat in die SQL navraag nou, 999 01:06:25,070 --> 01:06:29,090 dit evalueer wat altyd waar nie, want jy sal daarop let dat 1000 01:06:29,090 --> 01:06:32,240 jy kan SQL navraag kies al van hierdie inligting 1001 01:06:32,240 --> 01:06:35,420 of jy kan net 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 So dit is altyd iets om te evalueer waar. 1003 01:06:41,030 --> 01:06:46,610 Dit gaan nie regtig werk nie, want dit beteken dat die hacker kan breek in jou stelsel. 1004 01:06:46,610 --> 01:06:49,300 Die oplossing hiervoor is dat jy die BOB stelsel te gebruik, 1005 01:06:49,300 --> 01:06:51,360 wat beteken dat jy 'n vraagteken te gebruik, 1006 01:06:51,360 --> 01:06:53,350 en dit is wat julle ouens gebruik in pset 7, 1007 01:06:53,350 --> 01:06:57,620 waar jy gaan 'n vraagteken te gebruik in die plek van waar jy wil iets om te sit, 1008 01:06:57,620 --> 01:07:01,430 en dan gaan jy 'n komma te hê, en dan sal jy daarna het, 1009 01:07:01,430 --> 01:07:07,610 na jou string, die verskillende veranderlikes wat jy wil om te vervang in jou vraagteken. 1010 01:07:07,610 --> 01:07:10,330 So sal jy daarop te let dat nou het ek hierdie rooi vraagtekens. 1011 01:07:10,330 --> 01:07:15,420 Dan sit ek die veranderlikes na my snare so ek weet om hulle te vervang in daardie volgorde daarna. 1012 01:07:15,420 --> 01:07:18,470 Dit sal seker maak dat as iemand dit doen soos hierdie, 1013 01:07:18,470 --> 01:07:24,050 en hulle het die of 1 = 1 situasie, wat seker sal maak, 1014 01:07:24,050 --> 01:07:30,490 in die agterkant, maak seker dat dit nie eintlik breek die SQL navraag. 1015 01:07:30,490 --> 01:07:33,660 Goed, so dit is pretty much dit, 'n storm van PHP en SQL. 1016 01:07:33,660 --> 01:07:41,520 Beste van geluk aan julle almal, en nou Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Goed almal. Tyd om te gaan 'n paar JavaScript 1018 01:07:44,270 --> 01:07:48,840 en 'n paar ander dinge baie vinnig so ons hou jou nie vanaand. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ja. JavaScript is 'n soort van 'n koel ding, na bewering. 1020 01:07:56,930 --> 01:07:59,090 Die dinge wat jy regtig nodig het om te weet oor JavaScript, dit is soort van soos 1021 01:07:59,090 --> 01:08:03,810 die kliënt-kant einde van wat jou web app gaan om te doen. 1022 01:08:03,810 --> 01:08:08,280 Daar is 'n paar dinge wat jy wil net nie te sorg van al die tyd op die bediener kant. 1023 01:08:08,280 --> 01:08:12,880 Al die klein interaksies, beklemtoon een ding, maak iets verdwyn. 1024 01:08:12,880 --> 01:08:15,340 Jy wil regtig nie hê om te praat met jou bediener al die tyd vir daardie. 1025 01:08:15,340 --> 01:08:18,069 En sommige van dit is nie eens moontlik te doen om op die bediener kant. 1026 01:08:18,069 --> 01:08:21,899 Dit is hoekom ons iets soos JavaScript nodig. 1027 01:08:21,899 --> 01:08:24,359 Koel dinge oor JavaScript: Dit is dinamies getik. 1028 01:08:24,359 --> 01:08:27,149 Wat dit beteken, is dat jou program nie nodig om te weet 1029 01:08:27,149 --> 01:08:30,970 wat, presies, die veranderlikes is wanneer jy dit uitskryf. 1030 01:08:30,970 --> 01:08:34,510 Dit sal net soort van figuur dit uit as dit loop. 1031 01:08:34,510 --> 01:08:37,520 Ander dinge wat koel oor dit: Dit is 'n krullerige stut taal, 1032 01:08:37,520 --> 01:08:41,359 wat beteken dat die sintaksis is soortgelyk aan C en PHP. 1033 01:08:41,359 --> 01:08:47,050 Jy hoef nie veel herwerken te doen wanneer jy leer JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Hier het ons 'n bietjie van JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Interessante ding hier is dat, as jy kyk na dit, 1036 01:08:52,560 --> 01:08:56,330 ons het 'n bietjie van JavaScript net daar in die kop tag. 1037 01:08:56,330 --> 01:08:59,479 Wat is nie is basies net sluit in 'n JavaScript-lêer. 1038 01:08:59,479 --> 01:09:02,260 Dit is een manier kan jy JavaScript sluit in jou program. 1039 01:09:02,260 --> 01:09:06,910 Dan die tweede bietjie is eintlik 'n paar inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 baie soortgelyk aan 'n geïntegreerde styl met CSS, 1041 01:09:10,790 --> 01:09:16,180 en jy net die skryf van sommige kode baie vinnig daar. 1042 01:09:16,180 --> 01:09:18,120 JavaScript het skikkings. 1043 01:09:18,120 --> 01:09:20,850 Net nog 'n manier om data te rond hou, baie nuttig. 1044 01:09:20,850 --> 01:09:25,180 Baie mooi en maklik sintaksis. 1045 01:09:25,180 --> 01:09:29,870 Jy gebruik vierkantige hakies alles om toegang te verkry en hou alles saam. 1046 01:09:29,870 --> 01:09:35,020 Niks is te kompleks. 1047 01:09:35,020 --> 01:09:38,630 Die cool ding oor JavaScript en script tale in die algemeen 1048 01:09:38,630 --> 01:09:40,920 is dat jy nie hoef te bekommer oor die verskeidenheid groottes. 1049 01:09:40,920 --> 01:09:43,880 Jy kan net gebruik array.length en hou van dit, 1050 01:09:43,880 --> 01:09:46,960 en ook die skikking kan groei of krimp as wat jy nodig het om dit te. 1051 01:09:46,960 --> 01:09:49,279 So jy hoef nie eens te bekommer oor enige soort, 1052 01:09:49,279 --> 01:09:57,050 O nee, ek moet meer dinge, of iets soos dit toe te ken. 1053 01:09:57,050 --> 01:10:00,090 >> Die cool ding hier is dat JavaScript het iets genoem voorwerpe. 1054 01:10:00,090 --> 01:10:04,800 Dit is 'n objekgeoriënteerde taal, so wat dit is, in wese, 1055 01:10:04,800 --> 01:10:10,100 'n manier vir jou om te groep data saam, ietwat soortgelyk aan 'n struct, 1056 01:10:10,100 --> 01:10:17,280 maar jy kan dit toegang soos 'n struct of in 'n assosiatiewe skikking sintaksis. 1057 01:10:17,280 --> 01:10:22,520 Dit is eenvoudig en wat jy kan doen met dit is die groep data saam 1058 01:10:22,520 --> 01:10:24,810 As jy 'n klomp van die data wat is verwant. 1059 01:10:24,810 --> 01:10:26,850 Want dit is al die dinge wat jy nodig het om 'n motor te beskryf, 1060 01:10:26,850 --> 01:10:29,050 jy hoef nie om dit te hê in 'n klomp verskillende plekke. 1061 01:10:29,050 --> 01:10:35,300 Jy kan net plak dit in 1 voorwerp in JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Soos u waarskynlik weet, iterating is een van daardie vervelige take. 1063 01:10:39,090 --> 01:10:43,810 Jy doen dit net meer as 'n weer. Jy moet praat met elke voorwerp in die motor, 1064 01:10:43,810 --> 01:10:47,340 of jy moet gaan deur elke item in 'n lys of iets soos dit. 1065 01:10:47,340 --> 01:10:51,770 So het JavaScript, soortgelyk aan PHP, 'n foreach sintaksis. 1066 01:10:51,770 --> 01:10:54,590 In hierdie geval, dit is 'n in-lus. 1067 01:10:54,590 --> 01:10:57,300 Jy wil om dit te gebruik net op voorwerpe. 1068 01:10:57,300 --> 01:11:01,030 Daar is 'n paar probleme wat optree as jy dit op skikkings. 1069 01:11:01,030 --> 01:11:03,750 Dit is oor die algemeen een van daardie dinge, al is, dit is baie handig, 1070 01:11:03,750 --> 01:11:06,590 omdat jy skakel 'n baie van oorhoofse 1071 01:11:06,590 --> 01:11:10,270 omdat jy nie hoef te trek om alles in jou voorwerp deur jouself. 1072 01:11:10,270 --> 01:11:12,300 Jy hoef nie al die sleutel name te onthou. 1073 01:11:12,300 --> 01:11:18,270 Jy het net soort van kry hulle terug in hierdie sintaksis. 1074 01:11:18,270 --> 01:11:21,500 In hierdie, met vir, jy wil net om te onthou 1075 01:11:21,500 --> 01:11:27,180 dat jy terug kry al die sleutels, in 'n baie soortgelyke wyse tafel hash. 1076 01:11:27,180 --> 01:11:30,880 As jy onthou dat, wanneer jy wil sit in 'n string kan jy iets uit te kry 1077 01:11:30,880 --> 01:11:33,840 wat wil hê dat 'n verband waarde met dit. 1078 01:11:33,840 --> 01:11:36,360 Wat jy kan doen met dit wat jy kan sê, alles reg, 1079 01:11:36,360 --> 01:11:42,120 Ek sit in 'n motor, en ek het dit 'n Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Sodat jy kan later in die string Ferrari sit weer, en jy kan uit te kry nie. 1081 01:11:45,290 --> 01:11:50,000 En jy kan dit doen in 'n lus met die in-lus. 1082 01:11:50,000 --> 01:11:53,320 So net meer oor voorwerpe. Die belangrikste ding van dit wat jy nodig het om te onthou 1083 01:11:53,320 --> 01:12:00,340 is dat jy kan die voorwerp struct gebruik soos sintaksis wanneer jy wil met hierdie, 1084 01:12:00,340 --> 01:12:04,590 behalwe as wat jou gaan gebruik as 'n string is nie 'n geldige veranderlike naam. 1085 01:12:04,590 --> 01:12:07,650 So as jy kyk na wat daar, ons het die sleutel met spasies. 1086 01:12:07,650 --> 01:12:12,500 Wel, as jy object.key te sit, ruimte, met, ruimte, ruimte, 1087 01:12:12,500 --> 01:12:15,320 wat sou net nie sin sintakties maak. 1088 01:12:15,320 --> 01:12:22,730 Sodat jy kan net doen wat met hierdie soort van bracket sintaksis. 1089 01:12:22,730 --> 01:12:26,520 >> Ook JavaScript is baie omvang-wyse te PHP. 1090 01:12:26,520 --> 01:12:29,050 Jy het 2 maniere om die omvang. 1091 01:12:29,050 --> 01:12:31,960 Jy kan nie die var in die voorkant van 'n veranderlike, 1092 01:12:31,960 --> 01:12:34,060 en dit beteken net dit is globale. 1093 01:12:34,060 --> 01:12:37,050 Jy kan dit sien vanaf enige plek. Selfs as jy dit in 'n if-stelling te sit, 1094 01:12:37,050 --> 01:12:42,430 nêrens anders in jou kode na daardie punt wat jy kan sien dat veranderlike. 1095 01:12:42,430 --> 01:12:46,730 Nog 'n ding, al is, is saam met die bul, dit is beperk tot net die funksie wat jy in 1096 01:12:46,730 --> 01:12:48,870 As jy nie in 'n funksie, wel, dit is globale. 1097 01:12:48,870 --> 01:12:53,900 Maar as jy in 'n funksie is dit net binne daardie funksie sigbaar. 1098 01:12:53,900 --> 01:12:56,420 Ek het nie 'n voorbeeld nie, maar, ja. Dit is een van daardie dinge waar 1099 01:12:56,420 --> 01:12:59,900 jy kan beheer wat veranderlikes wat jy wil globale wees, 1100 01:12:59,900 --> 01:13:03,810 wat veranderlikes wat jy wil plaaslike wees nie, maar jy moet versigtig wees oor hierdie, 1101 01:13:03,810 --> 01:13:06,890 omdat jy nie die tipe van fyn graan beheer wat jy doen in C, 1102 01:13:06,890 --> 01:13:15,820 waar as iets in 'n verklaarde vir lus, gaan dit in daardie om te bly vir lus. 1103 01:13:15,820 --> 01:13:18,790 Die ding wat ons eintlik omgee oor die gebruik van JavaScript vir manipuleer web bladsye, reg? 1104 01:13:18,790 --> 01:13:21,800 Ek bedoel, dit is hoekom ons hierdie doen. 1105 01:13:21,800 --> 01:13:23,840 >> Om dit te doen, ons gebruik iets genoem die DOM. 1106 01:13:23,840 --> 01:13:25,850 Die Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Basies, wat dit doen, is dit neem al jou HTML 1108 01:13:29,430 --> 01:13:34,110 en modelle dit uit in 'n klomp van die voorwerpe wat nes binne mekaar. 1109 01:13:34,110 --> 01:13:37,080 Jy begin met iets soos hierdie. 1110 01:13:37,080 --> 01:13:44,770 Jy het aan die regterkant vir my 'n klomp van die kode daar buite wat is soort van - 1111 01:13:44,770 --> 01:13:46,640 Jy sou dink dat sou baie moeilik om te manipuleer wees, 1112 01:13:46,640 --> 01:13:48,700 omdat jy die ontleding van word deur 'n klomp van die teks 1113 01:13:48,700 --> 01:13:52,080 en met dinge uitmekaar te stuk. En wat as dit is nie korrek geformateer? 1114 01:13:52,080 --> 01:13:54,880 Slegte dinge sal gebeur. 1115 01:13:54,880 --> 01:13:58,140 So JavaScript sorg van hierdie vir jou, en jy kry 'n mooi data struktuur, 1116 01:13:58,140 --> 01:14:01,390 soos die een op my gelaat, waar jy net 'n dokument, 1117 01:14:01,390 --> 01:14:03,530 en binne-in dat jy iets genoem HTML, 1118 01:14:03,530 --> 01:14:05,600 en binne-in dat jy het 'n kop en 'n liggaam, 1119 01:14:05,600 --> 01:14:08,420 en binne daardie hoof het jy 'n titel, ensovoorts, ensovoorts, ensovoorts. 1120 01:14:08,420 --> 01:14:11,810 Dit vereenvoudig manipuleer 'n webblad sodat dit is net, 1121 01:14:11,810 --> 01:14:14,190 O ja, ek wil net om te praat met hierdie voorwerp. 1122 01:14:14,190 --> 01:14:21,340 Soort van 'n baie soortgelyke manier waarop jy wil praat met 'n ander voorwerp jy self gemaak het. 1123 01:14:21,340 --> 01:14:25,980 Soos ek gesê het, het al die DOM is in die dokument voorwerp. 1124 01:14:25,980 --> 01:14:29,290 Óf dit is net een plek en dan kan jy gaan daarin om dinge te vind, 1125 01:14:29,290 --> 01:14:33,880 en jy kan dit doen - dit is die ou styl om dit te doen, daar, 1126 01:14:33,880 --> 01:14:38,130 waar jy document.getElementById, en dan die naam, 1127 01:14:38,130 --> 01:14:42,420 en as jy waarskynlik kan sê, dit raak baie lomp na 'n ruk. 1128 01:14:42,420 --> 01:14:44,480 So het jy waarskynlik nie wil hê om dit te doen. Dit is hoekom ons 'n 1129 01:14:44,480 --> 01:14:48,760 die volgende ding wat ons gaan om te praat oor na hierdie. 1130 01:14:48,760 --> 01:14:52,510 Die belangrikste ding hier is dat, alles reg, jy het al hierdie elemente, reg? 1131 01:14:52,510 --> 01:14:56,400 So miskien kan ek die kleur van iets wanneer die bladsy laai verander. 1132 01:14:56,400 --> 01:14:58,380 So, wat? Wat as my gebruiker iets druk? 1133 01:14:58,380 --> 01:15:00,540 Ek wil dit iets interessant om te doen wanneer hulle iets klik. 1134 01:15:00,540 --> 01:15:02,600 Dit is hoekom ons 'n gebeure. 1135 01:15:02,600 --> 01:15:05,330 Jy kan, basies, vind 'n element in jou DOM, 1136 01:15:05,330 --> 01:15:08,560 en dan sê, hey. Wanneer hierdie laai of iemand dit klik, 1137 01:15:08,560 --> 01:15:11,410 of wanneer hulle die muis oor dit, doen iets met dit. 1138 01:15:11,410 --> 01:15:15,330 En wat jy het is, jy het funksies wat dit vir jou hanteer. 1139 01:15:15,330 --> 01:15:17,980 Hierdie funksies is event handlers. 1140 01:15:17,980 --> 01:15:20,440 Wat they're - dit is net 'n fancy manier om te sê, 1141 01:15:20,440 --> 01:15:23,500 hierdie funksie is slegs uitgevoer word wanneer hierdie gebeurtenis. 1142 01:15:23,500 --> 01:15:28,070 So dit hanteer die geval wat plaasvind. 1143 01:15:28,070 --> 01:15:30,810 Dit is hoe jy sal uit te lê 'n gebeurtenis hanteerder. 1144 01:15:30,810 --> 01:15:34,750 Ek het 'n paar knoppie, en wanneer jy kliek op dit, dit ontplof. 1145 01:15:34,750 --> 01:15:40,560 So kliek nie die knoppie. 1146 01:15:40,560 --> 01:15:42,910 Dit is een manier om dit te nader, reg? 1147 01:15:42,910 --> 01:15:46,430 Jy het 'n knoppie etiket, en op kliek wat jy het 'n string wat sê, 1148 01:15:46,430 --> 01:15:50,460 O, by the way, ek doen dit ontplof ding vir my. 1149 01:15:50,460 --> 01:15:53,990 Andersins, is dit net soos 'n gereelde knoppie wat jy nou net gemaak het. 1150 01:15:53,990 --> 01:15:56,550 Jy kan dit ook doen 'n ander manier, 1151 01:15:56,550 --> 01:16:02,770 deur gryp die DOM element nie, maar ons sal red wat na ons praat oor jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Dit is 'n biblioteek wat kruis-leser. 1153 01:16:07,580 --> 01:16:09,580 Jy kan dit gebruik in pretty much enigiets. 1154 01:16:09,580 --> 01:16:12,090 En dit is net gee jou 'n baie gereedskap om te werk met. 1155 01:16:12,090 --> 01:16:15,850 Omdat JavaScript, terwyl kragtige, het nie al die gereedskap wat jy nodig 1156 01:16:15,850 --> 01:16:20,550 uit die boks aan 'n web app regtig pak jy dalk wil om te doen. 1157 01:16:20,550 --> 01:16:24,650 So dit vereenvoudig baie dinge, gee jou 'n baie funksies 1158 01:16:24,650 --> 01:16:28,760 uit die boks wat jy normaalweg sou hê om jouself te skryf, oor en oor en oor weer. 1159 01:16:28,760 --> 01:16:31,600 En maak net dinge baie eenvoudig. 1160 01:16:31,600 --> 01:16:35,780 Jy het ook die keurders, wat laat jy neem al die elemente 1161 01:16:35,780 --> 01:16:42,800 uit jou DOM baie meer eenvoudig, in plaas van om hierdie baie lang funksie oproepe om te gebruik. 1162 01:16:42,800 --> 01:16:46,630 Meer oor hierdie keurders. Jy het, daar jy het, kom ons sê 1163 01:16:46,630 --> 01:16:49,800 Ek wil 'n element te kry met die ID "rock." 1164 01:16:49,800 --> 01:16:56,450 Wel, in jQuery, dit is net $ en dan 'n string wat 'n pond, en dan "rock." 1165 01:16:56,450 --> 01:17:01,960 Dit is baie eenvoudig en 'n baie vinniger as die tradisionele JavaScript manier aanpak van hierdie probleem. 1166 01:17:01,960 --> 01:17:06,120 En jy het 'n soortgelyke dinge vir klasse en element tipes. 1167 01:17:06,120 --> 01:17:08,140 jQuery is - een van die interessante eienskappe is wat jy kan soort van compress 1168 01:17:08,140 --> 01:17:14,350 down jou navrae op jou DOM baie, baie vinnig. 1169 01:17:14,350 --> 01:17:18,980 Nou is ons terug na gebeurtenis hantering, en dit is hoe jy een byeenkoms in jQuery hanteer. 1170 01:17:18,980 --> 01:17:23,090 So wat ons hier gaan is ons sê, alles reg. Ek het 'n script tag, reg? 1171 01:17:23,090 --> 01:17:25,400 So ek het hierdie inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Wat ons gaan doen, is ons gaan om te sê, alles reg. 1173 01:17:27,750 --> 01:17:30,860 Wanneer die dokument gereed is, wat beteken dat die dokument gelaai, 1174 01:17:30,860 --> 01:17:34,660 Ons gaan om te gaan in daardie funksie, en ons gaan om te sê, alles reg, 1175 01:17:34,660 --> 01:17:37,060 hierdie funksie is eintlik iets anders doen. 1176 01:17:37,060 --> 01:17:42,320 Dit is basies sê, alles reg, kry vir my die element met die ID "myid." 1177 01:17:42,320 --> 01:17:47,960 En dan gee dit 'n funksie hanteerder wat voer wanneer jy dit kliek. 1178 01:17:47,960 --> 01:17:49,820 Basies wat dit beteken is, sê dit, alles reg. 1179 01:17:49,820 --> 01:17:52,630 Die bladsy laai, so ek gaan in, vind hierdie element, 1180 01:17:52,630 --> 01:17:56,420 gee hierdie gebeurtenis hanteerder, en dit basies sit jou bladsy vir jou. 1181 01:17:56,420 --> 01:18:00,520 En dit is hoe jy wil om te dink oor geval hantering. 1182 01:18:00,520 --> 01:18:06,310 Jy wil net om te dink oor, alles reg, wanneer daar iets gebeur, wat ek wil hê moet gebeur? 1183 01:18:06,310 --> 01:18:10,520 Jy wil nie om te dink oor, okay, ek moet seker hierdie ding praat met hierdie saak te maak, 1184 01:18:10,520 --> 01:18:14,660 hierdie ding blah blah blah, want jy wil net iets om te praat in terme van die gebeure. 1185 01:18:14,660 --> 01:18:17,650 Wanneer dit gebeur, dit gebeur nie. Wanneer dit gebeur, dit gebeur. 1186 01:18:17,650 --> 01:18:20,240 En as dinge sneller ander dinge, dit is groot. 1187 01:18:20,240 --> 01:18:22,150 Maar jy wil nie om te probeer en doen ingewikkelde kode 1188 01:18:22,150 --> 01:18:24,130 waar jy verwek verskeie dinge op dieselfde tyd, 1189 01:18:24,130 --> 01:18:28,860 omdat jy net gaan om te gee jouself 'n hoofpyn. 1190 01:18:28,860 --> 01:18:32,340 >> Alle regte. Nou kan ons ons bladsy gebeure te hanteer, 1191 01:18:32,340 --> 01:18:35,640 maar kom ons sê my gebruiker 'n knoppie druk. 1192 01:18:35,640 --> 01:18:38,040 Wat as ek wil hê dat die versoek om terug na die bediener stuur, 1193 01:18:38,040 --> 01:18:41,100 maar ek wil nie die bladsy te laai, want met 'n nuwe bladsy te laai 1194 01:18:41,100 --> 01:18:44,390 elke keer kry soort van saai, en hoekom moet ek 1195 01:18:44,390 --> 01:18:47,430 weer trek die kop, en die voet weer 1196 01:18:47,430 --> 01:18:49,670 en al die elemente van die bladsy weer 1197 01:18:49,670 --> 01:18:53,180 net die groet of die tyd om te verfris? 1198 01:18:53,180 --> 01:18:55,290 So dit is hoekom ons het iets soos Ajax. 1199 01:18:55,290 --> 01:18:59,150 Wat kan ons hier doen met Ajax is wat ons kan sê, alles reg, 1200 01:18:59,150 --> 01:19:01,290 Ek wil 'n paar data te stuur na die bediener, 1201 01:19:01,290 --> 01:19:04,010 en ek wil 'n antwoord terug te kry sodat ek kan my bladsy werk, 1202 01:19:04,010 --> 01:19:12,120 of dalk net doen sommige algoritmiese berekening wat nie noodwendig enigiets aan die gebruiker vertoon. 1203 01:19:12,120 --> 01:19:15,500 Wat het jy nodig om dit te doen? Wel, jy moet 'n URL wat jy nodig het om te praat. 1204 01:19:15,500 --> 01:19:18,650 Jou bediener kan nie net mettertyd luister uit die bloute. 1205 01:19:18,650 --> 01:19:21,960 Jy moet 'n spesifieke plek waar jy die data wil stuur om te hê. 1206 01:19:21,960 --> 01:19:26,240 En jy moet ook 'n paar data te stuur, of miskien is dit 'n dataless navraag. 1207 01:19:26,240 --> 01:19:31,380 Jy wil net terug na die bediener ping en sê, hey, ek is in die lewe, of iets soos dit. 1208 01:19:31,380 --> 01:19:35,150 En dan wil jy 'n funksie wat basies handvatsels met sukses. 1209 01:19:35,150 --> 01:19:38,250 Kom ons sê jy terug sekere inligting van jou bediener, 1210 01:19:38,250 --> 01:19:42,960 en jy wil hê dat die gebruiker se titel te verander op hulle bladsy. 1211 01:19:42,960 --> 01:19:44,930 So sal jy die inligting terug te kry, 1212 01:19:44,930 --> 01:19:48,860 en jy sal druk wat op die skerm. 1213 01:19:48,860 --> 01:19:51,170 Wat gebeur is, wanneer die bladsy is gereed, 1214 01:19:51,170 --> 01:19:56,500 jy 'n op klik-funksie vir hierdie knoppie genoem groet. 1215 01:19:56,500 --> 01:19:58,810 Wat dit dan doen, is, wanneer daardie knoppie gedruk, 1216 01:19:58,810 --> 01:20:03,700 jy praat greetings.php, maak jy 'n POST versoek 1217 01:20:03,700 --> 01:20:07,290 en jy sê, hey, kry my iets van jou bladsy. 1218 01:20:07,290 --> 01:20:09,890 Ons het nie regtig nodig om dit te beskryf nie, maar greetings.php, 1219 01:20:09,890 --> 01:20:12,480 Laat ons net sê, gee terug "hallo wêreld." 1220 01:20:12,480 --> 01:20:15,650 So kry ons terug hierdie "Hello World", en op die sukses van hierdie, 1221 01:20:15,650 --> 01:20:20,730 veronderstelling niks verkeerd gaan, dan het ons net na hierdie teiken plek 1222 01:20:20,730 --> 01:20:25,720 dat ons bepaalde en ons het net plak die reaksie daar. 1223 01:20:25,720 --> 01:20:31,560 En dit is 'n baie eenvoudige manier van die opstel van 'n Ajax navraag. 1224 01:20:31,560 --> 01:20:34,340 >> Baie vinnig, Rob soort genoem hierdie reeds 1225 01:20:34,340 --> 01:20:37,170 dinge kan verkeerd gaan, kan slegte dinge gebeur, 1226 01:20:37,170 --> 01:20:42,660 sodat jy wil om jouself vertroud te maak met hierdie HTTP reaksie kodes. 1227 01:20:42,660 --> 01:20:46,030 Wat dit is net soos, 200, alles het okay. 1228 01:20:46,030 --> 01:20:48,670 Iets anders, slegte dinge gebeur. 1229 01:20:48,670 --> 01:20:50,790 Dit is gewoonlik die ding wat jy wil om te onthou. 1230 01:20:50,790 --> 01:20:53,440 Maar dit is lekker om al hierdie te leer ken. 1231 01:20:53,440 --> 01:20:55,970 En uiteindelik, wanneer ons gegaan het deur al daardie, 1232 01:20:55,970 --> 01:20:58,680 ons nodig het om baie vinnig te praat oor die ontwerp, 1233 01:20:58,680 --> 01:21:00,620 en dan kan ons u al verlaat. 1234 01:21:00,620 --> 01:21:03,410 Ontwerp. Dinge wat jy wil om te onthou. 1235 01:21:03,410 --> 01:21:06,950 Vra jouself die volgende vrae: Wie sal gebruik word om hierdie? 1236 01:21:06,950 --> 01:21:09,580 Wat sal hulle gebruik word om dit vir? Wat doen my gebruikers omgee? 1237 01:21:09,580 --> 01:21:11,750 Wat doen hulle nie omgee? 1238 01:21:11,750 --> 01:21:14,500 Jy wil net nie 'n app te maak en laat dit net groei 1239 01:21:14,500 --> 01:21:18,270 en word hierdie reuse, al beslag ding wat jy kan nie eens voltooi. 1240 01:21:18,270 --> 01:21:23,900 Jy wil diskrete doelwitte en planne en dinge wat jy wil aan te spreek nie. 1241 01:21:23,900 --> 01:21:29,000 Maak dit moeiteloos. Al hierdie sê, basies, 1242 01:21:29,000 --> 01:21:34,950 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. 1243 01:21:34,950 --> 01:21:38,020 Jy wil dit net iets waar dit is baie maklik vir iemand om te gaan in wees 1244 01:21:38,020 --> 01:21:40,800 en doen wat hulle wil doen. 1245 01:21:40,800 --> 01:21:42,920 Jy wil nie hê dat hulle het 5 bladsye te navigeer 1246 01:21:42,920 --> 01:21:45,460 te kry om jou primêre funksie van jou site. 1247 01:21:45,460 --> 01:21:49,290 As Google het 5 bladsye voordat jy kan selfs soek iets, 1248 01:21:49,290 --> 01:21:53,080 sou niemand dit gebruik. 1249 01:21:53,080 --> 01:21:55,890 En laastens, papier prototipe, fokusgroep. 1250 01:21:55,890 --> 01:21:59,220 Het 'n goeie ontwerp en toetsing praktyke. 1251 01:21:59,220 --> 01:22:00,730 Net omdat jy dink dit werk vir jou, 1252 01:22:00,730 --> 01:22:04,860 beteken nie enigiemand anders dink dit werk. 1253 01:22:04,860 --> 01:22:14,490 Maar ja, dit is dit. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]