1 00:00:00,000 --> 00:00:05,616 2 00:00:05,616 --> 00:00:07,030 >> HANNAH BLUMBERG: Hej alle. 3 00:00:07,030 --> 00:00:09,530 Vi kommer til at komme i gang blot et par minutter tidligt 4 00:00:09,530 --> 00:00:11,738 da vi har en hel masse materiale at komme igennem. 5 00:00:11,738 --> 00:00:12,790 Jeg er Hannah. 6 00:00:12,790 --> 00:00:13,865 Jeg er en TF. 7 00:00:13,865 --> 00:00:16,239 Maria vil være sammenføjning os i blot et par minutter. 8 00:00:16,239 --> 00:00:17,560 Hun underviser afsnittet lige før. 9 00:00:17,560 --> 00:00:19,351 Jeg underviser sektion højre efter, så vi vil 10 00:00:19,351 --> 00:00:21,200 at holde den til halvanden time. 11 00:00:21,200 --> 00:00:25,490 >> Så som du kan se heroppe, har vi helt et par emner, vi har brug for at komme igennem, 12 00:00:25,490 --> 00:00:27,200 så vi vil gå lidt hurtigt. 13 00:00:27,200 --> 00:00:31,140 Men hvis på noget tidspunkt vi sige noget for hurtigt, eller du ikke forstår, 14 00:00:31,140 --> 00:00:33,170 velkommen til at afbryde med spørgsmål. 15 00:00:33,170 --> 00:00:36,610 Vi ønsker at være i stand til at gøre dette til en gennemgå session som nyttig for alle jer 16 00:00:36,610 --> 00:00:37,973 som muligt. 17 00:00:37,973 --> 00:00:38,920 Awesome. 18 00:00:38,920 --> 00:00:41,650 >> Så lad os hoppe ret i med nogle emner, som vi faktisk 19 00:00:41,650 --> 00:00:46,980 meget, meget kort dækket til quiz 0 i quizzen 0 anmeldelse session. 20 00:00:46,980 --> 00:00:48,840 Så starter med hægtede lister. 21 00:00:48,840 --> 00:00:52,090 Så bare sørg for at have nogle grundlæggende viden om hægtede lister 22 00:00:52,090 --> 00:00:55,110 og er tryg ved at gøre nogle af de grundlæggende funktioner. 23 00:00:55,110 --> 00:00:58,560 >> Så bare til anmeldelse, der er knyttet lister er bedre end arrays 24 00:00:58,560 --> 00:01:01,020 fordi de kan vokse dynamisk. 25 00:01:01,020 --> 00:01:03,300 Så vi har at kæmpe fordel. 26 00:01:03,300 --> 00:01:06,031 Vi har set dem brugt i hash tabeller, når vi 27 00:01:06,031 --> 00:01:08,280 ved ikke præcis, hvor mange ting, vi kommer til at have 28 00:01:08,280 --> 00:01:10,900 at indsætte ind i vores datastruktur. 29 00:01:10,900 --> 00:01:15,700 Vi har desværre stykker den linkede liste over hukommelsen, 30 00:01:15,700 --> 00:01:20,820 så vi vil ikke nødvendigvis være stand til at gøre konstant tid adgang 31 00:01:20,820 --> 00:01:22,502 til ethvert element i den linkede liste. 32 00:01:22,502 --> 00:01:24,210 For at finde en særlige element, vi 33 00:01:24,210 --> 00:01:26,510 nødt til at gentage alle de måde fra begyndelsen. 34 00:01:26,510 --> 00:01:30,610 Så husk på, at de fleste af de grundlæggende operationer er omega på 1. 35 00:01:30,610 --> 00:01:32,130 Så indsatsen er bare at tage 1. 36 00:01:32,130 --> 00:01:37,520 Slet kommer til at tage n da vi nødt til at gå finde det på listen. 37 00:01:37,520 --> 00:01:39,260 Og søgning kan tage, i værste fald, n. 38 00:01:39,260 --> 00:01:42,330 Vi kan ikke gøre noget som binær søgning på en sammenkædet liste 39 00:01:42,330 --> 00:01:45,101 da vi kan ikke bare tilfældigt springe til midten. 40 00:01:45,101 --> 00:01:45,600 Afkøle. 41 00:01:45,600 --> 00:01:48,160 42 00:01:48,160 --> 00:01:48,960 Awesome. 43 00:01:48,960 --> 00:01:50,270 >> En lille smule af stakke. 44 00:01:50,270 --> 00:01:53,980 Dette, igen, kom op på quiz 0, så du skal være super komfortable med det. 45 00:01:53,980 --> 00:01:57,210 Men for stakke, beder vi dig at huske en stabel af bakker. 46 00:01:57,210 --> 00:01:59,940 Og det kommer til at være først i, sidst ud. 47 00:01:59,940 --> 00:02:02,272 Så vi stak tingene op i stakken, og derefter 48 00:02:02,272 --> 00:02:04,980 Hvis vi prøver at tage noget off-- som vi kalder popping off 49 00:02:04,980 --> 00:02:06,581 den stack-- vi kommer fra toppen. 50 00:02:06,581 --> 00:02:09,289 Og hvis vi ønsker at sætte noget i stakken, vi kalder det skubber. 51 00:02:09,289 --> 00:02:13,170 Så det er altid vil være voksende op fra bunden som en stak af bakker. 52 00:02:13,170 --> 00:02:14,540 Awesome. 53 00:02:14,540 --> 00:02:17,607 >> Vi har set stakke implementeret med både hægtede lister og arrays. 54 00:02:17,607 --> 00:02:19,440 Hvis du gennemføre med arrays, du ønsker 55 00:02:19,440 --> 00:02:22,350 at sørge for at holde styr på både størrelsen og kapaciteten. 56 00:02:22,350 --> 00:02:27,540 Så størrelse kommer til at være den aktuelle Antallet af ting i din stak, 57 00:02:27,540 --> 00:02:32,900 mens kapaciteten er det samlede antal af ting, du kan gemme i din stack. 58 00:02:32,900 --> 00:02:34,220 Afkøle. 59 00:02:34,220 --> 00:02:35,767 >> Meget på samme måde, har vi køer. 60 00:02:35,767 --> 00:02:38,850 I dette tilfælde, i stedet for at tænke på en stak af bakker, så tænk på en linje. 61 00:02:38,850 --> 00:02:40,697 Dette vil være først ind, først ud. 62 00:02:40,697 --> 00:02:42,780 Så hvis du foring op til noget i butikken, 63 00:02:42,780 --> 00:02:46,920 Vi håber, at den person, først i linje vil blive hjulpet først. 64 00:02:46,920 --> 00:02:49,350 >> I stedet for at sige skubbe og pop som vi gør for stakken, 65 00:02:49,350 --> 00:02:52,000 vi bare sige enqueue og dequeue. 66 00:02:52,000 --> 00:02:54,970 Og igen, hvis du er gennemføre dette med et array, 67 00:02:54,970 --> 00:02:56,720 vi nødt til at holde styr af ikke kun størrelsen 68 00:02:56,720 --> 00:03:02,390 og kapacitet, men også hovedet, som kommer til at være på forsiden af ​​vores kø. 69 00:03:02,390 --> 00:03:03,010 Afkøle. 70 00:03:03,010 --> 00:03:05,770 Eventuelle spørgsmål om noget af det? 71 00:03:05,770 --> 00:03:06,320 Awesome. 72 00:03:06,320 --> 00:03:07,640 Flytning til højre ad. 73 00:03:07,640 --> 00:03:08,564 >> OK, hash tabeller. 74 00:03:08,564 --> 00:03:10,605 Her er hvor det begynder at får virkelig interessant. 75 00:03:10,605 --> 00:03:14,150 Så en hash tabel er en implementering af et associativt array. 76 00:03:14,150 --> 00:03:16,700 Så dybest set, hvad der skete er har vi alle denne indgang, 77 00:03:16,700 --> 00:03:18,750 og vi giver det til en hash funktion, som siger, 78 00:03:18,750 --> 00:03:21,840 OK, det er her i hash tabellen det tilhører. 79 00:03:21,840 --> 00:03:24,860 >> Så den enkleste hash-funktionen at vi har set er bare at sige, 80 00:03:24,860 --> 00:03:28,170 OK, formoder, at vi ønsker at sætte strenge i vores hash tabel. 81 00:03:28,170 --> 00:03:30,870 Og en meget simpel idé kunne være at sige, OK, 82 00:03:30,870 --> 00:03:34,350 lad os bare sortere efter første bogstav i ordet. 83 00:03:34,350 --> 00:03:37,570 Så du kan se her, tager vi banan, vi sætter det gennem en hash-funktion, 84 00:03:37,570 --> 00:03:40,190 og det siger, hey, det skal gå på indeks 1. 85 00:03:40,190 --> 00:03:45,120 >> Så kan vi hovedsagelig tænke på en hash tabel som en masse forskellige spande. 86 00:03:45,120 --> 00:03:49,880 Og hver af disse skovle kommer at holde lederen af ​​en linket liste. 87 00:03:49,880 --> 00:03:55,030 Og i den linkede liste er, hvor vi kan faktisk sat forskellige stykker data. 88 00:03:55,030 --> 00:03:57,820 >> Så dykker lidt mere i en hash-funktion, her er 89 00:03:57,820 --> 00:03:59,870 det eksempel jeg lige beskrevet, hvor vi bare sige, 90 00:03:59,870 --> 00:04:02,460 OK, tage det første bogstav af ordet, og vi er 91 00:04:02,460 --> 00:04:03,990 kommer til at sortere det i spande. 92 00:04:03,990 --> 00:04:08,490 Så formentlig vil der være 26 spande, en for hvert bogstav i alfabetet. 93 00:04:08,490 --> 00:04:10,090 Hvorfor er det ikke en stor hash-funktion? 94 00:04:10,090 --> 00:04:13,461 Hvad gør denne ikke-ideal? 95 00:04:13,461 --> 00:04:13,960 Ja. 96 00:04:13,960 --> 00:04:15,790 >> PUBLIKUM: Du kommer at have kollisioner. 97 00:04:15,790 --> 00:04:16,390 >> HANNAH BLUMBERG: Ja, præcis. 98 00:04:16,390 --> 00:04:18,000 Du kommer til at have kollisioner. 99 00:04:18,000 --> 00:04:18,954 Så det er én ting. 100 00:04:18,954 --> 00:04:21,620 Og vi vil tale om, hvordan vi kan fix kollisioner i bare et sekund. 101 00:04:21,620 --> 00:04:23,980 Et andet problem med dette især hash-funktionen 102 00:04:23,980 --> 00:04:25,980 er, at vores forskellige spande vil være 103 00:04:25,980 --> 00:04:28,960 af temmelig drastisk forskellige størrelser. 104 00:04:28,960 --> 00:04:33,840 >> Vi ved, at der er en hel masse flere ord, der starter med A end X, 105 00:04:33,840 --> 00:04:38,980 så vi kommer til at have meget ubalancerede spande i vores hash tabel. 106 00:04:38,980 --> 00:04:40,050 Afkøle. 107 00:04:40,050 --> 00:04:41,340 Så ja, lad os komme tilbage til punktet af kollisioner. 108 00:04:41,340 --> 00:04:42,900 Hvad gør vi, hvis der er en kollision? 109 00:04:42,900 --> 00:04:44,490 >> Vi har et par forskellige muligheder. 110 00:04:44,490 --> 00:04:47,600 Så en, så formoder vi prøver at sætte bær ind i vores hash tabellen. 111 00:04:47,600 --> 00:04:50,370 Og vi ser, Åh, vi ønsker at sætte det i indeks 1, 112 00:04:50,370 --> 00:04:52,070 men banan allerede bor der. 113 00:04:52,070 --> 00:04:53,110 Hvad skal vi gøre? 114 00:04:53,110 --> 00:04:54,560 Vi har to hovedmuligheder. 115 00:04:54,560 --> 00:04:58,050 >> Nummer et er, at vi kan sige, OK, der er ikke plads i indeks 1, 116 00:04:58,050 --> 00:05:03,210 men lad os bare holde kigge gennem indtil vi kan finde en anden åben stedet. 117 00:05:03,210 --> 00:05:08,490 Så vi vil sige, OK, Lad os sætte det i stedet 3. 118 00:05:08,490 --> 00:05:09,240 Det er en mulighed. 119 00:05:09,240 --> 00:05:11,470 Det kaldes lineær sondering. 120 00:05:11,470 --> 00:05:15,500 >> Og en anden mulighed er at sige, OK, godt, lad os bare gøre hver af disse spande 121 00:05:15,500 --> 00:05:17,470 være lederne af hægtede lister. 122 00:05:17,470 --> 00:05:21,910 Og det er OK, hvis der er mere end én ting i en spand. 123 00:05:21,910 --> 00:05:23,820 Vi er lige at gå til append det på forsiden. 124 00:05:23,820 --> 00:05:26,032 Så her kan du se, OK, når vi indsat berry, vi 125 00:05:26,032 --> 00:05:28,240 tog bare banan, slags skubbet det over en lille smule 126 00:05:28,240 --> 00:05:29,842 og kastede en bær derinde. 127 00:05:29,842 --> 00:05:31,050 Og det er også helt fint. 128 00:05:31,050 --> 00:05:32,830 Dette kaldes separat kæde. 129 00:05:32,830 --> 00:05:38,100 Du kan tænke på dette som lidt ligesom en vifte af hoveder til hægtede lister. 130 00:05:38,100 --> 00:05:41,950 Eventuelle spørgsmål om hash tabeller, hash funktioner? 131 00:05:41,950 --> 00:05:44,290 Awesome. 132 00:05:44,290 --> 00:05:45,470 >> Træer og forsøger. 133 00:05:45,470 --> 00:05:47,287 Så et træ er enhver slags af datastrukturen 134 00:05:47,287 --> 00:05:49,453 hvor der er en slags hierarki eller en slags 135 00:05:49,453 --> 00:05:51,247 af ranking til dine forskellige objekter. 136 00:05:51,247 --> 00:05:53,580 Og det vil blive super klart, når vi ser et eksempel. 137 00:05:53,580 --> 00:05:56,960 Og vi så forsøger sammen med hash tabeller, i pset5-- 138 00:05:56,960 --> 00:06:00,700 som, igen, helt fair spil for dette quiz-- som en anden data 139 00:06:00,700 --> 00:06:03,110 strukturer, som vi kan opbevare forskellige ting. 140 00:06:03,110 --> 00:06:06,782 I tilfælde af ordbogen, vi gemt en masse ord. 141 00:06:06,782 --> 00:06:08,240 Så lad os tage et kig på nogle træer. 142 00:06:08,240 --> 00:06:10,190 Så dette er et eksempel på et træ. 143 00:06:10,190 --> 00:06:13,105 Det har en form for struktur, at hierarkisk struktur, 144 00:06:13,105 --> 00:06:15,920 hvor man kan se, at denne 1 node øverst 145 00:06:15,920 --> 00:06:20,750 har en slags rang over 2 og 3, der er over 4, 5 og 6 og 7, 146 00:06:20,750 --> 00:06:22,860 der er over 8 og 9. 147 00:06:22,860 --> 00:06:25,210 Så det er alt mener vi med en træ, så du kan bare lidt 148 00:06:25,210 --> 00:06:26,660 af billede dette i dit hoved. 149 00:06:26,660 --> 00:06:29,050 >> Nu har vi et par mere specialiserede træer. 150 00:06:29,050 --> 00:06:31,070 Så et eksempel er en binært træ. 151 00:06:31,070 --> 00:06:33,290 Og et binært træ er, igen, bare kommer til at være 152 00:06:33,290 --> 00:06:37,040 en datastruktur med en slags hierarki, men hver af knudepunkterne 153 00:06:37,040 --> 00:06:38,650 kan have højst to børn. 154 00:06:38,650 --> 00:06:41,530 Det er, hvor ordet binære kommer fra. 155 00:06:41,530 --> 00:06:43,410 Så det er et eksempel på et binært træ. 156 00:06:43,410 --> 00:06:45,720 Så det er en mindre kategori af træer. 157 00:06:45,720 --> 00:06:48,960 >> Lad os tage endnu mere specifik og taler om binær trees-- binær søgning 158 00:06:48,960 --> 00:06:51,310 træer, snarere. 159 00:06:51,310 --> 00:06:56,430 Så her ideen er ikke alene hver node har højst to børn, 160 00:06:56,430 --> 00:07:00,300 men alle de børn til venstre vil være mindre 161 00:07:00,300 --> 00:07:03,450 og alle børnene til ret vil være større. 162 00:07:03,450 --> 00:07:05,890 Så meddelelse i netop vores binært træ, der er 163 00:07:05,890 --> 00:07:08,650 ingen sammenhæng mellem tallene. 164 00:07:08,650 --> 00:07:12,990 Men i vores binær søgning træet, vi ser, OK, her er 44. 165 00:07:12,990 --> 00:07:17,080 Og hvert nummer til venstre for 44 mindre og alt til højre 166 00:07:17,080 --> 00:07:17,920 er større. 167 00:07:17,920 --> 00:07:20,130 >> Og der holder ved hvert niveau af træet. 168 00:07:20,130 --> 00:07:24,810 Så her, er mindre end 22, og det er større end 22. 169 00:07:24,810 --> 00:07:26,390 Og det er binær søgning træ. 170 00:07:26,390 --> 00:07:28,900 Hvorfor tror vi det hedder en binær søgning træ? 171 00:07:28,900 --> 00:07:30,651 Hvad algoritme betyder det minde dig om? 172 00:07:30,651 --> 00:07:31,650 PUBLIKUM: Binær søgning. 173 00:07:31,650 --> 00:07:32,480 HANNAH BLUMBERG: Binær søgning. 174 00:07:32,480 --> 00:07:35,150 For hvis du leder efter en bestemt antal i dette træ, 175 00:07:35,150 --> 00:07:38,800 på hvert punkt, kan du bare banke off halvdel af træet, som er stor. 176 00:07:38,800 --> 00:07:43,800 Og så kommer til at give os noget der ser meget gerne binær søgning. 177 00:07:43,800 --> 00:07:45,870 Nogen spørgsmål? 178 00:07:45,870 --> 00:07:47,570 Okay, cool. 179 00:07:47,570 --> 00:07:48,560 >> Okay, prøver. 180 00:07:48,560 --> 00:07:49,657 Alles favorit. 181 00:07:49,657 --> 00:07:51,990 Så dette er det eksempel, vi har set en masse i klassen. 182 00:07:51,990 --> 00:07:54,710 Og igen, det er bare en anden måde, at vi kan lagre data. 183 00:07:54,710 --> 00:07:57,530 I tilfælde af ordbogen, igen, Dette er blot kommer til at være strenge. 184 00:07:57,530 --> 00:08:00,870 Så lad os se, hvad det egentlig ligner på et lidt lavere niveau. 185 00:08:00,870 --> 00:08:03,690 >> Så lad os tage et kig ved en knude i en trie. 186 00:08:03,690 --> 00:08:07,532 Og vi ser, OK, har der går at være en boolesk og en node, 187 00:08:07,532 --> 00:08:09,170 en pointer til et knudepunkt. 188 00:08:09,170 --> 00:08:11,400 Og vi ser, at Boolean kaldes is_word. 189 00:08:11,400 --> 00:08:13,490 Så det væsentlige, det er kommer til at svare 190 00:08:13,490 --> 00:08:16,750 at disse små trekanter, som siger, hvis du har fået her, 191 00:08:16,750 --> 00:08:19,100 du har fundet en komplet ord. 192 00:08:19,100 --> 00:08:23,670 >> Vi ved, at "Turing" over her er et helt ord, 193 00:08:23,670 --> 00:08:28,030 mens blot T-U-R er ikke et ord fordi vi ikke se, at lille delta. 194 00:08:28,030 --> 00:08:31,440 Og den lille delta, igen, svarer til denne is_word, 195 00:08:31,440 --> 00:08:34,480 denne Boolesk is_word. 196 00:08:34,480 --> 00:08:36,320 Og så har vi en vifte af børn. 197 00:08:36,320 --> 00:08:39,860 Så på hvert niveau, du har et særligt knudepunkt, 198 00:08:39,860 --> 00:08:42,470 og at node peger på en array af hele alfabetet. 199 00:08:42,470 --> 00:08:44,346 >> Så du kan se, igen, i denne picture-- jeg 200 00:08:44,346 --> 00:08:48,170 kommer til at holde hoppe tilbage og forth-- at denne matrix øverst 201 00:08:48,170 --> 00:08:51,640 har en masse forskellige noder, der kommer ud af det. 202 00:08:51,640 --> 00:08:57,140 Det har 26 eller 27, hvis du vil at indsætte en ekstra karakter. 203 00:08:57,140 --> 00:09:01,320 Og det giver os en måde at gemme vores data 204 00:09:01,320 --> 00:09:04,450 på en måde, der kan blive kigget på at du kan se op super hurtigt. 205 00:09:04,450 --> 00:09:06,650 Hvad er opslag tid til en trie? 206 00:09:06,650 --> 00:09:07,970 >> PUBLIKUM: [uhørligt]. 207 00:09:07,970 --> 00:09:08,300 >> HANNAH BLUMBERG: Ja. 208 00:09:08,300 --> 00:09:09,550 I teorien er det konstant tid. 209 00:09:09,550 --> 00:09:13,230 Det er kun kommer til at være på størrelse med det ord, du vil slå op. 210 00:09:13,230 --> 00:09:15,950 Selv hvis vi tilføjer en zillion flere ord til vores trie, 211 00:09:15,950 --> 00:09:18,160 det kommer ikke til at tage os længere at bestemme 212 00:09:18,160 --> 00:09:19,690 om det givne ord er i den trie. 213 00:09:19,690 --> 00:09:21,412 Så det er virkelig rart. 214 00:09:21,412 --> 00:09:23,697 >> PUBLIKUM: Har du lige initialisere den opstilling? 215 00:09:23,697 --> 00:09:24,780 Du gik glip af et punkt eller to. 216 00:09:24,780 --> 00:09:26,130 Kan du bare tale om at for en anden? 217 00:09:26,130 --> 00:09:26,680 >> HANNAH BLUMBERG: Sure, absolut. 218 00:09:26,680 --> 00:09:27,590 Godt spørgsmål. 219 00:09:27,590 --> 00:09:31,140 Spørgsmålet var, vi har et array, der er 220 00:09:31,140 --> 00:09:34,180 vil have knude stjerne som modsætning til blot node, ikke? 221 00:09:34,180 --> 00:09:35,180 Afkøle. 222 00:09:35,180 --> 00:09:37,990 Så her hvad vi siger er vores array er lige 223 00:09:37,990 --> 00:09:40,035 vil være henvisninger til andre arrays. 224 00:09:40,035 --> 00:09:42,910 Så det er essentially-- den slags føles som en sammenkædet liste på denne måde 225 00:09:42,910 --> 00:09:46,620 hvor hver af disse børn bare pege på den næste node. 226 00:09:46,620 --> 00:09:49,030 >> Og den måde, at vi faktisk bestemme, hey, OK, 227 00:09:49,030 --> 00:09:52,320 vi har gentaget gennem en hel ord, er dette ord i ordbogen, 228 00:09:52,320 --> 00:09:54,476 vi lige tjekke denne is_word. 229 00:09:54,476 --> 00:09:55,100 Store spørgsmål. 230 00:09:55,100 --> 00:09:55,675 Ja. 231 00:09:55,675 --> 00:09:56,216 PUBLIKUM: OK. 232 00:09:56,216 --> 00:09:57,470 Så hvad var runtime for trie? 233 00:09:57,470 --> 00:09:58,386 >> HANNAH BLUMBERG: Selvfølgelig. 234 00:09:58,386 --> 00:10:01,852 Så runtime til trie for lookup vil være konstant tid. 235 00:10:01,852 --> 00:10:04,310 Så det er bare at være den Antallet af bogstaver i ordet. 236 00:10:04,310 --> 00:10:06,310 Det er ikke afhængig af størrelsen af ​​ordbogen 237 00:10:06,310 --> 00:10:09,510 eller størrelsen af ​​datastrukturen. 238 00:10:09,510 --> 00:10:12,170 Så her er en lidt enklere eksempel. 239 00:10:12,170 --> 00:10:15,430 >> I dette tilfælde kan du se, at Ordet bat er i ordbogen 240 00:10:15,430 --> 00:10:18,900 og du har zoom, men du ikke har noget som zoo. 241 00:10:18,900 --> 00:10:20,050 Hvordan ville vi gøre zoo? 242 00:10:20,050 --> 00:10:24,276 Hvordan tilføjer vi zoo til vores ordbog, til vores trie? 243 00:10:24,276 --> 00:10:24,776 Ja. 244 00:10:24,776 --> 00:10:27,014 >> PUBLIKUM: Make is_word sandt for [uhørligt]. 245 00:10:27,014 --> 00:10:27,930 HANNAH BLUMBERG: God. 246 00:10:27,930 --> 00:10:31,731 Så vi vil sige Z-O-O, og så ville vi ønsker at tjekke det kassen så godt. 247 00:10:31,731 --> 00:10:32,230 Alle tiders. 248 00:10:32,230 --> 00:10:35,160 249 00:10:35,160 --> 00:10:37,930 Lad os sammenligne ganske kort forsøger versus hash tabeller. 250 00:10:37,930 --> 00:10:39,770 Forsøger er virkelig stor fordi, som vi sagde, 251 00:10:39,770 --> 00:10:41,610 de giver konstant tid opslag. 252 00:10:41,610 --> 00:10:44,285 Men den store ulempe er de er humongous. 253 00:10:44,285 --> 00:10:46,160 Du kan få den forstand, selv ved at kigge på den, 254 00:10:46,160 --> 00:10:48,454 at det kommer til at tage en enorm mængde hukommelse. 255 00:10:48,454 --> 00:10:50,620 Så de kommer til at være meget større end hash tabeller, 256 00:10:50,620 --> 00:10:52,270 men de kommer til at give os meget hurtigere lookup gange. 257 00:10:52,270 --> 00:10:54,478 Så det er lidt din tradeoff, hvad du interesserer dig for, 258 00:10:54,478 --> 00:10:57,350 uanset om det er hastighed eller hukommelse. 259 00:10:57,350 --> 00:11:02,251 Eventuelle spørgsmål om noget af det, alle de C-datastrukturer. 260 00:11:02,251 --> 00:11:02,750 Smuk. 261 00:11:02,750 --> 00:11:03,250 OKAY. 262 00:11:03,250 --> 00:11:07,322 Vi kommer til at gå videre til en lille bit af web-udvikling med Maria. 263 00:11:07,322 --> 00:11:08,280 MARIA ZLATKOVA: Dejligt. 264 00:11:08,280 --> 00:11:09,036 OKAY. 265 00:11:09,036 --> 00:11:10,380 >> HANNAH BLUMBERG: Du kan bruge min bærbare computer. 266 00:11:10,380 --> 00:11:11,255 >> MARIA ZLATKOVA: Nice. 267 00:11:11,255 --> 00:11:13,320 268 00:11:13,320 --> 00:11:14,912 OK, cool. 269 00:11:14,912 --> 00:11:17,120 Som vi bevæger os nu til web udvikling, vi snakkede lidt 270 00:11:17,120 --> 00:11:20,680 om skiftende tilladelser af filer og mapper 271 00:11:20,680 --> 00:11:24,190 således at de kan være tilgængelige til andre brugere, til verden, 272 00:11:24,190 --> 00:11:28,640 og således at vi kan se, hvordan dybest set kan vi formidle dem 273 00:11:28,640 --> 00:11:32,600 når vi udvikler ting som websites at vi for det meste har gjort. 274 00:11:32,600 --> 00:11:36,400 >> Så vi så chmod-kommandoen, der er forandring tilstand, dybest set. 275 00:11:36,400 --> 00:11:39,300 Det er en Linux kommando og det ændrer adgangsrettigheder 276 00:11:39,300 --> 00:11:40,410 af filsystemet objekter. 277 00:11:40,410 --> 00:11:43,370 Og et filsystem formål er bare en mappe, en fil, 278 00:11:43,370 --> 00:11:46,810 noget, som du kan ændre tilladelserne til. 279 00:11:46,810 --> 00:11:53,750 >> Så at se filens tilladelser, vi skrive kommandoen ls, liste, -l. 280 00:11:53,750 --> 00:11:56,500 Og når vi skriver, at vi normalt se nogle tilladelser 281 00:11:56,500 --> 00:11:59,660 der ser lidt ligesom denne foran et mappenavn. 282 00:11:59,660 --> 00:12:01,260 Så d refererer til mappe. 283 00:12:01,260 --> 00:12:05,930 Og så har vi tre treklange der dybest set 284 00:12:05,930 --> 00:12:11,675 henvises til tilladelser enten en bruger, en gruppe, eller verden. 285 00:12:11,675 --> 00:12:16,490 >> De typer af tilladelser, vi kan have for disse tre grupper af mennesker 286 00:12:16,490 --> 00:12:20,830 er enten R for læsning, w for skrive, og x for at udføre. 287 00:12:20,830 --> 00:12:23,650 Og vi kan have dem, for gruppen og verden. 288 00:12:23,650 --> 00:12:26,940 Det tricky ting er, at nogle gange når vi skriver kommandoen chmod, 289 00:12:26,940 --> 00:12:32,960 vi ville skrive nogle tal som bestod af tre bit. 290 00:12:32,960 --> 00:12:36,990 Så vi kunne gøre som 777, og at grundlæggende 291 00:12:36,990 --> 00:12:40,450 henvist til den merværdi hver af disse triader 292 00:12:40,450 --> 00:12:45,060 fordi r henviser til 4, w ville henviser til 2, og x henviser til 1, 293 00:12:45,060 --> 00:12:50,020 så når adderes hvert nummer ville komme ned til en kumulativ nummer 294 00:12:50,020 --> 00:12:52,750 til en kumulativ værdi mellem 0 og 7. 295 00:12:52,750 --> 00:12:55,150 Så kunne vi også have 0 for ingen tilladelser overhovedet. 296 00:12:55,150 --> 00:12:58,200 Og det ville dybest set give os tilladelserne til enten brugeren, 297 00:12:58,200 --> 00:13:00,450 gruppen, eller verden. 298 00:13:00,450 --> 00:13:02,620 Eventuelle spørgsmål vedrørende denne indtil videre? 299 00:13:02,620 --> 00:13:05,331 >> PUBLIKUM: Du sagde læst var 4? 300 00:13:05,331 --> 00:13:06,164 MARIA ZLATKOVA: Ja. 301 00:13:06,164 --> 00:13:07,568 PUBLIKUM: [uhørligt]. 302 00:13:07,568 --> 00:13:08,504 HANNAH BLUMBERG: Yup. 303 00:13:08,504 --> 00:13:11,790 PUBLIKUM: Og så ved at tilføje alle dem andre ville angive dit nummer. 304 00:13:11,790 --> 00:13:12,665 MARIA ZLATKOVA: Ja. 305 00:13:12,665 --> 00:13:14,970 Ja. 306 00:13:14,970 --> 00:13:17,810 Disse er store spørgsmål. 307 00:13:17,810 --> 00:13:20,490 Dejlig. 308 00:13:20,490 --> 00:13:25,340 Næste vi sprang i HTML og en lidt mere om webudvikling. 309 00:13:25,340 --> 00:13:27,990 Så HTML betyder blot, HyperText Markup Language. 310 00:13:27,990 --> 00:13:30,460 Og det er markup sprog, der er en standard 311 00:13:30,460 --> 00:13:32,720 at det bruges til at oprette websider. 312 00:13:32,720 --> 00:13:35,750 >> Det kaldes et kodesprog fordi det er faktisk ikke kompileret. 313 00:13:35,750 --> 00:13:40,310 Det behøver ikke sige, hvordan noget kode skal blive henrettet eller sådan noget. 314 00:13:40,310 --> 00:13:44,800 Det bare skildrer og beskriver, hvordan en web 315 00:13:44,800 --> 00:13:46,840 side bør oprettes med hver af dens elementer 316 00:13:46,840 --> 00:13:48,460 og hvordan de skal se ud til brugeren. 317 00:13:48,460 --> 00:13:53,090 318 00:13:53,090 --> 00:13:57,110 >> Nogle af de HTML-tags, som vi gik over er følgende. 319 00:13:57,110 --> 00:14:00,500 Alle vores HTML-dokumenter begyndte med DOCTYPE html. 320 00:14:00,500 --> 00:14:02,550 Så vi altid har html-tag. 321 00:14:02,550 --> 00:14:03,930 Vi har et hoved og en krop. 322 00:14:03,930 --> 00:14:07,890 Og det er vigtigt, at HTML har denne form for indlejrede struktur 323 00:14:07,890 --> 00:14:09,280 fordi det er meget klart. 324 00:14:09,280 --> 00:14:13,200 Og så bliver det meget klart, når vi brug for at åbne og faktisk lukke tags. 325 00:14:13,200 --> 00:14:18,400 Og vi altid nødt til at lukke tags, som vi har åbnet. 326 00:14:18,400 --> 00:14:23,170 >> Og her har vi nogle af de typer af ting forude, som vi ønsker at have. 327 00:14:23,170 --> 00:14:26,580 Så vi har for eksempel titlen på CS50. 328 00:14:26,580 --> 00:14:31,980 Og så har vi faktisk kan linke et typografiark 329 00:14:31,980 --> 00:14:34,030 der definerer, hvordan vi stil vores hjemmeside. 330 00:14:34,030 --> 00:14:35,650 Det er CSS. 331 00:14:35,650 --> 00:14:39,320 Vi kommer til at gå over det i næste par slides så godt. 332 00:14:39,320 --> 00:14:42,580 >> I kroppen, satte vi nogle klasser og id'er. 333 00:14:42,580 --> 00:14:45,860 Og som en påmindelse, igen, ID'er er unikke og klasser 334 00:14:45,860 --> 00:14:47,390 kan henføres til flere elementer. 335 00:14:47,390 --> 00:14:52,110 Og det betyder bare, at vi kan bruge klasser og id'er 336 00:14:52,110 --> 00:14:55,860 inden anden structures-- så for eksempel inden for CSS-filer eller stil 337 00:14:55,860 --> 00:15:00,940 sheets-- at henvise til specifikke elementer og dybest set siger, at vi ønsker at style 338 00:15:00,940 --> 00:15:03,280 eller designe et element på en eller anden særlig måde. 339 00:15:03,280 --> 00:15:06,440 Og vi refererer til dem ved deres id'er og klasser. 340 00:15:06,440 --> 00:15:09,870 Og vi kan også henvise til forskellige ting ved tags så godt, 341 00:15:09,870 --> 00:15:13,830 men id'er og klasser bare give os nogle alsidighed og hvad der specifikt vi 342 00:15:13,830 --> 00:15:15,850 ønsker at henvise til. 343 00:15:15,850 --> 00:15:19,620 >> Så bare et eksempel. 344 00:15:19,620 --> 00:15:22,730 Vi kan, igen, inden en CSS-fil, hvor vi 345 00:15:22,730 --> 00:15:25,770 vil definere nogle style-- så farver, skrifttyper, 346 00:15:25,770 --> 00:15:30,340 og kram at-- ligesom vi kan definere stil for et organ. 347 00:15:30,340 --> 00:15:32,640 Så ville definere det for hele kroppen tag. 348 00:15:32,640 --> 00:15:36,160 Men så kan vi også definere en stil for en #title. 349 00:15:36,160 --> 00:15:40,390 Og igen, hashtag refererer til vores ID og prikken henviser til vores klasse. 350 00:15:40,390 --> 00:15:44,760 >> Og så for .info, vi kan også indstille nogle attributter. 351 00:15:44,760 --> 00:15:49,750 Og igen, når vi går tilbage, havde vi vores klasse kaldet info og vores ID-titel. 352 00:15:49,750 --> 00:15:53,422 Og vi kan se, at vi henviser til dem af #title og .info. 353 00:15:53,422 --> 00:15:55,380 PUBLIKUM: Ville du sige hashtag [? vedtage mig? ?] 354 00:15:55,380 --> 00:15:55,725 MARIA ZLATKOVA: Beklager? 355 00:15:55,725 --> 00:15:58,120 PUBLIKUM: Ville du sige hashtag [? vedtage mig? ?] 356 00:15:58,120 --> 00:16:01,400 MARIA ZLATKOVA: Hashtag betyder id, så #title 357 00:16:01,400 --> 00:16:07,890 refererer til uanset elementer har denne ID kaldes titel. 358 00:16:07,890 --> 00:16:10,735 Og derefter dot henviser til en klasse. 359 00:16:10,735 --> 00:16:14,590 Så .info refererer til dette element fordi det har klassen info. 360 00:16:14,590 --> 00:16:15,090 Jep. 361 00:16:15,090 --> 00:16:17,905 >> PUBLIKUM: Hvorfor har du adskille dem i HTML? 362 00:16:17,905 --> 00:16:20,985 Hvorfor siger du visse ting er Id'er og visse ting er klasse? 363 00:16:20,985 --> 00:16:22,610 MARIA ZLATKOVA: Det er bare op til du-- 364 00:16:22,610 --> 00:16:24,151 HANNAH BLUMBERG: Gentag spørgsmålet. 365 00:16:24,151 --> 00:16:25,370 MARIA ZLATKOVA: Åh, undskyld. 366 00:16:25,370 --> 00:16:29,480 Hvorfor har vi skelner visse elementer som id'er og andre elementer som klasser? 367 00:16:29,480 --> 00:16:34,760 Det er bare fordi det er virkelig ofte designvalg. 368 00:16:34,760 --> 00:16:38,520 Det giver dig en masse alsidighed i at være 369 00:16:38,520 --> 00:16:43,250 i stand til at sige, at jeg ønsker, at dette specifikke emne at få denne ID, fordi de ønsker 370 00:16:43,250 --> 00:16:45,300 til at gøre en masse ting med det, og jeg kun 371 00:16:45,300 --> 00:16:50,010 ønsker at definere en stil, bestemt stil eller farve hvad for denne post. 372 00:16:50,010 --> 00:16:52,630 Og den måde at gøre det er bare at give det et id. 373 00:16:52,630 --> 00:16:55,060 >> Og så hvis jeg vil have et par forskellige elementer 374 00:16:55,060 --> 00:16:58,940 der, at i stedet for går og indstilling their-- 375 00:16:58,940 --> 00:17:03,840 stedet for at gøre det ved tag da tag ville 376 00:17:03,840 --> 00:17:07,369 indstille cellen for hele tag for hver gang anvendes som tag, 377 00:17:07,369 --> 00:17:09,740 du kan indstille en klasse til flere elementer. 378 00:17:09,740 --> 00:17:15,109 Og så bare få adgang til denne klasse og sige Jeg ønsker at style denne klasse på den måde. 379 00:17:15,109 --> 00:17:17,579 >> Og igen, kan klassen være flere forskellige elementer 380 00:17:17,579 --> 00:17:21,150 og ID skal være unikt. 381 00:17:21,150 --> 00:17:21,849 Store spørgsmål. 382 00:17:21,849 --> 00:17:25,339 Andre spørgsmål? 383 00:17:25,339 --> 00:17:26,220 OK, awesome. 384 00:17:26,220 --> 00:17:30,680 385 00:17:30,680 --> 00:17:35,330 Igen, dette er, hvordan disse selektorer der henvises til i CSS, med hashtag, 386 00:17:35,330 --> 00:17:40,031 med prik, eller uden noget for tildele den stil af nogle tag, 387 00:17:40,031 --> 00:17:40,530 legeme. 388 00:17:40,530 --> 00:17:43,500 389 00:17:43,500 --> 00:17:47,860 Og her har vi den generelle syntaks, hvordan dette gøres. 390 00:17:47,860 --> 00:17:52,830 391 00:17:52,830 --> 00:17:55,680 >> For at gentage nogle bedste praksis for HTML og CSS, 392 00:17:55,680 --> 00:17:59,170 er vi nødt til, igen, lukke alle HTML-tags, som vi kan åbnes. 393 00:17:59,170 --> 00:18:03,950 Og hvad vi anbefalede dig gøre for din endelige projekter, 394 00:18:03,950 --> 00:18:10,560 samt for CS50 Finance, er at gøre sikker på, at alle dine HTML validerer. 395 00:18:10,560 --> 00:18:12,920 Og det er gjort med W3 Validator. 396 00:18:12,920 --> 00:18:16,940 >> Og så, hvad vi gjorde, og hvad vi anbefale at gøre 397 00:18:16,940 --> 00:18:19,790 er adskillelse stil, så CSS fra markup HTML. 398 00:18:19,790 --> 00:18:24,210 Så alt, hvad der vedrører, hvordan din side kommer til at visuelt se 399 00:18:24,210 --> 00:18:27,330 og hvordan det kommer til at blive ændret bør gå ind i en CSS dokument. 400 00:18:27,330 --> 00:18:33,880 Og så din markup at sige, hvordan tingene er i forhold til hinanden, er HTML, 401 00:18:33,880 --> 00:18:37,550 og at skulle gå inde af dine HTML-dokumenter. 402 00:18:37,550 --> 00:18:38,590 Nogen spørgsmål? 403 00:18:38,590 --> 00:18:39,226 MHM. 404 00:18:39,226 --> 00:18:42,628 >> PUBLIKUM: Hvad foregår på med siden validering 405 00:18:42,628 --> 00:18:47,945 når vi validering af HTML at [uhørligt] skabt? 406 00:18:47,945 --> 00:18:49,850 >> MARIA ZLATKOVA: Så hvad-- tror dig. 407 00:18:49,850 --> 00:18:53,020 Så hvad der foregår på med side validering 408 00:18:53,020 --> 00:18:55,570 og hvorfor har vi brug for at gøre det? 409 00:18:55,570 --> 00:18:59,180 Dybest set, er vi nødt til at gøre det fordi en masse gange, din browser, 410 00:18:59,180 --> 00:19:01,390 hvis du ikke lukker et tag eller sådan noget, 411 00:19:01,390 --> 00:19:05,680 din browser er stadig vil gengive en side og kan stadig arbejde, 412 00:19:05,680 --> 00:19:10,840 men det er den bedste praksis for at sikre, at du har, igen, lukket alle dine tags, 413 00:19:10,840 --> 00:19:13,190 at alle dine elementer er den måde, at de burde være, 414 00:19:13,190 --> 00:19:18,470 og dybest set, at det er ved konventioner, der er forudindstillet. 415 00:19:18,470 --> 00:19:21,970 >> Det er, igen, bare en ting, du bør 416 00:19:21,970 --> 00:19:24,040 lære at gøre, i modsætning til at 417 00:19:24,040 --> 00:19:25,696 sloppier kode og den slags. 418 00:19:25,696 --> 00:19:26,688 Ja. 419 00:19:26,688 --> 00:19:27,680 Åh undskyld. 420 00:19:27,680 --> 00:19:29,221 Jeg troede, du var at hæve din hånd. 421 00:19:29,221 --> 00:19:31,240 PUBLIKUM: Nej, jeg var bare [uhørligt]. 422 00:19:31,240 --> 00:19:33,800 >> MARIA ZLATKOVA: OK. 423 00:19:33,800 --> 00:19:34,640 >> PUBLIKUM: Tak. 424 00:19:34,640 --> 00:19:36,181 >> MARIA ZLATKOVA: Selvfølgelig, tak. 425 00:19:36,181 --> 00:19:41,680 Så igen, foregår i, hvordan oplysninger overføres 426 00:19:41,680 --> 00:19:44,630 og kommunikationsmodeller til at overføre information. 427 00:19:44,630 --> 00:19:45,730 TCP / IP. 428 00:19:45,730 --> 00:19:48,600 TCP betyder blot, Transmission Control Protocol og IP 429 00:19:48,600 --> 00:19:51,260 refererer til Internet Protocol. 430 00:19:51,260 --> 00:19:54,275 Og der bare refererer til den måde data bliver leveret. 431 00:19:54,275 --> 00:19:59,470 432 00:19:59,470 --> 00:20:02,710 >> Hvis vi har nogle data, skal leveres til du-- så 433 00:20:02,710 --> 00:20:06,770 du laver en anmodning om en bestemt server. 434 00:20:06,770 --> 00:20:09,800 For eksempel når vi forsøger at få adgang cs50.net, 435 00:20:09,800 --> 00:20:12,420 Vi gør en anmodning til Den CS50 server og vi 436 00:20:12,420 --> 00:20:14,720 se, at vi ønsker at få denne form for oplysninger. 437 00:20:14,720 --> 00:20:19,294 Og så er baseret på denne protokol for, hvordan disse oplysninger er leveret, 438 00:20:19,294 --> 00:20:21,460 serveren giver oplysninger tilbage til os, kunden. 439 00:20:21,460 --> 00:20:25,590 Og så er vi i stand til at se oplysningerne for siden 440 00:20:25,590 --> 00:20:26,390 og derefter bruge det. 441 00:20:26,390 --> 00:20:29,300 442 00:20:29,300 --> 00:20:33,050 >> Så Hypertext Transfer Protocol er blot en anden protokol eller sæt 443 00:20:33,050 --> 00:20:37,470 af konventioner, der definerer, hvordan webbrowseren og webserveren 444 00:20:37,470 --> 00:20:38,890 skal kommunikere. 445 00:20:38,890 --> 00:20:43,730 Og lægge det alt sammen, HTTP, igen, 446 00:20:43,730 --> 00:20:50,960 bare definerer, hvordan denne hypertekst defineret af HTML, som vi har arbejdet det, 447 00:20:50,960 --> 00:20:59,500 hvordan det skal leveres til dig og hvordan at data, der er leveret til dig 448 00:20:59,500 --> 00:21:00,540 kommer til dig. 449 00:21:00,540 --> 00:21:05,990 >> Og det er derfor, hvis du fyre huske fra en klasse, vi havde en masse af anmodninger 450 00:21:05,990 --> 00:21:08,970 og vi havde en masse syntaks for disse anmodninger, vi er 451 00:21:08,970 --> 00:21:10,250 kommer til at gå over lige nu. 452 00:21:10,250 --> 00:21:13,270 Så igen, når vi sender en anmodning til en server, 453 00:21:13,270 --> 00:21:15,920 vi nødt til at definere et par ting. 454 00:21:15,920 --> 00:21:18,520 Så vi er nødt til at finde den type af anmodning om, at vi er indstillingen. 455 00:21:18,520 --> 00:21:22,180 Og igen, vi har, for eksempel, GET er en type af metode 456 00:21:22,180 --> 00:21:25,290 som vi har i vores anmodning. 457 00:21:25,290 --> 00:21:31,710 >> Og derefter HTTP / 1.1 er blot den protokol, som vi bruger i øjeblikket. 458 00:21:31,710 --> 00:21:34,224 459 00:21:34,224 --> 00:21:36,890 Det meste af tiden, der kommer til den protokol, som vi bruger. 460 00:21:36,890 --> 00:21:40,290 Så hvis du har et spørgsmål gerne, at på din quiz. 461 00:21:40,290 --> 00:21:43,120 Det er konventionerne at vi har indtil videre. 462 00:21:43,120 --> 00:21:46,580 >> Backslash refererer til hvad slags af ting, vi anmoder om. 463 00:21:46,580 --> 00:21:52,810 Derefter vores vært er for eksempel i denne tilfælde, vi forsøger at gå til google.com. 464 00:21:52,810 --> 00:21:57,070 Så dette er værdien for en vært. 465 00:21:57,070 --> 00:21:59,330 Dette er en type anmodning der kunne sendes. 466 00:21:59,330 --> 00:22:02,890 >> Og derefter en type respons, der kunne sendes, igen baseret på denne protokol, 467 00:22:02,890 --> 00:22:05,190 igen, HTTP / 1.1. 468 00:22:05,190 --> 00:22:07,150 Så det er HTTP-version igen. 469 00:22:07,150 --> 00:22:09,730 200 OK er bare status kode. 470 00:22:09,730 --> 00:22:12,860 Og det OK er bare en sætning baseret på denne status kode. 471 00:22:12,860 --> 00:22:15,520 >> Og så Content-Type refererer til typen 472 00:22:15,520 --> 00:22:20,295 der er returneret til dig, der er til denne webside, som du modtager 473 00:22:20,295 --> 00:22:22,570 og at din browser kan gøre bagefter. 474 00:22:22,570 --> 00:22:24,401 Og det er text / html. 475 00:22:24,401 --> 00:22:26,660 >> PUBLIKUM: Hvad betyder 1.1 betyde? 476 00:22:26,660 --> 00:22:29,910 >> MARIA ZLATKOVA: Det er bare den udgave of-- Åh, hvad betyder 1.1 betyde? 477 00:22:29,910 --> 00:22:37,075 Det er bare den version, HTTP version af en protokol, som vi bruger. 478 00:22:37,075 --> 00:22:37,700 Store spørgsmål. 479 00:22:37,700 --> 00:22:38,366 Andre spørgsmål? 480 00:22:38,366 --> 00:22:41,222 481 00:22:41,222 --> 00:22:45,080 >> PUBLIKUM: Kan du opsummere Content-Type virkelig hurtig? 482 00:22:45,080 --> 00:22:48,150 >> MARIA ZLATKOVA: Så det er det serveren. 483 00:22:48,150 --> 00:22:51,020 typen af ​​information-- hvad der er indholdstype var spørgsmålene. 484 00:22:51,020 --> 00:22:53,400 Så det var den type oplysninger, som du får tilbage 485 00:22:53,400 --> 00:22:58,200 fra serveren, typen af data, som browseren kan derefter 486 00:22:58,200 --> 00:23:00,604 gengive, at du bruger. 487 00:23:00,604 --> 00:23:03,020 PUBLIKUM: Er det, hvad dette protokol er at fortælle dig at gøre? 488 00:23:03,020 --> 00:23:03,390 MARIA ZLATKOVA: Beklager? 489 00:23:03,390 --> 00:23:05,380 PUBLIKUM: Er det, hvad protokollen sige? 490 00:23:05,380 --> 00:23:05,915 MARIA ZLATKOVA: Den protocol-- 491 00:23:05,915 --> 00:23:07,940 PUBLIKUM: --what den Content-Type er, eller hvad-- 492 00:23:07,940 --> 00:23:12,040 MARIA ZLATKOVA: Protokollen er baseret on-- hvad er den protokol fortæller dig? 493 00:23:12,040 --> 00:23:16,070 Det er bare den måde, at disse oplysninger 494 00:23:16,070 --> 00:23:18,610 blev leveret til dig baseret om, hvad slags protokol 495 00:23:18,610 --> 00:23:21,830 blev disse oplysninger fik leveret tilbage til dig. 496 00:23:21,830 --> 00:23:23,500 Giver det mening slags? 497 00:23:23,500 --> 00:23:28,320 498 00:23:28,320 --> 00:23:30,070 HANNAH BLUMBERG: Du kan tænke på protokol 499 00:23:30,070 --> 00:23:33,300 som en-- Jeg tror professor Malan beskrev det 500 00:23:33,300 --> 00:23:36,910 i klasse som lidt ligesom en-- det er ligesom svarende til human handshaking. 501 00:23:36,910 --> 00:23:44,930 Sige, ligesom, hey, jeg er en anmodning og jeg vide, hvordan man håndterer HTTP version 1.1. 502 00:23:44,930 --> 00:23:48,770 Og så serveren siger, Åh, OK, jeg-- og begge eksisterer. 503 00:23:48,770 --> 00:23:51,337 Jeg ved også, hvordan man skal håndtere HTTP / 1.1. 504 00:23:51,337 --> 00:23:53,170 Og jeg har tænkt mig at give du sikkerhedskopiere noget indhold. 505 00:23:53,170 --> 00:23:56,230 I dette tilfælde går det at være af typen text / html. 506 00:23:56,230 --> 00:23:58,480 Så det er lidt bare en måde af dem for communicating-- 507 00:23:58,480 --> 00:24:00,480 >> MARIA ZLATKOVA: Det er bare bekræfter, at du er 508 00:24:00,480 --> 00:24:03,290 både efter samme protokollen, og at både 509 00:24:03,290 --> 00:24:06,620 klienten og server-- så din browser og server-- 510 00:24:06,620 --> 00:24:09,280 slags ved, hvad du er taler om og har 511 00:24:09,280 --> 00:24:12,557 konventionen for at videregive i data. 512 00:24:12,557 --> 00:24:17,022 >> PUBLIKUM: Så Content-Type part-- Content-Type tekst / html-- der er 513 00:24:17,022 --> 00:24:18,521 en særskilt del af den samme meddelelse? 514 00:24:18,521 --> 00:24:20,509 Eller er det en del af lad os sige, 200? 515 00:24:20,509 --> 00:24:22,010 Er 200 fortælle dem, at eller is-- 516 00:24:22,010 --> 00:24:23,770 >> MARIA ZLATKOVA: 200 siger det hele gik OK. 517 00:24:23,770 --> 00:24:27,900 Og så indholdstype er en slags separat del af det samme budskab, 518 00:24:27,900 --> 00:24:34,274 og siger de ting, jeg Returneret har denne type af tekst / html. 519 00:24:34,274 --> 00:24:35,690 Det er bare at give flere oplysninger. 520 00:24:35,690 --> 00:24:38,700 521 00:24:38,700 --> 00:24:39,995 Har noget at tilføje? 522 00:24:39,995 --> 00:24:40,495 OKAY. 523 00:24:40,495 --> 00:24:43,590 524 00:24:43,590 --> 00:24:46,530 >> Andre spørgsmål om dette? 525 00:24:46,530 --> 00:24:48,370 Awesome. 526 00:24:48,370 --> 00:24:54,070 Så nogle andre HTTP-statusser, vi kunne få udover 200 OK, 527 00:24:54,070 --> 00:24:59,500 dem, vi har set måske eventuelt en masse er 403 og 404. 528 00:24:59,500 --> 00:25:05,190 Så 404, hvis du prøvede at adgang til noget, der ikke eksisterer. 529 00:25:05,190 --> 00:25:10,460 Så for eksempel i din CS50 Finance psets, 530 00:25:10,460 --> 00:25:15,640 hvis du havde været rendering quote.html og du ikke har denne fil, 531 00:25:15,640 --> 00:25:19,740 men i stedet du havde quote.php, at vil resultere i en 404 ikke fundet 532 00:25:19,740 --> 00:25:21,600 fordi filen måske ikke eksisterer. 533 00:25:21,600 --> 00:25:25,690 >> For en 403 forbudt, at henviser til tilladelser. 534 00:25:25,690 --> 00:25:31,150 Så hvis nogle fil kan ikke læses af verden, du kan få en 403 returneres. 535 00:25:31,150 --> 00:25:34,510 536 00:25:34,510 --> 00:25:37,810 Nogle andre, som du måske get-- 301 Flyttet permanent; 537 00:25:37,810 --> 00:25:41,300 302, Fundet; 304, modificeret; 400, Bad Request; 538 00:25:41,300 --> 00:25:47,330 og derefter Internal Server Error for 500 og 503, service ikke tilgængelig. 539 00:25:47,330 --> 00:25:48,140 Ja. 540 00:25:48,140 --> 00:25:51,490 >> PUBLIKUM: Vil vi forventes at huske alle de statusser? 541 00:25:51,490 --> 00:25:53,739 MARIA ZLATKOVA: Jeg ville have dem på din snyde ark. 542 00:25:53,739 --> 00:25:55,146 [LATTER] 543 00:25:55,146 --> 00:25:59,954 PUBLIKUM: Er vi forventes at vide, hvad der udløser hver enkelt? 544 00:25:59,954 --> 00:26:00,995 MARIA ZLATKOVA: Er de? 545 00:26:00,995 --> 00:26:03,870 HANNAH BLUMBERG: For dem, vi har køre into-- så spørgsmålet was-- 546 00:26:03,870 --> 00:26:08,010 MARIA ZLATKOVA: Er de forventes at ved, hvad hver enkelt af disse status 547 00:26:08,010 --> 00:26:09,330 koder kan udløses ved? 548 00:26:09,330 --> 00:26:13,240 Så for dem, vi har brugt og løb ind, vil jeg sige, ja. 549 00:26:13,240 --> 00:26:16,610 Så vi har absolut set 200 OK, og underviste det i psets. 550 00:26:16,610 --> 00:26:19,071 Vi har set 403, 404. 551 00:26:19,071 --> 00:26:20,550 For andre dem? 552 00:26:20,550 --> 00:26:22,690 >> HANNAH BLUMBERG: Jeg ville sige 500 synes fair spil. 553 00:26:22,690 --> 00:26:23,330 >> MARIA ZLATKOVA: 500, ja. 554 00:26:23,330 --> 00:26:24,246 >> HANNAH BLUMBERG: Ja. 555 00:26:24,246 --> 00:26:27,006 Bare have en generel følelse af hvad der forårsager dem. 556 00:26:27,006 --> 00:26:28,880 Og også lige som disse navne, kan du slags 557 00:26:28,880 --> 00:26:32,890 gerne gøre et kvalificeret gæt som til hvad der rent faktisk fik dem. 558 00:26:32,890 --> 00:26:36,919 For eksempel, flytte permanent, sandsynligvis filen blev flyttet permanent. 559 00:26:36,919 --> 00:26:39,328 >> PUBLIKUM: Men på en tidligere prøve, der var en så 560 00:26:39,328 --> 00:26:41,050 hvordan kan du forvente, at vi besvare dette? 561 00:26:41,050 --> 00:26:42,883 >> HANNAH BLUMBERG: At var værd nul point. 562 00:26:42,883 --> 00:26:45,870 Spørgsmålet om 418 på tepotten er teknisk en HTTP-status, 563 00:26:45,870 --> 00:26:47,090 men det var værd nul point. 564 00:26:47,090 --> 00:26:48,320 Selvfølgelig, du er ikke forventes at kende dem. 565 00:26:48,320 --> 00:26:49,670 >> PUBLIKUM: Er det en rigtig en? 566 00:26:49,670 --> 00:26:51,970 >> HANNAH BLUMBERG: Det er en reel en, men det betyder ikke noget. 567 00:26:51,970 --> 00:26:52,700 Det er bare en joke. 568 00:26:52,700 --> 00:26:55,480 569 00:26:55,480 --> 00:26:57,010 Internet mennesker er sjove. 570 00:26:57,010 --> 00:26:59,680 >> MARIA ZLATKOVA: Great spørgsmål, gutter. 571 00:26:59,680 --> 00:27:01,452 Andre spørgsmål? 572 00:27:01,452 --> 00:27:04,891 >> PUBLIKUM: Hvad er intern serverfejl? 573 00:27:04,891 --> 00:27:06,640 MARIA ZLATKOVA: Intern serverfejl bare 574 00:27:06,640 --> 00:27:10,050 betyder, at du har været stand til at kommunikere 575 00:27:10,050 --> 00:27:13,400 med serveren eller anden grund. 576 00:27:13,400 --> 00:27:15,400 Så det er ikke nødvendigvis noget, der har at gøre 577 00:27:15,400 --> 00:27:19,170 med kunden eller noget lignende. 578 00:27:19,170 --> 00:27:22,170 Jeg kender ikke nogen specifik eksempel at vi har gået over til at forklare, 579 00:27:22,170 --> 00:27:23,000 men ja. 580 00:27:23,000 --> 00:27:23,250 >> HANNAH BLUMBERG: Selvfølgelig. 581 00:27:23,250 --> 00:27:25,625 Så for eksempel, som lad os sige, at du arbejdede på mashup 582 00:27:25,625 --> 00:27:30,440 og en Google-server gik ned for nogle grund, en strømafbrydelse, lad os sige. 583 00:27:30,440 --> 00:27:33,400 Det ville være en intern server fejl eller en slags of-- lide dig 584 00:27:33,400 --> 00:27:34,630 ville ikke få et svar tilbage. 585 00:27:34,630 --> 00:27:35,260 >> MARIA ZLATKOVA: Ja. 586 00:27:35,260 --> 00:27:37,050 Det er bare, når du er stand til at kommunikere 587 00:27:37,050 --> 00:27:40,299 med serveren eller anden grund, fordi af det går ned eller anden grund. 588 00:27:40,299 --> 00:27:44,430 589 00:27:44,430 --> 00:27:47,690 Så hoppe ind PHP. 590 00:27:47,690 --> 00:27:49,930 PHP modsætning HTML, er en programmeringssprog. 591 00:27:49,930 --> 00:27:54,820 Og vi begyndte at bruge det, fordi det er meget nyttigt for webudvikling. 592 00:27:54,820 --> 00:27:56,940 >> Vi først brugt det i CS50 Finance. 593 00:27:56,940 --> 00:28:02,240 Og det dybest set hjælper os bringe sammen denne markup, design, 594 00:28:02,240 --> 00:28:07,460 og hvordan vi rent faktisk bruge oplysninger for at vise ting på en webside. 595 00:28:07,460 --> 00:28:11,870 Så PHP selv betyder PHP Hypertext Preprocessor, 596 00:28:11,870 --> 00:28:15,360 så det er en rekursiv backnorym af sig selv. 597 00:28:15,360 --> 00:28:22,330 Og åbne tags til PHP vi venstre og højre pile med spørgsmålstegn 598 00:28:22,330 --> 00:28:23,060 og php. 599 00:28:23,060 --> 00:28:25,890 >> Så vi har allerede set en masse af det. 600 00:28:25,890 --> 00:28:29,150 Nu er vi bare kommer til at gå over nogle af de grundlæggende ting om det. 601 00:28:29,150 --> 00:28:32,280 Så med PHP, variablen navne starter med dollartegn. 602 00:28:32,280 --> 00:28:35,660 Vi har ikke specificere, igen, en variabel skrive længere. 603 00:28:35,660 --> 00:28:38,450 Ligesom vi gjorde med C, vi behøver ikke at gøre det. 604 00:28:38,450 --> 00:28:41,670 605 00:28:41,670 --> 00:28:44,490 >> Vi kan gøre en masse forskellige ting med variabler. 606 00:28:44,490 --> 00:28:47,750 Vi kan sætte dem sammen ved at sammenkæde dem 607 00:28:47,750 --> 00:28:52,900 med dot notation, som vi ikke kunne gøre i C igen. 608 00:28:52,900 --> 00:28:57,490 Igen har vi en smule mere alsidighed med PHP i form af variable. 609 00:28:57,490 --> 00:29:00,080 Igen, har vi ikke en hovedfunktion. 610 00:29:00,080 --> 00:29:03,370 >> Og PHP fortolkes i modsætning til kompileret, 611 00:29:03,370 --> 00:29:09,970 Så bare hvordan vi gør for C-filer, vi behøver ikke at gøre det for PHP. 612 00:29:09,970 --> 00:29:15,440 Men snarere den måde, at sproget drives af sig selv, det er fortolket. 613 00:29:15,440 --> 00:29:18,550 Og så løst maskinskrevet betyder blot, at vi 614 00:29:18,550 --> 00:29:22,490 behøver ikke at angive en variabel type og de variable typer 615 00:29:22,490 --> 00:29:25,415 forstås ved runtime. 616 00:29:25,415 --> 00:29:29,185 >> PUBLIKUM: Men hvad gjorde du mener med dot sammenkædning? 617 00:29:29,185 --> 00:29:30,060 MARIA ZLATKOVA: Selvfølgelig. 618 00:29:30,060 --> 00:29:37,660 Når vi ønsker at sætte tingene together-- så hvis vi havde nogle variabel, 619 00:29:37,660 --> 00:29:41,500 havde værdi på 3, og vi havde en anden variabel, havde værdien af ​​strengen, 620 00:29:41,500 --> 00:29:45,920 vi kunne sætte de variabler sammen ved at sætte en prik i mellem dem 621 00:29:45,920 --> 00:29:46,970 og sammenkæde dem. 622 00:29:46,970 --> 00:29:52,670 Eller vi kunne skabe en variabel kaldet navn 623 00:29:52,670 --> 00:29:56,900 og sætte det sammen af sammenkæde to strenge. 624 00:29:56,900 --> 00:30:00,680 >> Så hvis vi havde en snor i dobbelt citater og vi sætter en prik efter det, 625 00:30:00,680 --> 00:30:03,660 og derefter havde vi en anden streng, at ville skabe en streng helt. 626 00:30:03,660 --> 00:30:05,242 >> PUBLIKUM: OK. 627 00:30:05,242 --> 00:30:06,450 MARIA Letland: Var det klart? 628 00:30:06,450 --> 00:30:07,099 Publikum: Ja. 629 00:30:07,099 --> 00:30:07,890 MARIA ZLATKOVA: OK. 630 00:30:07,890 --> 00:30:08,766 Ja. 631 00:30:08,766 --> 00:30:11,146 >> PUBLIKUM: Når du siger fortolket i stedet for kompileret, 632 00:30:11,146 --> 00:30:14,160 taler du om du ikke skal være så specifik, når 633 00:30:14,160 --> 00:30:15,906 det kommer til PHP versus C? 634 00:30:15,906 --> 00:30:18,085 635 00:30:18,085 --> 00:30:20,710 MARIA ZLATKOVA: Når vi siger fortolkes i modsætning til kompileret, 636 00:30:20,710 --> 00:30:21,850 hvad mener vi? 637 00:30:21,850 --> 00:30:26,220 Så det betyder, at vi ikke har brug for eksekverbare filer til at køre PHP. 638 00:30:26,220 --> 00:30:29,870 Det betyder, at det kører som det går. 639 00:30:29,870 --> 00:30:31,650 Giver det mening? 640 00:30:31,650 --> 00:30:32,495 Lidt mere. 641 00:30:32,495 --> 00:30:34,620 HANNAH BLUMBERG: Så du kan tænke på en tolk 642 00:30:34,620 --> 00:30:38,980 som et andet program, der er ansvarlig for at gå linje for linje gennem PHP 643 00:30:38,980 --> 00:30:42,745 og faktisk udfører den, i modsætning til at kompilere det hele ned til binær. 644 00:30:42,745 --> 00:30:46,050 Det er faktisk ikke noget om, hvordan specifikke vi skal være. 645 00:30:46,050 --> 00:30:49,470 Vi har stadig brug for at være præcis, og ikke glemmer din semikolon, og sørg for 646 00:30:49,470 --> 00:30:51,470 du har din dollartegn, og sådan noget. 647 00:30:51,470 --> 00:30:52,240 Godt spørgsmål. 648 00:30:52,240 --> 00:30:53,115 >> MARIA ZLATKOVA: Ja. 649 00:30:53,115 --> 00:30:55,590 Så linje for linje, som modsætning til med C filer, 650 00:30:55,590 --> 00:30:59,100 vi er nødt til at gøre hele endelige før vi rent faktisk kan køre den. 651 00:30:59,100 --> 00:31:00,360 Det er den vigtigste forskel. 652 00:31:00,360 --> 00:31:02,655 Men igen, kan vi ikke virkelig være mindre specifik. 653 00:31:02,655 --> 00:31:08,760 654 00:31:08,760 --> 00:31:13,950 Så arrays i PHP repræsenterer faktisk en ordnet kort. 655 00:31:13,950 --> 00:31:17,550 >> Så arrays associerede værdier til nøgler. 656 00:31:17,550 --> 00:31:23,350 De to måder at erklære en array, baseret på denne syntaks, 657 00:31:23,350 --> 00:31:26,380 vi kan være mere eksplicit i at sige vi har en matrix 658 00:31:26,380 --> 00:31:31,010 og vi har denne nøgle1 der er knyttet til denne værdi1, TAST2 der kortlægger value2. 659 00:31:31,010 --> 00:31:34,660 Eller vi kan bare oprette et array der indeholder de selv værdier 660 00:31:34,660 --> 00:31:38,360 og derefter tasterne er forstås på en måde. 661 00:31:38,360 --> 00:31:40,000 Eventuelle spørgsmål om dette? 662 00:31:40,000 --> 00:31:42,500 >> Publikum: hvad ville tasterne være i det andet eksempel? 663 00:31:42,500 --> 00:31:47,100 664 00:31:47,100 --> 00:31:47,920 0, 1, 2, 3? 665 00:31:47,920 --> 00:31:50,650 666 00:31:50,650 --> 00:31:55,780 >> MARIA ZLATKOVA: For eksempel, det er bare tasterne i dette ikke nødvendigvis 667 00:31:55,780 --> 00:31:56,550 gør en forskel. 668 00:31:56,550 --> 00:32:01,720 De definerer, hvor du kan bruge værdierne inde i den. 669 00:32:01,720 --> 00:32:08,660 Så hvis vi havde en foreach løkke i PHP, der ville 670 00:32:08,660 --> 00:32:14,760 tillade os at gå igennem alle de værdier, Vi kan gå igennem alle de værdier, 671 00:32:14,760 --> 00:32:19,570 selv hvis vi havde eller ikke havde defineret en bestemt nøgle inden webstedets 672 00:32:19,570 --> 00:32:20,820 forrige syntaks. 673 00:32:20,820 --> 00:32:23,460 >> Så selv med denne slags af array, kunne vi stadig 674 00:32:23,460 --> 00:32:26,260 har en foreach løkke der går gennem hver 675 00:32:26,260 --> 00:32:31,240 af værdierne i nøglen i array. 676 00:32:31,240 --> 00:32:36,180 Så syntaksen for en foreach loop, vi starter med et array. 677 00:32:36,180 --> 00:32:38,720 678 00:32:38,720 --> 00:32:43,900 Denne $ arr variabel er vores faktiske vifte at vi definerede i forrige dias 679 00:32:43,900 --> 00:32:47,550 som værdi, der bogstaveligt talt går gennem hver af de værdier, 680 00:32:47,550 --> 00:32:50,122 uanset om Vi havde en nøgle eller ej. 681 00:32:50,122 --> 00:32:53,080 Og så kan vi gøre noget med værdien indersiden af ​​foreach loop. 682 00:32:53,080 --> 00:32:57,730 Så igen, hvis vi havde en matrix ligesom dette her created-- 683 00:32:57,730 --> 00:33:03,270 så vi har nøglen til foo og værdien af bar, nøglen til baz og værdien af ​​qux-- 684 00:33:03,270 --> 00:33:09,730 vi kan få en foreach løkke, der går gennem array som nøgleværdi 685 00:33:09,730 --> 00:33:11,900 og derefter gøre noget med nøglen og / eller værdi. 686 00:33:11,900 --> 00:33:15,980 Men vi gør ikke nødvendigvis altid have en foreach sløjfer, 687 00:33:15,980 --> 00:33:19,410 går gennem array som centrale kortet for at værdi. 688 00:33:19,410 --> 00:33:26,060 Vi kan gå igennem foreach loop array som værdi. 689 00:33:26,060 --> 00:33:28,990 >> HANNAH BLUMBERG: Og jeg tror at-- var dit spørgsmål, hvad 690 00:33:28,990 --> 00:33:31,229 er den implicitte indeks? 691 00:33:31,229 --> 00:33:31,895 PUBLIKUM: Kinda. 692 00:33:31,895 --> 00:33:32,240 MARIA ZLATKOVA: Oh. 693 00:33:32,240 --> 00:33:33,406 HANNAH BLUMBERG: Ja, ja. 694 00:33:33,406 --> 00:33:36,150 Så dybest set, hvis du ikke angiver en nøgle, går det at være 01. 695 00:33:36,150 --> 00:33:37,140 >> MARIA ZLATKOVA: Ja. 696 00:33:37,140 --> 00:33:41,718 Ligesom med C, det er nul indekseret hvis du ikke angiver en nøgle. 697 00:33:41,718 --> 00:33:42,384 PUBLIKUM: Beklager. 698 00:33:42,384 --> 00:33:43,827 Kunne du forsøger at tale en lille smule højere? 699 00:33:43,827 --> 00:33:45,270 Jeg har en lille smule problemer med at høre alt. 700 00:33:45,270 --> 00:33:46,478 >> MARIA ZLATKOVA: Jeg er så ked af det. 701 00:33:46,478 --> 00:33:48,439 Ja selvfølgelig. 702 00:33:48,439 --> 00:33:50,230 Så vil du mig at gå over det igen? 703 00:33:50,230 --> 00:33:51,680 Eller er denne-- 704 00:33:51,680 --> 00:33:54,930 PUBLIKUM: Så på den forrige slide-- hvis kunne du bare gå tilbage i et sekund. 705 00:33:54,930 --> 00:33:57,313 MARIA ZLATKOVA: Selvfølgelig, undskyld. 706 00:33:57,313 --> 00:33:59,237 PUBLIKUM: Så den anden matrix her ikke 707 00:33:59,237 --> 00:34:04,135 synes at have en værdi for at indtaste, slags [? årsagssammenhæng. ?] 708 00:34:04,135 --> 00:34:05,343 MARIA ZLATKOVA: Right, højre. 709 00:34:05,343 --> 00:34:07,608 PUBLIKUM: Så hvordan gør dette arbejde når du siger, det er alle eller ingen. 710 00:34:07,608 --> 00:34:08,969 For mig, der ligner en [? foo?] allerede. 711 00:34:08,969 --> 00:34:10,093 >> MARIA ZLATKOVA: Ja, ja. 712 00:34:10,093 --> 00:34:12,969 Så igen, det er en bestilte kort i denne forstand 713 00:34:12,969 --> 00:34:15,639 at der er forstået, for eksempel indekserne 714 00:34:15,639 --> 00:34:20,159 her kan forstås som 0, 1, 2, 3. 715 00:34:20,159 --> 00:34:25,929 Igen, det er at have dem indekser er vores tilsvarende 716 00:34:25,929 --> 00:34:28,980 for at have nøgler kortlagt på værdier. 717 00:34:28,980 --> 00:34:34,710 Så hvis vores nøgle var 0-- ked af det. 718 00:34:34,710 --> 00:34:36,524 >> HANNAH BLUMBERG: Nej, der har kridt op her. 719 00:34:36,524 --> 00:34:36,929 Det er faktisk rigtig rart. 720 00:34:36,929 --> 00:34:37,460 >> MARIA ZLATKOVA: Det er godt. 721 00:34:37,460 --> 00:34:38,260 OKAY. 722 00:34:38,260 --> 00:34:49,489 Så igen, ville $ arr 0 være nøglen for værdien 1. 723 00:34:49,489 --> 00:34:51,138 0 ville være nøglen til værdien 1. 724 00:34:51,138 --> 00:34:51,971 PUBLIKUM: Jeg er ked af. 725 00:34:51,971 --> 00:34:53,190 Det er usynligt. 726 00:34:53,190 --> 00:34:53,659 >> HANNAH BLUMBERG: Okay, nevermind. 727 00:34:53,659 --> 00:34:54,980 Chalk var en dårlig idé. 728 00:34:54,980 --> 00:34:58,030 Jeg tager det tilbage. 729 00:34:58,030 --> 00:35:01,425 Du kan tænke på tasterne som 0 kort til værdien 1. 730 00:35:01,425 --> 00:35:02,300 MARIA ZLATKOVA: Ja. 731 00:35:02,300 --> 00:35:04,630 Så dette er 0, denne er 1, 2, 3. 732 00:35:04,630 --> 00:35:05,760 Disse kan være dine nøgler. 733 00:35:05,760 --> 00:35:10,020 Du kan tænke på dem as-- ja. 734 00:35:10,020 --> 00:35:12,740 Så i stedet for at have eksplicitte nøgler, de er 735 00:35:12,740 --> 00:35:17,180 slags forstås som værende indekserne starter ved 0. 736 00:35:17,180 --> 00:35:21,630 737 00:35:21,630 --> 00:35:24,820 Kridt hjalp ikke. 738 00:35:24,820 --> 00:35:25,722 Ja. 739 00:35:25,722 --> 00:35:30,914 >> PUBLIKUM: For foreach loop, hvis vi ønskede at se den som værdi, 740 00:35:30,914 --> 00:35:33,245 det ville bare automatisk indeks til 0? 741 00:35:33,245 --> 00:35:34,120 MARIA ZLATKOVA: Ja. 742 00:35:34,120 --> 00:35:35,745 Det ville gå igennem hver af værdierne. 743 00:35:35,745 --> 00:35:39,130 PUBLIKUM: [uhørligt] som 0 eller ville det bare gøre 0? 744 00:35:39,130 --> 00:35:43,710 >> MARIA ZLATKOVA: Du ville have at sige som dollartegn og derefter 745 00:35:43,710 --> 00:35:46,266 nogle variabelnavn, værdi. 746 00:35:46,266 --> 00:35:47,182 PUBLIKUM: [uhørligt]. 747 00:35:47,182 --> 00:35:50,048 748 00:35:50,048 --> 00:35:50,964 MARIA ZLATKOVA: Beklager? 749 00:35:50,964 --> 00:35:52,839 PUBLIKUM: Beklager, jeg er blot forsøger at huske. 750 00:35:52,839 --> 00:35:57,190 Hvordan ville du gøre det, hvis du kan gøre det automatisk indeksering er blot 0 af? 751 00:35:57,190 --> 00:36:00,780 >> MARIA ZLATKOVA: Så hvordan ville du gøre, at hvis du ikke har særlige vigtige navne? 752 00:36:00,780 --> 00:36:01,710 >> Publikum: Ja. 753 00:36:01,710 --> 00:36:07,820 >> MARIA ZLATKOVA: Du ville bare define-- bare sige dig selv som nogle navn. 754 00:36:07,820 --> 00:36:17,950 Så i dine psets, gutter måske Husk foreach $ række som $ rækker, 755 00:36:17,950 --> 00:36:24,610 vi skabt os selv denne $ rækken siger vi ønsker at gå gennem række som $ rækker. 756 00:36:24,610 --> 00:36:28,360 Selv om vi ikke har denne eksplicitte $ rækker defineret, 757 00:36:28,360 --> 00:36:31,990 vi kunne bare gå og sige dette kan være vores nøgle, 758 00:36:31,990 --> 00:36:33,615 og bare gå gennem hver af værdierne. 759 00:36:33,615 --> 00:36:37,295 760 00:36:37,295 --> 00:36:41,660 >> PUBLIKUM: Så er værdi en ny variabel Vi er ved at oprette til at gemme [uhørligt]? 761 00:36:41,660 --> 00:36:46,820 762 00:36:46,820 --> 00:36:49,990 >> MARIA ZLATKOVA: Så det er ikke sagens natur en ny variabel. 763 00:36:49,990 --> 00:37:00,310 Det er en variabel, der refererer til indersiden af ​​array til hver af dem. 764 00:37:00,310 --> 00:37:02,060 HANNAH BLUMBERG: Det er et nyt variabelnavn. 765 00:37:02,060 --> 00:37:04,018 MARIA ZLATKOVA: Ja, det er en ny variabel navn, 766 00:37:04,018 --> 00:37:06,680 men det er ikke inherently-- ja. 767 00:37:06,680 --> 00:37:08,950 Det er bare en ny variabel at du kan gøre det. 768 00:37:08,950 --> 00:37:12,680 Så bare hvordan gør vi gjorde $ ro som $ rækker, rækker 769 00:37:12,680 --> 00:37:17,980 var en ny variabelnavn, at vi kunne skabe i vores foreach løkke. 770 00:37:17,980 --> 00:37:22,065 Det behøver ikke at preexist før. 771 00:37:22,065 --> 00:37:25,777 >> PUBLIKUM: Kunne du går gennem logik for hver, ved hjælp af eksemplet er? 772 00:37:25,777 --> 00:37:26,610 MARIA ZLATKOVA: Mhm. 773 00:37:26,610 --> 00:37:31,240 774 00:37:31,240 --> 00:37:32,080 Åh undskyld. 775 00:37:32,080 --> 00:37:33,780 Her er eksemplet. 776 00:37:33,780 --> 00:37:34,280 Jo da. 777 00:37:34,280 --> 00:37:38,950 Så for hver array-- så det betyder at gå til dette array 778 00:37:38,950 --> 00:37:43,930 som nøglen value-- der kommer at gå gennem denne matrix 779 00:37:43,930 --> 00:37:49,480 og først gå og få foo, den nøglen foo og værdien bar. 780 00:37:49,480 --> 00:37:51,570 Og så på den anden iteration af for-løkken, 781 00:37:51,570 --> 00:37:55,090 det kommer til at gå igennem og tage nøglen baz og værdien QUX. 782 00:37:55,090 --> 00:38:00,512 Og så kan du gøre noget med en af ​​dem eller begge af dem. 783 00:38:00,512 --> 00:38:03,488 >> PUBLIKUM: Så ideen bag har et centralt punkt til værdien, 784 00:38:03,488 --> 00:38:07,470 hvad gør du ender adgang? 785 00:38:07,470 --> 00:38:10,680 >> MARIA ZLATKOVA: Hvad er ideen for at have en nøgle peger på værdi? 786 00:38:10,680 --> 00:38:16,400 Det er bare en anden konvention, en anden måde at gå gennem arrayet 787 00:38:16,400 --> 00:38:22,600 og at kunne få adgang enten nøgle eller værdi eller begge og bruge dem. 788 00:38:22,600 --> 00:38:27,100 >> PUBLIKUM: Hvad er den rolle for orden, at foreach kører i? 789 00:38:27,100 --> 00:38:29,250 Så hvis vi skulle tilføje elementer til arrayet senere, 790 00:38:29,250 --> 00:38:32,140 ville de være de første kaldes i foreach array, 791 00:38:32,140 --> 00:38:33,750 eller ville det være senere? 792 00:38:33,750 --> 00:38:37,770 >> MARIA ZLATKOVA: Så hvad er den rækkefølge, de foreach 793 00:38:37,770 --> 00:38:39,210 loop går gennem et array i? 794 00:38:39,210 --> 00:38:42,220 Det går gennem den første element til sidste element, 795 00:38:42,220 --> 00:38:43,400 til det sidste tilføjede element. 796 00:38:43,400 --> 00:38:48,020 Hvis du tilføjer elementer senere, de ville være accessed-- de første elementer ville 797 00:38:48,020 --> 00:38:51,410 tilgås som den første elementer i arrayet, 798 00:38:51,410 --> 00:38:57,620 og så ville du gå gennem hver af de elementer som en slags en ordered-- 799 00:38:57,620 --> 00:39:02,930 ikke en ordnet, men den måde, de er sat ind i array. 800 00:39:02,930 --> 00:39:06,855 >> PUBLIKUM: Så nye elementer tilføjes senere? 801 00:39:06,855 --> 00:39:10,680 Så de er added-- de vil være det sidste dem i [? iteration. ?] 802 00:39:10,680 --> 00:39:14,280 >> MARIA ZLATKOVA: Nye elementer can-- dybest set, når nye elementer tilføjes, 803 00:39:14,280 --> 00:39:16,520 føjes de til slutningen af ​​array? 804 00:39:16,520 --> 00:39:17,632 >> Publikum: Ja. 805 00:39:17,632 --> 00:39:18,840 MARIA ZLATKOVA: Jeg tror det. 806 00:39:18,840 --> 00:39:20,850 Ja. 807 00:39:20,850 --> 00:39:24,330 Og derefter med din foreach loop, efter at du har tilføjet nye elementer 808 00:39:24,330 --> 00:39:26,790 og du går igennem dem, de nye elementer ville 809 00:39:26,790 --> 00:39:30,930 være accessed-- det nye element, hvis det er tilsat sidst, ville det tilgås sidst. 810 00:39:30,930 --> 00:39:34,416 >> PUBLIKUM: Kan du bare give et eksempel af noget, der ville [uhørligt] 811 00:39:34,416 --> 00:39:37,404 med noget med værdi ligesom [uhørligt] eller værdi, 812 00:39:37,404 --> 00:39:38,910 ligesom hvordan du ville formaterer det? 813 00:39:38,910 --> 00:39:39,785 >> MARIA ZLATKOVA: Selvfølgelig. 814 00:39:39,785 --> 00:39:42,340 815 00:39:42,340 --> 00:39:46,410 Kan jeg give et eksempel på, hvad vi ville gøre med værdien? 816 00:39:46,410 --> 00:39:52,440 Så hvad du fyre kunne være bekendt med er, at vi har været igennem et array 817 00:39:52,440 --> 00:39:55,380 og dybest set trykt hvert af elementerne, 818 00:39:55,380 --> 00:40:00,910 for eksempel som en del af en ordnet liste eller noget, der. 819 00:40:00,910 --> 00:40:02,674 Giver det mening eller ønsker vi at-- 820 00:40:02,674 --> 00:40:04,340 PUBLIKUM: Kan vi udskrive disse værdier ud? 821 00:40:04,340 --> 00:40:13,220 MARIA ZLATKOVA: Ja, vi kunne udskrive og derefter dybest set $ værdi, fordi ved 822 00:40:13,220 --> 00:40:16,570 den specifikke værdi, ville vi være trykning værdien inde i den. 823 00:40:16,570 --> 00:40:20,150 Så hvis vi var på vores første iteration af det, og vi trykt $ værdi, 824 00:40:20,150 --> 00:40:23,775 vi ville udskrive bar. 825 00:40:23,775 --> 00:40:27,020 >> PUBLIKUM: Er der også for sløjfer i PHP eller bare foreach sløjfer? 826 00:40:27,020 --> 00:40:30,430 >> MARIA ZLATKOVA: Der er også efter sløjfer i PHP. 827 00:40:30,430 --> 00:40:33,399 Og deres logik er for det meste den samme som det, du har været vant til. 828 00:40:33,399 --> 00:40:34,690 PUBLIKUM: Så dens værdi er nul. 829 00:40:34,690 --> 00:40:35,090 MARIA ZLATKOVA: Det er ligesom det samme. 830 00:40:35,090 --> 00:40:35,590 Ja. 831 00:40:35,590 --> 00:40:37,747 PUBLIKUM: jeg bare at spørge. 832 00:40:37,747 --> 00:40:39,695 Så når du erklærer en array, behøver du ikke 833 00:40:39,695 --> 00:40:42,617 at fortælle, hvad størrelse det vil være, hvilket betyder, at du kan bare 834 00:40:42,617 --> 00:40:44,417 tilføje og fjerne elementer [uhørligt]. 835 00:40:44,417 --> 00:40:45,250 MARIA ZLATKOVA: Yup. 836 00:40:45,250 --> 00:40:45,750 Jep. 837 00:40:45,750 --> 00:40:46,251 Nøjagtig. 838 00:40:46,251 --> 00:40:48,875 Når vi erklære et array, vi behøver ikke at sige, hvad størrelse er, 839 00:40:48,875 --> 00:40:51,022 så vi kan bare tilføje elementer på det senere så godt. 840 00:40:51,022 --> 00:40:55,075 841 00:40:55,075 --> 00:40:55,700 Flere spørgsmål? 842 00:40:55,700 --> 00:40:59,870 843 00:40:59,870 --> 00:41:05,950 Så at bringe PHP og HTML sammen, hvad vi har seen-- godt, 844 00:41:05,950 --> 00:41:15,130 for eksempel i dette eksempel har vi en HTML-formular, der har et input felt. 845 00:41:15,130 --> 00:41:18,830 >> Og indtastningsfeltet er bare navn og så har en knappen Send. 846 00:41:18,830 --> 00:41:26,040 Og når du trykker på Indsend knappen, i vores hello.php fil, 847 00:41:26,040 --> 00:41:32,130 fordi metoden til formularen er får, kan vi få adgang til, hvad der er på navn 848 00:41:32,130 --> 00:41:40,360 af dette får global variabel, is-- syntaksen for det er $ _GET. 849 00:41:40,360 --> 00:41:44,520 Og så kan vi få adgang uanset brugerinput inde i denne form for navn 850 00:41:44,520 --> 00:41:47,410 ved at angive navnet på dette område. 851 00:41:47,410 --> 00:41:51,480 852 00:41:51,480 --> 00:41:55,060 >> Andre spørgsmål eller en hvilken som helst spørgsmål om dette specifikke eksempel? 853 00:41:55,060 --> 00:41:58,275 >> PUBLIKUM: Hvor er PHP? 854 00:41:58,275 --> 00:41:59,150 MARIA ZLATKOVA: Her. 855 00:41:59,150 --> 00:42:01,150 Så dette er vores åbning tag for PHP. 856 00:42:01,150 --> 00:42:01,530 >> PUBLIKUM: Åh, højre. 857 00:42:01,530 --> 00:42:02,363 >> MARIA ZLATKOVA: Ja. 858 00:42:02,363 --> 00:42:05,320 859 00:42:05,320 --> 00:42:09,609 >> HANNAH BLUMBERG:? Den = er stenografi til dette er PHP og blot ekko. 860 00:42:09,609 --> 00:42:10,150 PUBLIKUM: Oh. 861 00:42:10,150 --> 00:42:10,720 MARIA ZLATKOVA: Ja, undskyld. 862 00:42:10,720 --> 00:42:12,040 Jeg skulle have gjort det klart. 863 00:42:12,040 --> 00:42:13,759 >> HANNAH BLUMBERG: Udskriv. 864 00:42:13,759 --> 00:42:16,800 MARIA ZLATKOVA: Det er bare den funktion der giver os mulighed for at udskrive noget. 865 00:42:16,800 --> 00:42:19,795 866 00:42:19,795 --> 00:42:20,420 Store spørgsmål. 867 00:42:20,420 --> 00:42:24,140 868 00:42:24,140 --> 00:42:25,495 Så going-- ja. 869 00:42:25,495 --> 00:42:31,940 >> PUBLIKUM: Er der kommer til at være helt lidt af hånden kodning af PHP og HTML 870 00:42:31,940 --> 00:42:33,450 på quiz 1? 871 00:42:33,450 --> 00:42:36,310 872 00:42:36,310 --> 00:42:38,810 MARIA ZLATKOVA: Der kan være en rimelig mængde tolkning 873 00:42:38,810 --> 00:42:43,330 af PHP og HTML, ikke nødvendigvis ligesom en enorm mængde af kodning, 874 00:42:43,330 --> 00:42:46,960 selvom du måske nødt til at skrive en foreach loop, men en for-løkke. 875 00:42:46,960 --> 00:42:49,790 Enhver af de sløjfer, som vi dækker her er fair spil. 876 00:42:49,790 --> 00:42:51,889 Og det er for det meste det. 877 00:42:51,889 --> 00:42:53,430 HANNAH BLUMBERG: Jeg ville være forberedt. 878 00:42:53,430 --> 00:42:57,010 På samme måde, som spurgte vi dig til skrive en masse C-funktioner på quiz 0, 879 00:42:57,010 --> 00:42:59,766 Jeg ville være parat til at gøre det samme i PHP og JavaScript. 880 00:42:59,766 --> 00:43:00,640 MARIA ZLATKOVA: Ja. 881 00:43:00,640 --> 00:43:03,210 HANNAH BLUMBERG: Jeg vil sige en little-- ligesom vi ikke er 882 00:43:03,210 --> 00:43:06,251 vil gøre du skriver en enorm HTML side, bare fordi det er en lille smule 883 00:43:06,251 --> 00:43:08,240 kedelig, men du kan have dele. 884 00:43:08,240 --> 00:43:09,310 Det er helt fair spil. 885 00:43:09,310 --> 00:43:11,082 Ligesom lille HTML-side, helt fair. 886 00:43:11,082 --> 00:43:11,623 PUBLIKUM: OK. 887 00:43:11,623 --> 00:43:13,814 Hvad med i JavaScript så godt? 888 00:43:13,814 --> 00:43:14,730 HANNAH BLUMBERG: Ja. 889 00:43:14,730 --> 00:43:15,250 JavaScript er fair spil. 890 00:43:15,250 --> 00:43:15,635 >> MARIA ZLATKOVA: Ja. 891 00:43:15,635 --> 00:43:16,801 Det er helt fair spil. 892 00:43:16,801 --> 00:43:19,280 HANNAH BLUMBERG: Vi får som i ligesom 10 minutter. 893 00:43:19,280 --> 00:43:23,750 >> MARIA ZLATKOVA: SQL, igen, Struktureret forespørgselssprog. 894 00:43:23,750 --> 00:43:28,651 Det dybest set giver os mulighed for at styre data i en relationel database management 895 00:43:28,651 --> 00:43:29,150 system. 896 00:43:29,150 --> 00:43:31,149 Der bare dybest set betyder at vi har et sted 897 00:43:31,149 --> 00:43:37,980 at gemme nogle data, som vi måske ønsker at brug i en hjemmeside eller i en anden form. 898 00:43:37,980 --> 00:43:42,190 Og så har vi forespørgsler for at få oplysninger fra vores database, 899 00:43:42,190 --> 00:43:44,320 eller til at indsætte oplysningerne i dem. 900 00:43:44,320 --> 00:43:47,560 En masse af den fælles ones-- UPDATE, INSERT, SELECT, og SLET. 901 00:43:47,560 --> 00:43:50,790 >> Så for UPDATE, dette er syntaksen til opdatering af data i en database. 902 00:43:50,790 --> 00:43:53,330 903 00:43:53,330 --> 00:43:57,340 Opdatering denne tabel kaldet bord ved at sige SET, 904 00:43:57,340 --> 00:44:04,170 vi kan sætte nogle værdier i alle rækker til lige noget andet. 905 00:44:04,170 --> 00:44:09,410 Så kan vi også angive nogle specifikke poster, som vi ønsker at ændre 906 00:44:09,410 --> 00:44:11,240 og det kan være at bruge hvor. 907 00:44:11,240 --> 00:44:16,380 Og vi kan angive, at vi kun ønsker at ændre nogle rækker, hvor huset for, 908 00:44:16,380 --> 00:44:19,830 hvis vi havde en tabel af studerende og alle de studerende havde hus, 909 00:44:19,830 --> 00:44:24,890 så vi ville kun ændre nogle værdier hvor et hus er lig Currier, 910 00:44:24,890 --> 00:44:25,430 for eksempel. 911 00:44:25,430 --> 00:44:29,120 912 00:44:29,120 --> 00:44:31,800 >> For INSERT, kan vi indsætte visse værdier i en tabel. 913 00:44:31,800 --> 00:44:35,150 Så INSERT INTO tabel, og derefter værdierne, 914 00:44:35,150 --> 00:44:39,080 og derefter i parentes, vi angiver hvilke værdier du vil indsætte. 915 00:44:39,080 --> 00:44:43,220 Så INSERT INTO tabel, col1 og Col2 er værdien VAL1 og val2. 916 00:44:43,220 --> 00:44:48,930 Så dette indsætter dybest set en ny række i en tabel, der indeholder de værdier 1 og 2 917 00:44:48,930 --> 00:44:50,850 I kolonnerne 1 og 2. 918 00:44:50,850 --> 00:44:54,760 >> Og så vil vi gå over et hurtigt eksempel på, hvordan det ser ud 919 00:44:54,760 --> 00:44:56,310 ligesom i vores database en lille smule. 920 00:44:56,310 --> 00:44:58,685 Men denne sidste forespørgsel, som jeg tror vi kommer til at gå over, 921 00:44:58,685 --> 00:45:01,450 SELECT, det bare giver os at vælge data fra et bord 922 00:45:01,450 --> 00:45:03,080 eventuelt at bruge det bagefter. 923 00:45:03,080 --> 00:45:05,830 Og den måde, vi gør det er vi bare gemme det i nogle variabel. 924 00:45:05,830 --> 00:45:07,780 Og så kan vi overhovedet bruge det igen. 925 00:45:07,780 --> 00:45:10,260 >> Så SELECT stjerne betyder vælge alle. 926 00:45:10,260 --> 00:45:13,280 Det er bare en forkortelse Til at vælge alle. 927 00:45:13,280 --> 00:45:19,760 FROM tabel WHERE, ser vi for nogle særlige betingelser, 928 00:45:19,760 --> 00:45:22,290 så hvor kolonne lig noget, f.eks. 929 00:45:22,290 --> 00:45:24,410 Hvis vi bare ønskede at Vælg alle fra bordet, 930 00:45:24,410 --> 00:45:28,400 dette blot vælger alle kolonner og alle rækker fra en tabel. 931 00:45:28,400 --> 00:45:32,040 >> Og så DELETE FROM tabel HVOR col lig noget, 932 00:45:32,040 --> 00:45:36,440 dette blot sletter nogle række fra vores bord 933 00:45:36,440 --> 00:45:38,860 hvor vi har nogle særlige betingelser. 934 00:45:38,860 --> 00:45:41,870 I dette tilfælde, betingelserne er lig med søjle noget. 935 00:45:41,870 --> 00:45:43,460 Så bare en hurtig eksempel på dette. 936 00:45:43,460 --> 00:45:49,100 Hvis vi har denne tabel højre her, og vi indsætte det i en tabel, disse værdier, 937 00:45:49,100 --> 00:45:50,400 der ville indsætte en ny række. 938 00:45:50,400 --> 00:45:56,380 Og hvis vi havde auto-tilvækst, ville dette bare tilvækst vores id fra 0 til 1 for at 2. 939 00:45:56,380 --> 00:46:00,010 >> Hvis vi valgt alle fra studerende, det bare returnerer alle felter og alle rækker. 940 00:46:00,010 --> 00:46:02,430 Når året er større end eller lig med 2016 941 00:46:02,430 --> 00:46:04,390 det ville bare vende tilbage Hannah og mig selv. 942 00:46:04,390 --> 00:46:08,360 Og så hvis vi bare valgt år-id og år fra studerende 943 00:46:08,360 --> 00:46:11,710 hvor huset er Cabot House, at ville igen vende tilbage Hannah og mig selv. 944 00:46:11,710 --> 00:46:14,430 >> Så hvis vi slettet fra studerende hvor navn er lig med Rob, 945 00:46:14,430 --> 00:46:16,760 der ville slette hele rækken. 946 00:46:16,760 --> 00:46:19,696 Og derefter, hvis vi indstiller navn, UPDATE studerende 947 00:46:19,696 --> 00:46:21,570 SET navn lig med Daven HVOR hus er lig 948 00:46:21,570 --> 00:46:27,010 Cabot House, der kommer til at gå til disse rækker, og derefter opdatere navnet. 949 00:46:27,010 --> 00:46:31,470 >> Og derefter et par SQL datatyper er CHAR, VARCHAR, INT, og flyde. 950 00:46:31,470 --> 00:46:32,760 Disse er fair spil. 951 00:46:32,760 --> 00:46:36,740 Jeg vil gå igen og sørg for du kender 952 00:46:36,740 --> 00:46:40,930 og få dem på din bedrager ark, hvad hver af disse tegn 953 00:46:40,930 --> 00:46:44,140 er blevet anvendt til, hvad du brugte dem på dine psets, 954 00:46:44,140 --> 00:46:48,050 og sørg for du er fortrolig og komfortable med at skulle vælge 955 00:46:48,050 --> 00:46:51,450 fra forskellige datatyper i din pset. 956 00:46:51,450 --> 00:46:51,950 Ja. 957 00:46:51,950 --> 00:46:54,300 >> PUBLIKUM: Hvad var det bord opbevares? 958 00:46:54,300 --> 00:46:57,119 Ja, hvor er denne tabel opbevares? 959 00:46:57,119 --> 00:46:59,160 MARIA ZLATKOVA: Nå, lige nu, er det ikke gemt. 960 00:46:59,160 --> 00:47:00,700 Anyway, hvor denne tabel opbevares? 961 00:47:00,700 --> 00:47:04,503 Men den kan opbevares i en SQL-database. 962 00:47:04,503 --> 00:47:07,330 >> PUBLIKUM: Og hvor er SQL-database? 963 00:47:07,330 --> 00:47:11,200 I computeren, online et sted, serveren? 964 00:47:11,200 --> 00:47:15,000 >> MARIA ZLATKOVA: Det kan være en række forskellige ting. 965 00:47:15,000 --> 00:47:19,690 >> HANNAH BLUMBERG: Vi har interface med SQL-tabeller for det meste med phpMyAdmin. 966 00:47:19,690 --> 00:47:22,060 Så vi kunne bede en server at gemme dem for os. 967 00:47:22,060 --> 00:47:23,830 Vi kunne gemme dem på vores egen computer. 968 00:47:23,830 --> 00:47:27,950 >> MARIA ZLATKOVA: Det bare afhænger af hvordan du ønsker at gøre det for dig selv. 969 00:47:27,950 --> 00:47:30,075 Men vi har været opbevaring dem, som Hannah nævnt, 970 00:47:30,075 --> 00:47:31,755 på phpMyAdmin, som er online. 971 00:47:31,755 --> 00:47:36,550 972 00:47:36,550 --> 00:47:39,280 Og så den måde, vi bruger PHP og SQL, gemmer vi det 973 00:47:39,280 --> 00:47:43,450 ind i nogle variabel hvad vi har forespurgt om. 974 00:47:43,450 --> 00:47:48,370 >> Så hvis vi vælger alle fra historien hvor user_id lig med SESSION id, 975 00:47:48,370 --> 00:47:53,900 der ville vælge alle rækker for den specifikke person, der 976 00:47:53,900 --> 00:47:58,327 er logget på fra historien bord og sortere dem i rækker. 977 00:47:58,327 --> 00:48:00,410 En cool ting at vide er at CS50 forespørgsel funktion 978 00:48:00,410 --> 00:48:02,180 beskytter mod SQL injektion tags. 979 00:48:02,180 --> 00:48:07,420 Det betyder blot, at det gør sikker input, der er indtastet er korrekt 980 00:48:07,420 --> 00:48:09,920 og at den person, der kommer ind i input 981 00:48:09,920 --> 00:48:15,100 forsøger ikke at indtaste nogle ondsindede kode til enten droppe vores borde 982 00:48:15,100 --> 00:48:17,305 eller slette alt inde i vores database. 983 00:48:17,305 --> 00:48:20,060 984 00:48:20,060 --> 00:48:23,400 >> Et hurtigt overblik over den Model View Controller model 985 00:48:23,400 --> 00:48:27,360 det er bare en måde at organisere og tænker kode. 986 00:48:27,360 --> 00:48:29,100 Det er igen, et design paradigme. 987 00:48:29,100 --> 00:48:33,380 Det betyder, at vi can-- og det er god praksis 988 00:48:33,380 --> 00:48:37,790 at adskille forskellige dele af vores kode og hvad de 989 00:48:37,790 --> 00:48:40,530 kontrollere i disse tre paradigmer. 990 00:48:40,530 --> 00:48:46,700 >> Så vores opfattelse er oftest vores skabeloner, layoutet, den måde 991 00:48:46,700 --> 00:48:48,260 at vi indstille, hvordan vores kode ser. 992 00:48:48,260 --> 00:48:55,190 Det er for det meste vores CSS-filer og den måde at vi definerede udformningen af ​​vores kode, 993 00:48:55,190 --> 00:48:55,710 dybest set. 994 00:48:55,710 --> 00:48:59,280 Vores controller er for det meste, hvad vi har lavet med PHP-filer. 995 00:48:59,280 --> 00:49:03,030 Så igen, der arbejder med oplysninger, som vi har 996 00:49:03,030 --> 00:49:06,700 og definere, hvordan det oplysninger bruges, 997 00:49:06,700 --> 00:49:10,660 og derefter passerer disse oplysninger enten på visningen eller modellen. 998 00:49:10,660 --> 00:49:13,880 Og modellen, den måde, vi har brugt sige har været vores database, 999 00:49:13,880 --> 00:49:17,510 så hvor vores oplysninger er opbevares, så det har et sted 1000 00:49:17,510 --> 00:49:21,490 at leve i og en eller flere af kode, der vedrører den måde 1001 00:49:21,490 --> 00:49:25,410 at vi får disse oplysninger eller måde, at vi opdaterer disse oplysninger. 1002 00:49:25,410 --> 00:49:28,940 1003 00:49:28,940 --> 00:49:33,200 >> Så i MVC model, HTTP anmodninger sendes til en webserver. 1004 00:49:33,200 --> 00:49:36,220 Derefter controller fortolker anmodningen fra brugeren 1005 00:49:36,220 --> 00:49:38,260 og derefter validerer brugerinput. 1006 00:49:38,260 --> 00:49:41,580 Det er valgfrit, at vi har styreenheden kommunikerer 1007 00:49:41,580 --> 00:49:44,000 med en model, så noget ligesom vores database 1008 00:49:44,000 --> 00:49:47,500 eller en anden funktionalitet som sender oplysninger. 1009 00:49:47,500 --> 00:49:50,340 Og så endelig styreenheden videresender information på visningen 1010 00:49:50,340 --> 00:49:52,090 således at det kan være afsagt, og at det kan 1011 00:49:52,090 --> 00:49:55,860 bliver synlige for enhver person adgang til websiden. 1012 00:49:55,860 --> 00:49:58,440 1013 00:49:58,440 --> 00:50:01,340 >> Nogen spørgsmål? 1014 00:50:01,340 --> 00:50:01,840 Awesome. 1015 00:50:01,840 --> 00:50:04,530 1016 00:50:04,530 --> 00:50:08,469 Så igen, modellen, dens funktion igen, 1017 00:50:08,469 --> 00:50:11,260 er vedvarende lagring af information, styring og organisering af data. 1018 00:50:11,260 --> 00:50:13,890 Og det, vi har set så langt er MySQL-database 1019 00:50:13,890 --> 00:50:16,200 og eventuelle datafiler, der kan bruge. 1020 00:50:16,200 --> 00:50:20,580 >> Udsigt, præsentation af information til brugeren, UI, eller brugergrænsefladen. 1021 00:50:20,580 --> 00:50:22,350 Og eksempel på dette er HTML. 1022 00:50:22,350 --> 00:50:23,950 Og så måske vi har minimal PHP. 1023 00:50:23,950 --> 00:50:28,360 Så en for-løkke, der gentager overskrive data, som udskrives 1024 00:50:28,360 --> 00:50:30,720 er en del af den opfattelse, som modsætning til controlleren. 1025 00:50:30,720 --> 00:50:35,660 Og så en masse af vores PHP-filer falde i controlleren kategori. 1026 00:50:35,660 --> 00:50:38,410 Det bare håndterer brugerønsker og får oplysninger fra modellen. 1027 00:50:38,410 --> 00:50:42,880 1028 00:50:42,880 --> 00:50:45,590 >> Hoppe ind i dokumentet Object Model, det bare 1029 00:50:45,590 --> 00:50:47,700 refererer til den måde HTML dokumenter er organiseret. 1030 00:50:47,700 --> 00:50:51,600 Og de er organiseret i et træ struktur, der har et hierarki. 1031 00:50:51,600 --> 00:50:56,720 Så hvis vi har adgang til [uhørligt] repræsentation af dokumentet, 1032 00:50:56,720 --> 00:51:02,750 vi kan arbejde med dokumentet, ligesom vi manipulere objekter dybest set. 1033 00:51:02,750 --> 00:51:06,630 >> Og for at gøre dette til en lidt klarere, når 1034 00:51:06,630 --> 00:51:10,540 Vi har en masse af vores forskellige mærker svare 1035 00:51:10,540 --> 00:51:12,590 til forskellige ruter i vores træ. 1036 00:51:12,590 --> 00:51:17,070 Og så for dette eksempel, vi har udgangsdokument node. 1037 00:51:17,070 --> 00:51:20,010 Vi har, så vores HTML node der deler sig i hoved og krop. 1038 00:51:20,010 --> 00:51:22,810 Hovedet har titel og derefter titel indeholder hej, verden. 1039 00:51:22,810 --> 00:51:24,860 Og vores krop bare indeholder hej, verden. 1040 00:51:24,860 --> 00:51:28,700 1041 00:51:28,700 --> 00:51:31,900 >> Så spørgsmål om nogen af ​​de ting, som vi er dækket indtil nu? 1042 00:51:31,900 --> 00:51:35,891 Og hvis ikke, Hannah vil overtage med JavaScript. 1043 00:51:35,891 --> 00:51:36,390 Awesome. 1044 00:51:36,390 --> 00:51:37,473 >> HANNAH BLUMBERG: OK, cool. 1045 00:51:37,473 --> 00:51:40,980 Hvis noget kommer op med PHP eller HTML, eller nogen af ​​de ting Maria dækket, 1046 00:51:40,980 --> 00:51:42,700 Vi kan altid holde pause. 1047 00:51:42,700 --> 00:51:46,430 Vi laver bedre på igen, så awesome. 1048 00:51:46,430 --> 00:51:48,770 Og bare for at gå tilbage virkelig hurtigt til dette, 1049 00:51:48,770 --> 00:51:51,010 hvis man ser på hver forløbne års eksamen, dette 1050 00:51:51,010 --> 00:51:54,120 kommer op either-- her er nogle HTML, gør dette diagram. 1051 00:51:54,120 --> 00:51:58,380 Eller her er dette diagram, gøre nogle HTML, så definitivt praktisere det. 1052 00:51:58,380 --> 00:52:01,500 Og så er man garanteret spørgsmål, som du kan få ret. 1053 00:52:01,500 --> 00:52:02,000 Afkøle. 1054 00:52:02,000 --> 00:52:04,510 Så lad os tale om JavaScript og hvordan det er en lille smule 1055 00:52:04,510 --> 00:52:09,130 forskellig fra sprog som PHP og C, de to sprog, vi oplevede på forhånd. 1056 00:52:09,130 --> 00:52:10,780 Så nummer et, er det løst skrevet. 1057 00:52:10,780 --> 00:52:14,630 Det er ligesom PHP, men i modsætning til C. 1058 00:52:14,630 --> 00:52:15,890 >> Det er et fortolket sprog. 1059 00:52:15,890 --> 00:52:19,870 Igen, det er ligesom PHP modsætning C. Og det 1060 00:52:19,870 --> 00:52:24,630 kommer til at tillade os at use-- det fungerer rigtig fint med websider. 1061 00:52:24,630 --> 00:52:28,350 Det kommer til at give os mulighed for at manipulere indholdet og hvordan det ser ud 1062 00:52:28,350 --> 00:52:30,300 og hvad den gør. 1063 00:52:30,300 --> 00:52:32,330 >> Vi kommer til at se en lille smule af Ajax. 1064 00:52:32,330 --> 00:52:36,140 Det giver os mulighed for at kommunikere asynkront med forskellige servere 1065 00:52:36,140 --> 00:52:37,950 og få oplysninger. 1066 00:52:37,950 --> 00:52:42,820 Og det er det, der virkelig adskiller JavaScript fra PHP og C 1067 00:52:42,820 --> 00:52:45,590 at det er på klientsiden. 1068 00:52:45,590 --> 00:52:49,860 Både PHP og C er typisk server-side. 1069 00:52:49,860 --> 00:52:51,960 >> For det meste og næsten helt, hvad 1070 00:52:51,960 --> 00:52:53,900 vi har set, i hvert fald i denne klasse, JavaScript 1071 00:52:53,900 --> 00:52:57,040 virker på klientsiden, hvilket betyder at browseren er faktisk 1072 00:52:57,040 --> 00:52:58,597 ansvarlig for at kører det. 1073 00:52:58,597 --> 00:53:01,180 Og det betyder, at vi ikke nødt til at interagere med serveren. 1074 00:53:01,180 --> 00:53:04,380 Så det betyder, at det kan være meget hurtigere fordi det er faktisk blot det er Chrome, 1075 00:53:04,380 --> 00:53:10,420 det er Safari, det er Firefox, uanset hvad du bruger faktisk kører din JavaScript. 1076 00:53:10,420 --> 00:53:12,290 >> PUBLIKUM: Hvad betyder asynkron betyde? 1077 00:53:12,290 --> 00:53:13,620 >> HANNAH BLUMBERG: Ah, hvad betyder asynkront betyde? 1078 00:53:13,620 --> 00:53:14,250 Store spørgsmål. 1079 00:53:14,250 --> 00:53:17,890 Asynkront means-- godt, hvis indhold, hvor 1080 00:53:17,890 --> 00:53:22,140 vi bruger det, OK, vi opretter en webside 1081 00:53:22,140 --> 00:53:23,860 og vi har brug for at få nogle oplysninger. 1082 00:53:23,860 --> 00:53:28,250 Så med eksemplet med mashup, nogle oplysninger, som vi måske ønsker 1083 00:53:28,250 --> 00:53:30,580 er artiklen titler. 1084 00:53:30,580 --> 00:53:33,330 Nu could-- vi en mulighed er at gøre det synkront 1085 00:53:33,330 --> 00:53:37,940 og det betyder lad os stop, gå få artiklen, 1086 00:53:37,940 --> 00:53:41,275 får artiklen tilbage, og derefter gengive, men det ville være virkelig langsom. 1087 00:53:41,275 --> 00:53:44,150 Det ville være en dårlig brugeroplevelse fordi du ville bare sidde 1088 00:53:44,150 --> 00:53:46,630 der venter på noget at reagere. 1089 00:53:46,630 --> 00:53:50,020 >> Asynkront betyder, at vi får fortsætte med at gå om vores forretning, 1090 00:53:50,020 --> 00:53:52,529 rendering siden, og vi sender ud en anmodning 1091 00:53:52,529 --> 00:53:54,570 der er slags kommer til at ske i baggrunden. 1092 00:53:54,570 --> 00:53:57,610 Jeg tror, ​​vi bruger eksemplet i foredrag af at kalde Rob og sagde: 1093 00:53:57,610 --> 00:53:59,980 hey, kan du se dette op for mig og komme tilbage til mig, 1094 00:53:59,980 --> 00:54:02,870 i modsætning til bare mig venter på telefonen. 1095 00:54:02,870 --> 00:54:07,020 Så betyder asynkront det sker i baggrunden væk fra os 1096 00:54:07,020 --> 00:54:08,676 parallelt. 1097 00:54:08,676 --> 00:54:10,400 >> Store spørgsmål. 1098 00:54:10,400 --> 00:54:11,830 Ellers andet? 1099 00:54:11,830 --> 00:54:12,330 Alle tiders. 1100 00:54:12,330 --> 00:54:15,020 Vi vil springe meget mere ind asynkrone anmodninger med Ajax. 1101 00:54:15,020 --> 00:54:18,287 >> PUBLIKUM: Er JavaScript-- hvor gør det falde med model-view-controller? 1102 00:54:18,287 --> 00:54:19,620 HANNAH BLUMBERG: Great spørgsmål. 1103 00:54:19,620 --> 00:54:23,320 Hvor kommer JavaScript falder med model-view-controller? 1104 00:54:23,320 --> 00:54:23,930 Hm. 1105 00:54:23,930 --> 00:54:28,350 Jeg tror det kan fall-- så vi ikke normalt 1106 00:54:28,350 --> 00:54:31,340 gerne klemme det i at paradigme, men jeg tror jeg ville sige, 1107 00:54:31,340 --> 00:54:34,280 OK, så JavaScript faktisk vil tillade 1108 00:54:34,280 --> 00:54:37,587 os at indsamle data, fortolke data, rent faktisk gør 1109 00:54:37,587 --> 00:54:38,920 meningsfulde ting med dataene. 1110 00:54:38,920 --> 00:54:41,100 På den måde er det meget kontrol-lignende. 1111 00:54:41,100 --> 00:54:43,900 >> Men det er også kommer til at tillade os at vise ting og udskrive ting. 1112 00:54:43,900 --> 00:54:47,021 På den måde er det meget visning-lignende. 1113 00:54:47,021 --> 00:54:47,520 Ja. 1114 00:54:47,520 --> 00:54:51,710 Så det er lidt ligesom PHP i hvor det kan slags både være. 1115 00:54:51,710 --> 00:54:53,330 Godt spørgsmål. 1116 00:54:53,330 --> 00:54:55,209 Ellers andet? 1117 00:54:55,209 --> 00:54:56,000 Okay, awesome. 1118 00:54:56,000 --> 00:54:57,120 Flytning til højre ad. 1119 00:54:57,120 --> 00:54:59,110 >> Så lad os se et eksempel af, hvordan vi kan bruge 1120 00:54:59,110 --> 00:55:02,250 JavaScript i en af ​​vores web-programmer. 1121 00:55:02,250 --> 00:55:05,680 Så jeg vil overveje dette index.html med en masse HTML. 1122 00:55:05,680 --> 00:55:08,800 Og de ting jeg vil have dig fokusere på, er dette script-tag. 1123 00:55:08,800 --> 00:55:13,280 Og det siger, OK, jeg vil køre nogle JavaScript og her er, hvor det bor. 1124 00:55:13,280 --> 00:55:15,400 Den lever i hello.js. 1125 00:55:15,400 --> 00:55:21,120 >> Og meget gerne CSS, vi kunne sætte JavaScript inden for HTML. 1126 00:55:21,120 --> 00:55:24,000 Hvorfor kan vi ønsker at skille det ud? 1127 00:55:24,000 --> 00:55:24,500 Ja. 1128 00:55:24,500 --> 00:55:25,486 >> PUBLIKUM: Nemmere at omskrive? 1129 00:55:25,486 --> 00:55:26,402 >> HANNAH BLUMBERG: Ja. 1130 00:55:26,402 --> 00:55:28,450 Det er nemmere at bruge på tværs forskellige websider. 1131 00:55:28,450 --> 00:55:29,980 Det holder tingene renere. 1132 00:55:29,980 --> 00:55:32,090 Det er bare god praksis. 1133 00:55:32,090 --> 00:55:32,590 Awesome. 1134 00:55:32,590 --> 00:55:33,930 Godt svar. 1135 00:55:33,930 --> 00:55:36,690 Så godt, så det vil at være vores index.html. 1136 00:55:36,690 --> 00:55:39,430 Og derefter ned her er vores lillebitte JavaScript-fil. 1137 00:55:39,430 --> 00:55:42,410 >> Og alt det siger er opmærksom Hej, verden. 1138 00:55:42,410 --> 00:55:46,040 Så sker der det, når denne side renders-- 1139 00:55:46,040 --> 00:55:49,680 så hvis du går til uanset hjemmeside dette is-- alt der kommer til at ske 1140 00:55:49,680 --> 00:55:53,330 er det kommer til at sige, OK, jeg er kommer til at køre denne JavaScript-kode. 1141 00:55:53,330 --> 00:55:56,370 Og denne JavaScript-kode bare siger alarm Hej, verden. 1142 00:55:56,370 --> 00:55:59,090 Så jeg har tænkt mig at få denne venligt lille pop-up. 1143 00:55:59,090 --> 00:56:00,360 >> Afkøle? 1144 00:56:00,360 --> 00:56:04,746 Det er lidt ligesom vores allerførste JavaScript-program, vores Hej, verden. 1145 00:56:04,746 --> 00:56:07,690 1146 00:56:07,690 --> 00:56:12,190 Lad os se lidt mere om, hvad syntaksen for JavaScript ser ud. 1147 00:56:12,190 --> 00:56:16,330 Og specifikt, lad os sammenligne det med C og PHP, som vi har set før. 1148 00:56:16,330 --> 00:56:20,610 >> I JavaScript, vi kommer til at have Var, navnet på variablen, og derefter 1149 00:56:20,610 --> 00:56:21,690 dens faktiske værdi. 1150 00:56:21,690 --> 00:56:26,170 Og vi har ikke angiver en type, bare ligesom i PHP, men meget i modsætning til C. 1151 00:56:26,170 --> 00:56:28,850 Så for eksempel, hvis vi ønskede at lagre værdien 50, 1152 00:56:28,850 --> 00:56:32,490 i C, ville vi nødt til at sige, hey, C, jeg vil have et heltal, 1153 00:56:32,490 --> 00:56:35,076 Jeg har tænkt mig at kalde det i, og dens værdi er 50. 1154 00:56:35,076 --> 00:56:36,450 I PHP, det er en lille smule lettere. 1155 00:56:36,450 --> 00:56:41,880 Vi siger, hey, jeg vil have en variabel kaldes i og dens værdi er 50. 1156 00:56:41,880 --> 00:56:45,890 Meget på samme måde, i JavaScript, vi sige hey, jeg vil have en variabel kaldet i, 1157 00:56:45,890 --> 00:56:47,080 dens værdi er 50. 1158 00:56:47,080 --> 00:56:52,140 Hver efterfølgende gang, at jeg bruger i, behøver jeg ikke at skrive var. 1159 00:56:52,140 --> 00:56:53,810 Det er bare jeg fra dette punkt på. 1160 00:56:53,810 --> 00:56:58,660 På samme måde, i C, hvor når vi siger int i, vi bare bruge jeg. 1161 00:56:58,660 --> 00:57:00,340 Afkøle? 1162 00:57:00,340 --> 00:57:01,800 Okay. 1163 00:57:01,800 --> 00:57:03,710 >> Flytning til loops, heldigvis, disse næsten 1164 00:57:03,710 --> 00:57:06,720 se exactly-- Jeg tror, ​​de er nøjagtigt det samme som det 1165 00:57:06,720 --> 00:57:09,799 sløjfer kommer til at se ud i noget som C, hvor din for-løkke 1166 00:57:09,799 --> 00:57:11,840 vil have tre parts-- en initialisering, 1167 00:57:11,840 --> 00:57:13,640 en tilstand, og en opdatering. 1168 00:57:13,640 --> 00:57:15,340 En while-løkke, det ser nøjagtig den samme. 1169 00:57:15,340 --> 00:57:16,390 Vi har lige give det en betingelse. 1170 00:57:16,390 --> 00:57:18,264 >> Og en gør while-løkke, igen, nøjagtig det samme. 1171 00:57:18,264 --> 00:57:20,190 Vi giver det en betingelse. 1172 00:57:20,190 --> 00:57:24,510 Lad os sige, jeg ønskede at gentage over-- Jeg ønskede at gøre noget fem gange. 1173 00:57:24,510 --> 00:57:27,840 I C, kan vi skrive for init I lig 0. 1174 00:57:27,840 --> 00:57:30,480 i er mindre end 5, i ++. 1175 00:57:30,480 --> 00:57:34,240 Eneste forskel, i JavaScript, stedet for at sige int jeg er lig med 0, 1176 00:57:34,240 --> 00:57:36,820 vi sige var i er lig med 0. 1177 00:57:36,820 --> 00:57:38,370 Smuk. 1178 00:57:38,370 --> 00:57:41,320 Det er den eneste forskel. 1179 00:57:41,320 --> 00:57:43,200 Eventuelle spørgsmål om noget af det? 1180 00:57:43,200 --> 00:57:44,160 Ja. 1181 00:57:44,160 --> 00:57:48,480 >> PUBLIKUM: Så i PHP, det er det samme ting, undtagen men ligesom en variabel? 1182 00:57:48,480 --> 00:57:49,564 Eller var, at en var eksempel? 1183 00:57:49,564 --> 00:57:50,480 HANNAH BLUMBERG: Ja. 1184 00:57:50,480 --> 00:57:52,310 Så i PHP, går det at være et dollartegn. 1185 00:57:52,310 --> 00:57:59,450 Så det kommer til at $ i ligemænd 0, $ i er mindre end 5, $ i ++. 1186 00:57:59,450 --> 00:58:02,490 Store spørgsmål. 1187 00:58:02,490 --> 00:58:04,570 >> Lad os nu tale om funktion erklæringer. 1188 00:58:04,570 --> 00:58:07,010 I C, når vi erklæret en funktion, vi gav det et navn 1189 00:58:07,010 --> 00:58:08,490 og vi gav det nogle parametre. 1190 00:58:08,490 --> 00:58:10,670 Og i begyndelsen skrev vi typen. 1191 00:58:10,670 --> 00:58:12,440 I JavaScript, alt, hvad vi skal gøre er at skrive 1192 00:58:12,440 --> 00:58:15,080 nøgleordet funktion, siger, hey, JavaScript, 1193 00:58:15,080 --> 00:58:16,570 Jeg er ved at definere en funktion. 1194 00:58:16,570 --> 00:58:18,520 >> I dette tilfælde har det navn sum. 1195 00:58:18,520 --> 00:58:20,820 Og det tager to argumenter, x og y. 1196 00:58:20,820 --> 00:58:23,280 Bemærk, at vi er ligeglade om de typer af x og y. 1197 00:58:23,280 --> 00:58:26,280 Og ligesom C, har vi dette søgeord gengæld 1198 00:58:26,280 --> 00:58:29,140 så vi kan gøre noget ligesom tilbagevenden x og y. 1199 00:58:29,140 --> 00:58:32,540 >> Og nu når vi har skrevet denne første funktion, kan vi bruge summen overalt. 1200 00:58:32,540 --> 00:58:34,740 Og det er helt fint. 1201 00:58:34,740 --> 00:58:37,530 Én virkelig cool ting ved JavaScript, der er meget i modsætning til C 1202 00:58:37,530 --> 00:58:40,770 er, at funktioner kan blive behandlet som værdier. 1203 00:58:40,770 --> 00:58:43,895 Så vi kan gøre noget lignende her hvor jeg formoder, at jeg dække denne up-- 1204 00:58:43,895 --> 00:58:46,400 Jeg dækket op Var sum part-- og vi bare sagt 1205 00:58:46,400 --> 00:58:49,850 funktion xy lig tilbagevenden x plus y. 1206 00:58:49,850 --> 00:58:52,140 >> Det er, hvad der ville blive kaldt en anonym funktion. 1207 00:58:52,140 --> 00:58:53,920 Det er en funktion uden et navn. 1208 00:58:53,920 --> 00:58:56,290 Dette siger funktion sum, bla, bla, bla, 1209 00:58:56,290 --> 00:58:59,340 ville det bare sige funktion. 1210 00:58:59,340 --> 00:59:02,020 Men nu selvom jeg har denne anonyme funktion, 1211 00:59:02,020 --> 00:59:03,630 denne funktion er egentlig bare en værdi. 1212 00:59:03,630 --> 00:59:05,160 Vi kan behandle det som en værdi. 1213 00:59:05,160 --> 00:59:10,180 >> Så vi kan gemme det i en variabel på samme måde kunne vi gemme 50 i en variabel. 1214 00:59:10,180 --> 00:59:13,870 Så vi kan sige, OK, jeg vil have en variabel, kaldes det beløb, 1215 00:59:13,870 --> 00:59:16,011 og det er denne funktion. 1216 00:59:16,011 --> 00:59:18,760 Så disse to ting er faktisk kommer til at gøre præcis de samme ting, 1217 00:59:18,760 --> 00:59:21,576 men syntaksen er lidt anderledes og sådan en sjov bemærkning. 1218 00:59:21,576 --> 00:59:22,076 Ja. 1219 00:59:22,076 --> 00:59:25,548 >> PUBLIKUM: Så du kunne kalde en funktion, som var anonym ved at sige, 1220 00:59:25,548 --> 00:59:28,244 sum beslag 2, 5? 1221 00:59:28,244 --> 00:59:29,160 HANNAH BLUMBERG: Ja. 1222 00:59:29,160 --> 00:59:32,280 Du kan kalde denne anonym fungerer på samme måde. 1223 00:59:32,280 --> 00:59:33,350 Du ville gøre sum (2, 5) ;. 1224 00:59:33,350 --> 00:59:36,180 1225 00:59:36,180 --> 00:59:38,200 Det ville være helt fint. 1226 00:59:38,200 --> 00:59:41,575 >> Hvis jeg ikke gjorde var sum lig funktion, hvis jeg bare slettet 1227 00:59:41,575 --> 00:59:45,480 her-- Jeg ved, det er på min side, men lader som jeg slettede denne-- derefter 1228 00:59:45,480 --> 00:59:46,964 denne funktion er slags lige gået. 1229 00:59:46,964 --> 00:59:49,630 Du kan aldrig bruge den igen, fordi du ikke har et navn for det. 1230 00:59:49,630 --> 00:59:53,497 Det er svært at henvise til noget du ikke ved hvad de skal ringe til. 1231 00:59:53,497 --> 00:59:54,080 Godt spørgsmål. 1232 00:59:54,080 --> 00:59:54,580 Ja. 1233 00:59:54,580 --> 00:59:59,580 >> PUBLIKUM: Kan du henvise sum i andre steder med værdien af ​​x plus y? 1234 00:59:59,580 --> 01:00:01,940 >> HANNAH BLUMBERG: Kan du henvisning sum i andre steder 1235 01:00:01,940 --> 01:00:03,360 med værdien x plus y? 1236 01:00:03,360 --> 01:00:05,130 Jeg er ikke helt sikker på hvad du mener. 1237 01:00:05,130 --> 01:00:10,582 >> PUBLIKUM: Så din fortid semi-anonym funktion er sum er lig med dette 1238 01:00:10,582 --> 01:00:14,452 anonyme funktion, så summen er nu en variabel, som du can-- 1239 01:00:14,452 --> 01:00:15,410 HANNAH BLUMBERG: Right. 1240 01:00:15,410 --> 01:00:18,980 Så summen er variabel, men det er actually-- 1241 01:00:18,980 --> 01:00:23,770 så summen er en variabel, hvis værdi funktionen. 1242 01:00:23,770 --> 01:00:27,030 Så det er en funktion, som er form for en underlig ting at ombryde dit hoved omkring 1243 01:00:27,030 --> 01:00:29,880 da vi har leget med C og du kan ikke gøre det i C. 1244 01:00:29,880 --> 01:00:32,679 Men nu kan vi kalde opsummere samme måde, som vi kunne kalde summen her. 1245 01:00:32,679 --> 01:00:33,220 PUBLIKUM: OK. 1246 01:00:33,220 --> 01:00:33,970 HANNAH BLUMBERG: Ja. 1247 01:00:33,970 --> 01:00:34,553 Godt spørgsmål. 1248 01:00:34,553 --> 01:00:35,438 Ja. 1249 01:00:35,438 --> 01:00:39,862 >> PUBLIKUM: Så vi ikke bruge prototyper i PHP eller JavaScript? 1250 01:00:39,862 --> 01:00:42,070 HANNAH BLUMBERG: Nej, vi behøver ikke at bruge prototyper, 1251 01:00:42,070 --> 01:00:43,880 især i JavaScript. 1252 01:00:43,880 --> 01:00:49,380 Så en dårlig praksis ting, som jeg er vil sige, at du ikke skal gøre 1253 01:00:49,380 --> 01:00:52,620 er du ikke behøver at skrive var i = 50. 1254 01:00:52,620 --> 01:00:54,840 Du kunne bare begynde at gøre i = 50. 1255 01:00:54,840 --> 01:00:57,490 Og ville bare gøre jeg en global variabel. 1256 01:00:57,490 --> 01:01:00,550 >> Det er meget dårlig praksis at aldrig sige udtrykkeligt var i, 1257 01:01:00,550 --> 01:01:01,800 men det er noget du kan gøre. 1258 01:01:01,800 --> 01:01:03,591 Tolken er ikke kommer til at råbe på dig. 1259 01:01:03,591 --> 01:01:05,920 JavaScript er temmelig lignende, du kan gøre hvad du vil. 1260 01:01:05,920 --> 01:01:09,301 1261 01:01:09,301 --> 01:01:09,800 Åh undskyld. 1262 01:01:09,800 --> 01:01:10,300 Der er to. 1263 01:01:10,300 --> 01:01:12,150 I de orange bukser. 1264 01:01:12,150 --> 01:01:13,190 Fortsæt. 1265 01:01:13,190 --> 01:01:14,390 >> PUBLIKUM: Nej, du går først. 1266 01:01:14,390 --> 01:01:16,765 >> PUBLIKUM: Nej, jeg var bare at sige Jeg havde ikke min hånd op. 1267 01:01:16,765 --> 01:01:20,248 1268 01:01:20,248 --> 01:01:20,748 OKAY. 1269 01:01:20,748 --> 01:01:26,604 Så hvis du skulle ringe at første gang, nu opsummere, 1270 01:01:26,604 --> 01:01:29,864 vi kalder det på samme måde, x, y, ligesom hver eneste gang? 1271 01:01:29,864 --> 01:01:30,780 HANNAH BLUMBERG: Ja. 1272 01:01:30,780 --> 01:01:32,572 Så disse to væsentlige gøre det samme. 1273 01:01:32,572 --> 01:01:35,113 PUBLIKUM: Og hvad er fordelen at anvende en eller anden? 1274 01:01:35,113 --> 01:01:37,500 HANNAH BLUMBERG: Ingen fordel for at anvende den ene eller anden. 1275 01:01:37,500 --> 01:01:40,080 Jeg ville bare vise dig to forskellige stykker syntaks. 1276 01:01:40,080 --> 01:01:42,770 En masse gange, hvor anonym funktioner har et formål 1277 01:01:42,770 --> 01:01:48,220 er, hvis det argument til en anden funktionen skal være en funktion. 1278 01:01:48,220 --> 01:01:50,600 Og vi vil se, at i bare et sekund med Ajax. 1279 01:01:50,600 --> 01:01:53,577 >> Så hvis der ikke giver nogen mening, gemme det på bagsiden af ​​dit hoved. 1280 01:01:53,577 --> 01:01:55,660 Det er, hvor en anonym funktion kan være nyttig 1281 01:01:55,660 --> 01:01:58,284 fordi det ikke er virkelig værd give det et navn, da vi er bare 1282 01:01:58,284 --> 01:01:59,443 kommer til at bruge det en gang. 1283 01:01:59,443 --> 01:02:00,370 Ja. 1284 01:02:00,370 --> 01:02:03,635 >> PUBLIKUM: Hvis x og y forandring senere på, vil opsummere ændre så godt? 1285 01:02:03,635 --> 01:02:06,510 HANNAH BLUMBERG: Hvis x og y forandring senere, vil opsummere ændre så godt? 1286 01:02:06,510 --> 01:02:08,840 Så det er faktisk jeg tror noget, der er, 1287 01:02:08,840 --> 01:02:12,260 igen, det bare føles meget anderledes fra C. Dette er ikke en værdi. 1288 01:02:12,260 --> 01:02:13,620 Det er ikke 5. 1289 01:02:13,620 --> 01:02:15,550 Det er bare selve funktionen. 1290 01:02:15,550 --> 01:02:19,110 Så så snart du giver den parametre, så vil du faktisk beregne en værdi. 1291 01:02:19,110 --> 01:02:21,193 >> MARIA ZLATKOVA: Og så du kan kalde den funktion 1292 01:02:21,193 --> 01:02:23,272 og bruge det til at få en vis værdi. 1293 01:02:23,272 --> 01:02:24,230 HANNAH BLUMBERG: Right. 1294 01:02:24,230 --> 01:02:25,250 Nøjagtig. 1295 01:02:25,250 --> 01:02:25,863 Ja. 1296 01:02:25,863 --> 01:02:27,946 >> PUBLIKUM: Så hvis du bare gemme det i variablen, 1297 01:02:27,946 --> 01:02:31,430 ligesom Var x er lig summen af ​​to values-- 1298 01:02:31,430 --> 01:02:32,420 >> HANNAH BLUMBERG: Ja. 1299 01:02:32,420 --> 01:02:35,320 Så du kunne bare gøre var sum lig summen af ​​to værdier. 1300 01:02:35,320 --> 01:02:37,670 Ja. 1301 01:02:37,670 --> 01:02:38,680 Andre spørgsmål? 1302 01:02:38,680 --> 01:02:39,642 Ja. 1303 01:02:39,642 --> 01:02:42,047 >> PUBLIKUM: Men ville det forvirre sum og sum? 1304 01:02:42,047 --> 01:02:45,062 Ligesom hvis du ringer til din variabel sum, ville du kalder funktionen sum? 1305 01:02:45,062 --> 01:02:45,895 HANNAH BLUMBERG: Mm. 1306 01:02:45,895 --> 01:02:46,395 Mm. 1307 01:02:46,395 --> 01:02:51,253 Hvis du gjorde noget lignende, sum er lig summen 2, 5? 1308 01:02:51,253 --> 01:02:53,170 >> Publikum: Ja. 1309 01:02:53,170 --> 01:02:56,465 >> HANNAH BLUMBERG: Jeg tror, ​​at vil overskrive værdien af ​​summen. 1310 01:02:56,465 --> 01:02:59,290 Så en anden interessant ting om JavaScript 1311 01:02:59,290 --> 01:03:02,950 er, at en enkelt variabel kan tage på en masse forskellige typer. 1312 01:03:02,950 --> 01:03:03,790 Dårlig praksis. 1313 01:03:03,790 --> 01:03:06,280 Du bør ikke gøre noget gerne, hvad du lige sagde. 1314 01:03:06,280 --> 01:03:10,240 >> Men i C, hvis jeg er indstillet lig med et heltal, 1315 01:03:10,240 --> 01:03:13,570 vi ved, at det aldrig kommer til at blive en streng. 1316 01:03:13,570 --> 01:03:15,670 Dette er ikke tilfældet i JavaScript. 1317 01:03:15,670 --> 01:03:17,770 Ja, godt spørgsmål. 1318 01:03:17,770 --> 01:03:20,151 Ellers andet? 1319 01:03:20,151 --> 01:03:20,650 Okay. 1320 01:03:20,650 --> 01:03:21,850 Gør alle lige til tiden. 1321 01:03:21,850 --> 01:03:23,050 Holde gang. 1322 01:03:23,050 --> 01:03:25,200 Okay. 1323 01:03:25,200 --> 01:03:27,780 >> Hvis vi ser på et array i JavaScript, her er 1324 01:03:27,780 --> 01:03:30,250 en hurtig eksempel på et array af strenge. 1325 01:03:30,250 --> 01:03:31,967 Og arrays kan vokse dynamisk. 1326 01:03:31,967 --> 01:03:33,675 De har ikke en fast størrelse på samme måde 1327 01:03:33,675 --> 01:03:37,990 at de gør i C. Vi kan få adgang til elementer med bare de firkantede parenteser. 1328 01:03:37,990 --> 01:03:41,720 >> Det ser meget gerne PHP og en masse som C, hvor vi kan sige, i dette tilfælde, 1329 01:03:41,720 --> 01:03:48,360 hvis jeg ønskede ordet JavaScript, ville jeg gør arr kantede parenteser med et 0, 1, 2. 1330 01:03:48,360 --> 01:03:51,450 1331 01:03:51,450 --> 01:03:55,390 Og så hvis du kan huske i C, når vi ønskede at få længden af ​​et array, 1332 01:03:55,390 --> 01:03:56,820 det var virkelig irriterende. 1333 01:03:56,820 --> 01:03:58,460 Men i JavaScript, super nemt. 1334 01:03:58,460 --> 01:03:59,910 Alt vi gør, .length. 1335 01:03:59,910 --> 01:04:01,120 Giver det længderne. 1336 01:04:01,120 --> 01:04:01,892 Det er det. 1337 01:04:01,892 --> 01:04:03,140 >> PUBLIKUM: Det er simpelt. 1338 01:04:03,140 --> 01:04:05,306 >> HANNAH BLUMBERG: Ja, gør dit liv meget lettere. 1339 01:04:05,306 --> 01:04:08,950 1340 01:04:08,950 --> 01:04:11,560 OK, object-- der ikke. 1341 01:04:11,560 --> 01:04:15,480 Objekter i JavaScript-føler meget gerne structs i C 1342 01:04:15,480 --> 01:04:18,280 og associative arrays i PHP. 1343 01:04:18,280 --> 01:04:20,270 Så det, vi har set en masse er JSON, som 1344 01:04:20,270 --> 01:04:23,150 står for JavaScript Object Notation. 1345 01:04:23,150 --> 01:04:25,550 Og det er dybest set en måde at strukturere vores data. 1346 01:04:25,550 --> 01:04:27,880 >> Så lad os se et eksempel, formentlig den nemmeste. 1347 01:04:27,880 --> 01:04:32,540 Så her er et eksempel på et objekt der gemmer klassen, CS50. 1348 01:04:32,540 --> 01:04:37,790 Og når jeg siger klasse, mener jeg selvfølgelig, ikke like-- yeah, selvfølgelig CS50. 1349 01:04:37,790 --> 01:04:40,730 Og du vil se, at alt i objektet 1350 01:04:40,730 --> 01:04:43,526 vil være indeholdt i krøllede parenteser. 1351 01:04:43,526 --> 01:04:48,260 >> Og vi begynder at associere feltnavne eller nøgler med de forskellige værdier. 1352 01:04:48,260 --> 01:04:52,920 Så du kan begynde at se, hvordan denne form for føles som en associativ array i PHP. 1353 01:04:52,920 --> 01:04:57,450 Så vi kommer til at associere feltet eller nøglenavnet, naturligvis med strengen, 1354 01:04:57,450 --> 01:04:58,510 CS50. 1355 01:04:58,510 --> 01:04:59,940 >> Vi kommer til at have en instruktør. 1356 01:04:59,940 --> 01:05:00,940 Vi bliver nødt til TF'er. 1357 01:05:00,940 --> 01:05:05,240 Vi bliver nødt til antal psets og vi kommer til at have registreret. 1358 01:05:05,240 --> 01:05:10,720 Og en cool ting at bemærke er alle disse ting har forskellige typer, 1359 01:05:10,720 --> 01:05:12,020 og det er helt fint. 1360 01:05:12,020 --> 01:05:15,330 >> Det er fint for et objekt, i virkeligheden, Det er sandsynligvis forventes for et objekt 1361 01:05:15,330 --> 01:05:19,620 at have en kombination af strenge og tal og Booleans og arrays 1362 01:05:19,620 --> 01:05:23,420 og hvad du ellers måtte ønsker at have inde i dit objekt. 1363 01:05:23,420 --> 01:05:28,570 Og bemærk, at disse vil være navne eller tasterne, og så må vi bare 1364 01:05:28,570 --> 01:05:30,300 sætte den lig med lidt kolon. 1365 01:05:30,300 --> 01:05:32,015 >> PUBLIKUM: Hvad betyder JSON betyde? 1366 01:05:32,015 --> 01:05:33,890 HANNAH BLUMBERG: Hvad præcist gør JSON betyde? 1367 01:05:33,890 --> 01:05:36,470 JSON blot står for JavaScript Object Notation. 1368 01:05:36,470 --> 01:05:38,430 Det er bare en måde at formatering. 1369 01:05:38,430 --> 01:05:40,040 Ja. 1370 01:05:40,040 --> 01:05:41,800 Det er en måde at formatere vores data. 1371 01:05:41,800 --> 01:05:43,620 >> I C, er det structs. 1372 01:05:43,620 --> 01:05:45,800 I PHP er det associative arrays. 1373 01:05:45,800 --> 01:05:47,120 I JavaScript, har vi objekter. 1374 01:05:47,120 --> 01:05:48,969 >> PUBLIKUM: Så CS50 er et objekt? 1375 01:05:48,969 --> 01:05:51,010 HANNAH BLUMBERG: CS50 er objektet i dette tilfælde. 1376 01:05:51,010 --> 01:05:54,830 1377 01:05:54,830 --> 01:05:57,880 Nu, hvordan gør vi faktisk adgang disse områder eller ændre disse områder. 1378 01:05:57,880 --> 01:06:03,920 For eksempel antage, vi besluttede, at du ønskede en mindre pset dette semester. 1379 01:06:03,920 --> 01:06:06,300 I stedet for ni, vi er bare nødt til otte. 1380 01:06:06,300 --> 01:06:08,240 Hvordan ville vi ændre det? 1381 01:06:08,240 --> 01:06:09,436 >> Åh, forkerte vej. 1382 01:06:09,436 --> 01:06:11,060 Der er to måder, som vi kan gøre det. 1383 01:06:11,060 --> 01:06:13,490 Nummer et er med prik notation og nummer to 1384 01:06:13,490 --> 01:06:15,750 er med den firkantede beslag notation. 1385 01:06:15,750 --> 01:06:19,720 Så for eksempel, hvis jeg ønskede at ændre eller adgang 1386 01:06:19,720 --> 01:06:26,820 feltet psets i vores CS50 objekt, hvad jeg ville gøre, er CS50.psets, 1387 01:06:26,820 --> 01:06:30,770 så navnet på objektet dot navnet på marken eller tasten. 1388 01:06:30,770 --> 01:06:37,120 >> Meget på samme måde, det er præcis svarende til gøre CS50, og derefter 1389 01:06:37,120 --> 01:06:42,050 i firkantede parenteser, psets. 1390 01:06:42,050 --> 01:06:42,837 Afkøle? 1391 01:06:42,837 --> 01:06:44,298 Ja. 1392 01:06:44,298 --> 01:06:47,707 >> PUBLIKUM: Så er JSON Teknisk JavaScript stadig, 1393 01:06:47,707 --> 01:06:51,814 selv om der i de psets vi adskille det ud [uhørligt]? 1394 01:06:51,814 --> 01:06:52,730 HANNAH BLUMBERG: Selvfølgelig. 1395 01:06:52,730 --> 01:06:56,290 Så spørgsmålet er, er JavaScript og JSON tilsvarende? 1396 01:06:56,290 --> 01:07:00,750 Så JSON er notation, dybest set den måde, at vi skriver ud 1397 01:07:00,750 --> 01:07:02,700 et objekt fra JavaScript. 1398 01:07:02,700 --> 01:07:05,190 Så de er ikke helt det samme. 1399 01:07:05,190 --> 01:07:08,950 >> Jeg vil sige JavaScript, der er objekter i JavaScript. 1400 01:07:08,950 --> 01:07:12,590 JSON tager disse objekter og udskriver dem og viser dem 1401 01:07:12,590 --> 01:07:15,160 eller gemmer dem på en pæn måde. 1402 01:07:15,160 --> 01:07:18,110 Så JSON er ikke et programmeringssprog sprog den måde, at JavaScript er. 1403 01:07:18,110 --> 01:07:20,900 Det er bare den notation for vores objekter i JavaScript. 1404 01:07:20,900 --> 01:07:21,400 Ja. 1405 01:07:21,400 --> 01:07:24,144 >> PUBLIKUM: Så hvad der præcist [Uhørligt] fuldføre? 1406 01:07:24,144 --> 01:07:25,060 HANNAH BLUMBERG: Selvfølgelig. 1407 01:07:25,060 --> 01:07:27,727 Så dette faktisk gør ingenting. 1408 01:07:27,727 --> 01:07:28,935 Dette er blot en måde at få adgang. 1409 01:07:28,935 --> 01:07:31,393 Så lad os sige vi ønskede at ændre antallet af problematiske sæt 1410 01:07:31,393 --> 01:07:32,450 9-8. 1411 01:07:32,450 --> 01:07:34,383 Det, vi gør, er at gøre noget ligesom CS50.psets = 8 ;. 1412 01:07:34,383 --> 01:07:38,500 1413 01:07:38,500 --> 01:07:39,400 >> Ja, godt spørgsmål. 1414 01:07:39,400 --> 01:07:40,733 Dette er blot for at vise dig syntaks. 1415 01:07:40,733 --> 01:07:43,620 Ikke rent faktisk gør noget nyttigt. 1416 01:07:43,620 --> 01:07:46,085 Nogen spørgsmål? 1417 01:07:46,085 --> 01:07:48,210 Flytning til højre ad. 1418 01:07:48,210 --> 01:07:51,960 >> Så lad os se på et hurtigt eksempel på, hvordan JavaScript virker, fordi jeg fortalte dig det 1419 01:07:51,960 --> 01:07:55,170 gør alle disse seje ting og giver os mulighed for at ændre websider. 1420 01:07:55,170 --> 01:07:56,970 Lad os faktisk se det i aktion. 1421 01:07:56,970 --> 01:07:59,850 Så tag, for eksempel, HTML-fil. 1422 01:07:59,850 --> 01:08:04,350 >> Og de ting jeg vil have dig til at fokusere på, er denne særlige mærke, som er en knap, 1423 01:08:04,350 --> 01:08:06,182 med id search_button. 1424 01:08:06,182 --> 01:08:08,670 Det er bare på siden. 1425 01:08:08,670 --> 01:08:10,690 Så lad os nu se, hvad vi rent faktisk kan gøre. 1426 01:08:10,690 --> 01:08:12,560 >> Nå, formoder når du klikker på denne knap, 1427 01:08:12,560 --> 01:08:16,010 vi ønsker at gøre en alert-- du klikkede på knappen. 1428 01:08:16,010 --> 01:08:17,840 Lad os se, hvordan vi kan gøre det. 1429 01:08:17,840 --> 01:08:23,869 Så window.onload-- dette er ikke noget at du har set i klassen, derfor 1430 01:08:23,869 --> 01:08:26,180 behøver ikke at vide det for quizzen. 1431 01:08:26,180 --> 01:08:33,660 Men det dybest set siger, OK, opkald denne funktion, når vinduet belastninger. 1432 01:08:33,660 --> 01:08:35,080 >> Så det er bare lidt opsætning kode. 1433 01:08:35,080 --> 01:08:36,390 Må ikke bekymre dig så meget om det. 1434 01:08:36,390 --> 01:08:39,170 Hvad jeg vil have dig til at fokusere på, er i her. 1435 01:08:39,170 --> 01:08:44,020 Vi siger var searchButton lig document.getElementById search_button. 1436 01:08:44,020 --> 01:08:46,450 >> Så som du kan gætte, hvad det gør, er det siger, 1437 01:08:46,450 --> 01:08:50,920 OK, gå finde elementet med ID search_button. 1438 01:08:50,920 --> 01:08:52,790 Og nu har vi, at faktiske element, og jeg er 1439 01:08:52,790 --> 01:08:56,279 kommer til at gemme det i en variabel searchButton. 1440 01:08:56,279 --> 01:09:00,651 Og nu kan vi faktisk bruge dette element og ændre det, eller få adgang til dens værdier, 1441 01:09:00,651 --> 01:09:01,359 sådan noget. 1442 01:09:01,359 --> 01:09:04,649 Vi kan faktisk begynde at engagere sig med websiden. 1443 01:09:04,649 --> 01:09:10,330 >> Så her siger jeg, OK, nu hvor jeg har at knap, når der klikkes på, 1444 01:09:10,330 --> 01:09:12,859 kalder denne anonyme funktion. 1445 01:09:12,859 --> 01:09:16,811 Så det er her anonym funktioner blive nyttig. 1446 01:09:16,811 --> 01:09:18,060 Og hvad betyder den funktion at gøre? 1447 01:09:18,060 --> 01:09:20,529 Tja, det bare kalder dette alarm funktion, og det siger, 1448 01:09:20,529 --> 01:09:22,910 du har klikket på knappen Søg. 1449 01:09:22,910 --> 01:09:29,670 >> Så hvad vil der ske, hvis jeg går derhen, hvor denne HTML bor og jeg klikker på knappen, 1450 01:09:29,670 --> 01:09:33,729 Jeg får en fancy lille advarsel der siger, at du har klikket på knappen. 1451 01:09:33,729 --> 01:09:40,710 Så de ting at fokusere på her-- document.getElementById 1452 01:09:40,710 --> 01:09:44,960 får en bestemt HTML element med den givne ID. 1453 01:09:44,960 --> 01:09:48,529 Og nu kan vi sætte hvad der skal ske, når 1454 01:09:48,529 --> 01:09:50,702 at særlige element er klikket. 1455 01:09:50,702 --> 01:09:52,670 >> PUBLIKUM: Vi er nødt til at sætte alt dette i? 1456 01:09:52,670 --> 01:09:53,162 >> HANNAH BLUMBERG: Beklager? 1457 01:09:53,162 --> 01:09:55,130 >> PUBLIKUM: Har vi til fysisk kode alt dette? 1458 01:09:55,130 --> 01:09:56,340 >> HANNAH BLUMBERG: Har vi til fysisk kode alt dette? 1459 01:09:56,340 --> 01:09:56,839 Ja. 1460 01:09:56,839 --> 01:09:58,120 Er det ikke den slags irriterende? 1461 01:09:58,120 --> 01:10:00,032 Dette er en masse kode. 1462 01:10:00,032 --> 01:10:01,574 >> PUBLIKUM: Du kunne importere noget. 1463 01:10:01,574 --> 01:10:02,532 HANNAH BLUMBERG: Right. 1464 01:10:02,532 --> 01:10:03,610 Vi kunne bruge noget. 1465 01:10:03,610 --> 01:10:08,140 Og i particular-- åh, det er fortæller mig, jeg er nødt til at undervise i sektionen. 1466 01:10:08,140 --> 01:10:11,061 Især lad os bruge biblioteket jQuery, 1467 01:10:11,061 --> 01:10:13,060 fordi der var virkelig lang og virkelig irriterende 1468 01:10:13,060 --> 01:10:16,860 og jeg ønsker at være i stand til at forenkle det og gøre det kortere og lettere at skrive. 1469 01:10:16,860 --> 01:10:19,810 >> Så jQuery er en JavaScript-bibliotek. 1470 01:10:19,810 --> 01:10:24,930 Så JavaScript er programmering sprog; jQuery er et bibliotek. 1471 01:10:24,930 --> 01:10:27,190 Og det gør en masse ting lettere. 1472 01:10:27,190 --> 01:10:33,230 Det gør skiftende og går på tværs et HTML-dokument meget lettere. 1473 01:10:33,230 --> 01:10:35,030 >> Det gør håndtering lettere begivenheder. 1474 01:10:35,030 --> 01:10:37,580 Det gør animation nemmere og det gør Ajax lettere. 1475 01:10:37,580 --> 01:10:40,140 Så lad os springe ind i to af disse ting lige nu. 1476 01:10:40,140 --> 01:10:40,900 Undskyld mig. 1477 01:10:40,900 --> 01:10:42,620 Før vi gør det, nogle grundlæggende syntaks. 1478 01:10:42,620 --> 01:10:46,870 >> Dette er, hvad de fleste opkald til jQuery biblioteket se ud. 1479 01:10:46,870 --> 01:10:50,520 Vi bruger denne dollar sign-- ingen forbindelse tegn til PHP, 1480 01:10:50,520 --> 01:10:56,030 bare inconvenient-- navnet på en vælgeren, prik, og derefter en handling. 1481 01:10:56,030 --> 01:10:58,860 Så lad os se nogle konkrete eksempler på det. 1482 01:10:58,860 --> 01:11:02,980 >> Så det faktisk er den samme kode fra begivenheden slide. 1483 01:11:02,980 --> 01:11:08,740 Så denne lange, grimme ting bliver dette meget pænere, mindre ting. 1484 01:11:08,740 --> 01:11:10,370 Så lad os prøve at opdele det. 1485 01:11:10,370 --> 01:11:17,090 Det siger, OK, jQuery-- denne dollar sign-- jQuery, finde mig i vinduet. 1486 01:11:17,090 --> 01:11:18,480 Så det er vælgeren. 1487 01:11:18,480 --> 01:11:21,800 >> Når det indlæses, kalder denne funktion. 1488 01:11:21,800 --> 01:11:23,880 Så det er alt inde. 1489 01:11:23,880 --> 01:11:24,380 OKAY. 1490 01:11:24,380 --> 01:11:25,740 Så langt så godt? 1491 01:11:25,740 --> 01:11:26,750 Okay. 1492 01:11:26,750 --> 01:11:32,970 >> Nu jQuery, find mig ting med ID search_button. 1493 01:11:32,970 --> 01:11:36,090 Og hvad det er klikket, kalder denne funktion. 1494 01:11:36,090 --> 01:11:37,900 Og så er denne funktionens præcis det samme. 1495 01:11:37,900 --> 01:11:41,052 Bare gør en lille smule af indberetning, du har klikket på knappen Søg. 1496 01:11:41,052 --> 01:11:42,650 >> Så det er virkelig rart. 1497 01:11:42,650 --> 01:11:46,260 Det er virkelig kondenserer og forenkler vores kode. 1498 01:11:46,260 --> 01:11:49,030 Hvordan vidste jeg, at det er ID search_button 1499 01:11:49,030 --> 01:11:50,960 og ikke som klasse search_button? 1500 01:11:50,960 --> 01:11:52,024 >> PUBLIKUM: Hashtag? 1501 01:11:52,024 --> 01:11:52,940 HANNAH BLUMBERG: Ja. 1502 01:11:52,940 --> 01:11:56,450 Denne hash symbol, det er ligesom CSS. 1503 01:11:56,450 --> 01:12:00,080 Så husk, med CSS, når vi ønskede at vælge noget af ID, 1504 01:12:00,080 --> 01:12:01,590 vi brugte pundet tegn. 1505 01:12:01,590 --> 01:12:05,400 Og når vi ønskede at vælge noget ved klassen, bruger vi prik. 1506 01:12:05,400 --> 01:12:06,870 Alle tiders. 1507 01:12:06,870 --> 01:12:08,230 Give mening? 1508 01:12:08,230 --> 01:12:11,500 Så jQuery formodes at bare gøre vores liv lettere. 1509 01:12:11,500 --> 01:12:12,000 Ja. 1510 01:12:12,000 --> 01:12:15,660 >> PUBLIKUM: Så jeg er lidt forvirret som hvordan anonym funktionen fungerer. 1511 01:12:15,660 --> 01:12:19,027 Har du navngive denne anonymouse funktion, fungere? 1512 01:12:19,027 --> 01:12:20,594 Hvordan er det hedder? 1513 01:12:20,594 --> 01:12:21,510 HANNAH BLUMBERG: Selvfølgelig. 1514 01:12:21,510 --> 01:12:25,812 Så funktionen er bare et nøgleord, siger, jeg er ved at definere en funktion. 1515 01:12:25,812 --> 01:12:26,520 PUBLIKUM: Åh, OK. 1516 01:12:26,520 --> 01:12:27,353 HANNAH BLUMBERG: OK? 1517 01:12:27,353 --> 01:12:32,120 Og så har vi videregive det som en argument at-- lad os tage 1518 01:12:32,120 --> 01:12:37,040 denne indre en-- til klikfunktion. 1519 01:12:37,040 --> 01:12:39,420 Så yeah, så funktion, denne anonyme funktion, 1520 01:12:39,420 --> 01:12:40,910 bliver en faktisk argument. 1521 01:12:40,910 --> 01:12:43,632 Så husk i JavaScript, vi kan behandle funktioner som værdier. 1522 01:12:43,632 --> 01:12:44,340 PUBLIKUM: Åh, OK. 1523 01:12:44,340 --> 01:12:45,256 HANNAH BLUMBERG: Ja. 1524 01:12:45,256 --> 01:12:46,035 Jeg kan godt lide, at "åh." 1525 01:12:46,035 --> 01:12:47,490 Pæn. 1526 01:12:47,490 --> 01:12:49,915 Andre spørgsmål? 1527 01:12:49,915 --> 01:12:50,505 Tid? 1528 01:12:50,505 --> 01:12:51,380 MARIA ZLATKOVA: God. 1529 01:12:51,380 --> 01:12:52,760 God. 1530 01:12:52,760 --> 01:12:54,210 >> HANNAH BLUMBERG: Awesome. 1531 01:12:54,210 --> 01:12:55,720 Nogle hurtige nyttige jQuery. 1532 01:12:55,720 --> 01:12:57,559 Jeg har ikke tænkt mig at gå gennem alle disse. 1533 01:12:57,559 --> 01:12:59,350 Disse slides vil være op online en lille smule 1534 01:12:59,350 --> 01:13:02,040 senere, så du kan tjekke det ud lidt senere. 1535 01:13:02,040 --> 01:13:07,120 Men dybest set, den generelle mønster holder, hvor vi siger, 1536 01:13:07,120 --> 01:13:11,510 OK, hey, jQuery, her er min vælgeren og så her er en handling. 1537 01:13:11,510 --> 01:13:15,940 Og du kan gøre ting som adgang for værdien af ​​en formular, adgang til nogle HTML, 1538 01:13:15,940 --> 01:13:19,195 kontrol, hvad der sker, når brugeren sender en formular, ting som. 1539 01:13:19,195 --> 01:13:20,106 Ja. 1540 01:13:20,106 --> 01:13:22,090 >> PUBLIKUM: Så i eksamen, vi vil få brug for 1541 01:13:22,090 --> 01:13:25,066 at vide en hel del fra jQuery dokumentation. 1542 01:13:25,066 --> 01:13:31,018 Så da vi copy / paste jQuery dokumentation til vores bedrager ark, 1543 01:13:31,018 --> 01:13:32,506 Hvor er linje trukket? 1544 01:13:32,506 --> 01:13:33,957 Ligesom hvor mange har vi brug for at vide? 1545 01:13:33,957 --> 01:13:35,290 HANNAH BLUMBERG: Great spørgsmål. 1546 01:13:35,290 --> 01:13:37,765 Spørgsmålet er væsentlige eftersom man 1547 01:13:37,765 --> 01:13:41,330 kan ikke få adgang til jQuery dokumentation under prøven, hvor meget bør du 1548 01:13:41,330 --> 01:13:41,830 vide? 1549 01:13:41,830 --> 01:13:45,540 Vi ville ikke forvente dig til at komme op med nogle tilfældige funktion 1550 01:13:45,540 --> 01:13:47,240 at vi ville forvente dig til Google. 1551 01:13:47,240 --> 01:13:52,930 >> Ting, der er fair spil er jeg ville siger bare lidt af det generelle syntaks, 1552 01:13:52,930 --> 01:13:58,310 at være i stand til at vælge på ID og ved class-- så ligesom CSS. 1553 01:13:58,310 --> 01:14:01,876 Og så de faktiske funktioner dem selv, vil vi sandsynligvis fortælle dig. 1554 01:14:01,876 --> 01:14:02,376 Ja. 1555 01:14:02,376 --> 01:14:05,591 >> PUBLIKUM: Så når du vælger efter klasse ville betyde prik. 1556 01:14:05,591 --> 01:14:06,840 HANNAH BLUMBERG: Ja, præcis. 1557 01:14:06,840 --> 01:14:07,340 God. 1558 01:14:07,340 --> 01:14:10,461 Når du vælger efter klasse, går det skal dot i stedet for pund tegn. 1559 01:14:10,461 --> 01:14:10,960 Ja. 1560 01:14:10,960 --> 01:14:12,710 >> PUBLIKUM: Ville du gå over forskellen 1561 01:14:12,710 --> 01:14:14,310 mellem udvælgelsen af ​​ID og klasse? 1562 01:14:14,310 --> 01:14:14,560 >> HANNAH BLUMBERG: Selvfølgelig. 1563 01:14:14,560 --> 01:14:17,510 Forskellen mellem valg ID og vælge efter klasse. 1564 01:14:17,510 --> 01:14:20,685 Så som Maria sagde en lidt tidligere, er der 1565 01:14:20,685 --> 01:14:26,280 kan kun være én HTML-element med en given id, mens klassen, 1566 01:14:26,280 --> 01:14:29,740 det giver os mulighed for at gruppere en flok af forskellige elementer sammen, 1567 01:14:29,740 --> 01:14:34,300 så ting, der er relateret, men ikke nøjagtigt det samme. 1568 01:14:34,300 --> 01:14:35,685 Betyder det at besvare spørgsmålet? 1569 01:14:35,685 --> 01:14:36,200 Awesome. 1570 01:14:36,200 --> 01:14:37,194 Ja. 1571 01:14:37,194 --> 01:14:40,680 >> PUBLIKUM: Hvad hvis du har flere ting, der er i samme klasse? 1572 01:14:40,680 --> 01:14:42,150 >> HANNAH BLUMBERG: Hvad sker der hvis du har flere ting, 1573 01:14:42,150 --> 01:14:43,280 er de samme klasse? 1574 01:14:43,280 --> 01:14:45,829 Så for eksempel, hvis vi er blot ved hjælp af ren JavaScript, 1575 01:14:45,829 --> 01:14:48,120 vi ville gøre noget lignende document.getElementsByClass. 1576 01:14:48,120 --> 01:14:52,280 1577 01:14:52,280 --> 01:14:56,320 Og så hvad der rent faktisk gør er returnerer et array af elementer. 1578 01:14:56,320 --> 01:14:59,517 >> Og du er nødt til enten at gentage over dem eller finde hvilken en du ønsker. 1579 01:14:59,517 --> 01:15:01,350 Det kommer ikke til at give du et enkelt element. 1580 01:15:01,350 --> 01:15:03,450 Det kommer til at give dig et array af elementer. 1581 01:15:03,450 --> 01:15:05,280 Store spørgsmål. 1582 01:15:05,280 --> 01:15:07,700 Ellers andet? 1583 01:15:07,700 --> 01:15:09,520 Awesome. 1584 01:15:09,520 --> 01:15:12,860 >> Så jeg tror, ​​at hvis du er fortrolig med enhver jQuery du så i pset, 1585 01:15:12,860 --> 01:15:15,600 du skal være god til at gå. 1586 01:15:15,600 --> 01:15:16,325 Spørgsmål? 1587 01:15:16,325 --> 01:15:17,610 Åh nej. 1588 01:15:17,610 --> 01:15:18,859 Jeg virkelig nødt til at undervise. 1589 01:15:18,859 --> 01:15:19,358 Slap af. 1590 01:15:19,358 --> 01:15:20,035 Det vil være fint. 1591 01:15:20,035 --> 01:15:20,660 Jeg får der. 1592 01:15:20,660 --> 01:15:24,670 1593 01:15:24,670 --> 01:15:26,870 >> Lad os tale om Ajax. 1594 01:15:26,870 --> 01:15:31,350 Så Ajax bliver en-- godt, lad os starte med hvad det står for. 1595 01:15:31,350 --> 01:15:32,350 Det er et akronym. 1596 01:15:32,350 --> 01:15:35,855 Det står for Asynchronous JavaScript og XML. 1597 01:15:35,855 --> 01:15:39,800 Og XML er dybest set vil være [Uhørlig] med en form for vores data. 1598 01:15:39,800 --> 01:15:42,100 Men vi har faktisk ikke brugt XML. 1599 01:15:42,100 --> 01:15:43,430 I stedet skal vi bare bruge JSON. 1600 01:15:43,430 --> 01:15:48,350 >> Så dybest set, det er nogle data-- asynkron, JavaScript, og data, 1601 01:15:48,350 --> 01:15:50,040 i dette tilfælde, JSON. 1602 01:15:50,040 --> 01:15:52,820 Og vores mål, som vi nævnte lidt tidligere, 1603 01:15:52,820 --> 01:15:56,880 er at være i stand til at foretage en anmodning, har denne anmodning gøre 1604 01:15:56,880 --> 01:16:00,700 dens ting i baggrund, men fortsætter 1605 01:16:00,700 --> 01:16:02,550 gøre, hvad vi har til hensigt at gøre. 1606 01:16:02,550 --> 01:16:06,650 Og så når disse oplysninger er klar, så vi vil indarbejde det. 1607 01:16:06,650 --> 01:16:08,470 >> Så lad os se, hvad dette faktisk ser ud. 1608 01:16:08,470 --> 01:16:11,210 Og dette, skal du være lidt kender 1609 01:16:11,210 --> 01:16:13,680 fra pset8, den du lige slået. 1610 01:16:13,680 --> 01:16:16,200 Så her er et gyldigt jQuery funktion, som vi måske 1611 01:16:16,200 --> 01:16:18,250 ønsker at vide om-- denne dollartegn. 1612 01:16:18,250 --> 01:16:21,500 Så det siger jQuery funktion, .getJson. 1613 01:16:21,500 --> 01:16:25,020 >> Og hvad denne funktion gør, er det tager en URL og nogle parameters-- 1614 01:16:25,020 --> 01:16:28,000 så jeg tror i sagen af pset8, var det ligesom, 1615 01:16:28,000 --> 01:16:33,520 URL'en var articles.php og parametre var go = nogle postnummer. 1616 01:16:33,520 --> 01:16:41,580 Og det siger, OK, fremsætte en anmodning til denne URL med de givne parametre. 1617 01:16:41,580 --> 01:16:43,480 Og der bare sker. 1618 01:16:43,480 --> 01:16:47,730 >> Når den er færdig, er det enten kommer til at fuldføre 1619 01:16:47,730 --> 01:16:49,370 eller det kommer til at mislykkes. 1620 01:16:49,370 --> 01:16:53,480 Så dette er hvad der svarer til opkaldet Rob og bede ham om at gøre noget. 1621 01:16:53,480 --> 01:17:00,260 Og derefter, når han kalder tilbage, er han enten kommer til at sige, at jeg er færdig, eller jeg fejlede. 1622 01:17:00,260 --> 01:17:04,030 >> Så i det tilfælde, hvor du er gjort, du siger, OK, jeg er færdig. 1623 01:17:04,030 --> 01:17:05,980 Og så er du kalder denne funktion. 1624 01:17:05,980 --> 01:17:08,915 I dette tilfælde vil det være en funktion, der tager nogle oplysninger. 1625 01:17:08,915 --> 01:17:12,890 Den ene vi normalt bekymrer sig kun om data, de data, vi faktisk blev returneret 1626 01:17:12,890 --> 01:17:15,900 som et resultat af at kalde .getJSON. 1627 01:17:15,900 --> 01:17:17,470 >> Og du kan gøre noget med det. 1628 01:17:17,470 --> 01:17:23,670 Så i tilfælde af pset8, Vi viste det som en liste. 1629 01:17:23,670 --> 01:17:29,050 Fail vil være en funktion som kaldes hvis anmodningen ikke 1630 01:17:29,050 --> 01:17:30,450 uanset årsagen. 1631 01:17:30,450 --> 01:17:35,104 Og i tilfælde af pset8, vi bare console.log det. 1632 01:17:35,104 --> 01:17:36,020 Eventuelle spørgsmål om det? 1633 01:17:36,020 --> 01:17:36,300 Ja. 1634 01:17:36,300 --> 01:17:39,633 >> PUBLIKUM: Kan vi bare bruge funktionen theta i stedet for funktion, textStatus, jqHXR. 1635 01:17:39,633 --> 01:17:43,464 1636 01:17:43,464 --> 01:17:44,380 HANNAH BLUMBERG: Selvfølgelig. 1637 01:17:44,380 --> 01:17:46,713 Så ja, jeg tror i pset, vi lige set funktion data. 1638 01:17:46,713 --> 01:17:48,700 Så det er bare til-- ja, OK. 1639 01:17:48,700 --> 01:17:50,510 Det er, hvad vi så i pset. 1640 01:17:50,510 --> 01:17:51,480 Det er helt fint. 1641 01:17:51,480 --> 01:17:54,210 >> Disse er blot, hvis du ønsker at trække sig ud af mere information, 1642 01:17:54,210 --> 01:17:57,190 det er disse ting, du kunne få fra .getJSON. 1643 01:17:57,190 --> 01:17:59,040 Godt spørgsmål. 1644 01:17:59,040 --> 01:17:59,706 Ellers andet? 1645 01:17:59,706 --> 01:18:00,206 Ja. 1646 01:18:00,206 --> 01:18:01,787 >> PUBLIKUM: Så .getJSON er Ajax? 1647 01:18:01,787 --> 01:18:02,620 HANNAH BLUMBERG: OK. 1648 01:18:02,620 --> 01:18:05,700 Så dette er den slags vanskelige del. 1649 01:18:05,700 --> 01:18:12,390 Det er en jQuery funktion, der giver dig til at gøre asynkrone opkald. 1650 01:18:12,390 --> 01:18:16,080 Og de asynkrone opkald, der er hvad vi har at henvise til som Ajax. 1651 01:18:16,080 --> 01:18:16,850 Ja. 1652 01:18:16,850 --> 01:18:20,185 Det tog mig virkelig lang tid at trække fra hinanden, når jeg var studerende. 1653 01:18:20,185 --> 01:18:21,560 PUBLIKUM: Kan du sige det igen? 1654 01:18:21,560 --> 01:18:22,476 HANNAH BLUMBERG: Ja. 1655 01:18:22,476 --> 01:18:23,630 Kan jeg sige det igen? 1656 01:18:23,630 --> 01:18:29,010 Denne .getJSON funktion, det er en jQuery funktion. 1657 01:18:29,010 --> 01:18:31,970 Og det kommer til at gøre en asynkron opkald. 1658 01:18:31,970 --> 01:18:35,700 Og disse asynkrone opkald, vi har været at henvise til dem som Ajax. 1659 01:18:35,700 --> 01:18:39,610 1660 01:18:39,610 --> 01:18:41,872 >> Andre spørgsmål? 1661 01:18:41,872 --> 01:18:43,330 Vi har blot et par minutter tilbage. 1662 01:18:43,330 --> 01:18:45,080 Og Maria kommer til at wrap op med sikkerhed 1663 01:18:45,080 --> 01:18:47,464 og så vil vi at være lige omkring færdig. 1664 01:18:47,464 --> 01:18:48,630 MARIA ZLATKOVA: Awesome, OK. 1665 01:18:48,630 --> 01:18:54,030 Så dette is-- bare tage et par sekunder til at kigge over dette. 1666 01:18:54,030 --> 01:18:56,750 Og det er ikke noget, virkelig stor. 1667 01:18:56,750 --> 01:18:59,430 Og kan nogen fortælle mig hvorfor? 1668 01:18:59,430 --> 01:19:05,650 Hvad foregår der i foo og kan kunne potentielt resultere i noget slemt, 1669 01:19:05,650 --> 01:19:06,770 og hvad det hedder? 1670 01:19:06,770 --> 01:19:07,270 Ja. 1671 01:19:07,270 --> 01:19:10,391 PUBLIKUM: Hvis argumentet, der er bestået i mere end 12 tegn, 1672 01:19:10,391 --> 01:19:11,454 det kunne løbe over. 1673 01:19:11,454 --> 01:19:12,370 MARIA ZLATKOVA: Right. 1674 01:19:12,370 --> 01:19:14,180 Perfektionere. 1675 01:19:14,180 --> 01:19:15,384 Hvad hedder det? 1676 01:19:15,384 --> 01:19:16,300 Du har lige nævnt det. 1677 01:19:16,300 --> 01:19:16,840 >> PUBLIKUM: Buffer overflow. 1678 01:19:16,840 --> 01:19:18,381 >> MARIA ZLATKOVA: Yup, buffer overflow. 1679 01:19:18,381 --> 01:19:21,230 Så det er noget, vi refererer til som buffer overflow. 1680 01:19:21,230 --> 01:19:25,500 Og vi ser, at indersiden af ​​foo, vi har defineret vores buffer, c, 1681 01:19:25,500 --> 01:19:27,240 med en størrelse på 12. 1682 01:19:27,240 --> 01:19:32,680 Men i hovedsagen, gør vi ikke tjekke på nogen måde overhovedet 1683 01:19:32,680 --> 01:19:36,480 om argv1-- så var det andet argument. 1684 01:19:36,480 --> 01:19:39,630 Vi har ikke kontrollere, om størrelsen af ​​det er hensigtsmæssigt. 1685 01:19:39,630 --> 01:19:43,380 >> Så hvis vi havde en især ondsindet bruger 1686 01:19:43,380 --> 01:19:47,170 der sætte nogle argument, var længere end 12, og derefter potentielt 1687 01:19:47,170 --> 01:19:50,850 ud over grænserne for, at argument, havde nogle eksekverbar kode 1688 01:19:50,850 --> 01:19:55,570 at han forsøgte at gøre noget slemt med den; så, hvad der ville ske, 1689 01:19:55,570 --> 01:19:59,310 ville tilsidesætte tilbagevenden adresse på foo funktion, 1690 01:19:59,310 --> 01:20:04,370 forårsager funktionen til, når vender tilbage til at udføre denne kode. 1691 01:20:04,370 --> 01:20:07,540 Og så dårlige ting kunne ske. 1692 01:20:07,540 --> 01:20:09,850 Betyder det mening at alle? 1693 01:20:09,850 --> 01:20:12,424 >> Og hvordan kan vi beskytte mod denne? 1694 01:20:12,424 --> 01:20:13,090 Nogen forslag? 1695 01:20:13,090 --> 01:20:16,480 1696 01:20:16,480 --> 01:20:21,890 Dybest set, indersiden af potentielt foo, hvordan 1697 01:20:21,890 --> 01:20:28,294 kan vi kontrollere, at at der ikke kan ske? 1698 01:20:28,294 --> 01:20:33,879 >> Målgruppe: Hvis størrelsen 12 overskrides, du vil afsætte ekstra hukommelse? 1699 01:20:33,879 --> 01:20:37,170 MARIA ZLATKOVA: forslag er, tildele ekstra hukommelse størrelse overskredet. 1700 01:20:37,170 --> 01:20:39,800 Faktisk kan vi gøre noget meget enklere end at så godt. 1701 01:20:39,800 --> 01:20:44,870 Vi kan bare få strengen længde af det argument, at der indtastes, 1702 01:20:44,870 --> 01:20:48,590 kontrollere, om der er mindre end eller lig med 12-- 1703 01:20:48,590 --> 01:20:50,790 hvilket er, hvad vi ønsker det at være, fordi vi ikke ønsker 1704 01:20:50,790 --> 01:20:52,373 det til at overskride grænserne for vores buffer. 1705 01:20:52,373 --> 01:20:55,690 Og derefter, hvis det ikke sker, vi kan arbejde med det argument. 1706 01:20:55,690 --> 01:21:00,296 Og derefter, hvis det gør det, vi faktisk ønsker at gule sol potentielt på brugeren. 1707 01:21:00,296 --> 01:21:01,670 Men dette er, hvordan vi ville gøre det. 1708 01:21:01,670 --> 01:21:02,443 Ja. 1709 01:21:02,443 --> 01:21:04,360 >> PUBLIKUM: Kunne du forklare memcpy rigtig hurtig? 1710 01:21:04,360 --> 01:21:05,443 MARIA ZLATKOVA: Åh, undskyld. 1711 01:21:05,443 --> 01:21:06,040 Ja. 1712 01:21:06,040 --> 01:21:11,290 Memcpy tager uanset is-- ked af det, OK. 1713 01:21:11,290 --> 01:21:15,850 Memcpy tager hvad der er i bar, uanset passeres 1714 01:21:15,850 --> 01:21:18,050 på foo som kommandolinjen argument. 1715 01:21:18,050 --> 01:21:19,440 Så det vil tage argv1. 1716 01:21:19,440 --> 01:21:21,420 Argv1 kaldes bar her. 1717 01:21:21,420 --> 01:21:24,453 Så det kommer til at tage bar og det kommer til at kopiere det ind i c. 1718 01:21:24,453 --> 01:21:25,402 >> PUBLIKUM: OK. 1719 01:21:25,402 --> 01:21:28,360 MARIA ZLATKOVA: Og det kommer til at copy-- det tredje argument bare refererer 1720 01:21:28,360 --> 01:21:30,601 til, hvor meget det kommer til at kopiere ind c. 1721 01:21:30,601 --> 01:21:31,142 PUBLIKUM: Ah. 1722 01:21:31,142 --> 01:21:33,030 Så denne ens kopiering det hele derefter. 1723 01:21:33,030 --> 01:21:34,310 >> MARIA ZLATKOVA: Ja, det er at kopiere det hele. 1724 01:21:34,310 --> 01:21:34,810 Yep. 1725 01:21:34,810 --> 01:21:38,400 1726 01:21:38,400 --> 01:21:41,910 Først vi sørge baren er ikke svarende til null, fordi det er en pointer. 1727 01:21:41,910 --> 01:21:44,680 Derefter får vi strengen længde bar. 1728 01:21:44,680 --> 01:21:47,530 Vi sørger for, at det er mindre end eller lig med 12. 1729 01:21:47,530 --> 01:21:50,070 Og så fordi vi har sørgede, kan vi faktisk 1730 01:21:50,070 --> 01:21:53,122 memcpy og være sikker på, at det er OK. 1731 01:21:53,122 --> 01:21:53,705 Nogen spørgsmål? 1732 01:21:53,705 --> 01:21:56,280 1733 01:21:56,280 --> 01:21:58,690 Alle tiders. 1734 01:21:58,690 --> 01:22:00,400 Jeg har to sande eller falske spørgsmål. 1735 01:22:00,400 --> 01:22:05,470 Kan nogen fortælle mig det samme hvis disse er sande eller falske? 1736 01:22:05,470 --> 01:22:07,460 Ja, det er falsk. 1737 01:22:07,460 --> 01:22:07,960 Nøjagtig. 1738 01:22:07,960 --> 01:22:09,330 Begge af dem er falske. 1739 01:22:09,330 --> 01:22:12,682 Så ved hjælp af en enkelt adgangskode er aldrig rigtig god idé 1740 01:22:12,682 --> 01:22:14,890 fordi hvis nogen kender din adgangskode, kan de bare 1741 01:22:14,890 --> 01:22:16,260 få adgang til alle dine andre konti. 1742 01:22:16,260 --> 01:22:19,260 Og så ikoner gøre noget for at sikre sikkerheden. 1743 01:22:19,260 --> 01:22:24,900 Vi bør normalt ser for HTTPS i stedet for HTTP og URL'en. 1744 01:22:24,900 --> 01:22:28,560 >> Og nogle andre typer af angreb, som vi har nævnt, 1745 01:22:28,560 --> 01:22:31,390 at David har nævnt i foredrag, SQL injektion angreb. 1746 01:22:31,390 --> 01:22:37,310 Vi har allerede set, at hvis vi don't-- den CS50 query funktion gør sikker på, at SQL 1747 01:22:37,310 --> 01:22:39,530 injektion angreb kan ikke forekomme. 1748 01:22:39,530 --> 01:22:42,640 Men hvis vi ikke bruger CS50, tilbud, citat slut "i forespørgslen," 1749 01:22:42,640 --> 01:22:46,830 vi ville have til at sørge for, at brugerinput er ikke faktisk nogle SQL 1750 01:22:46,830 --> 01:22:49,670 forespørgsel, der vil forårsage alle vores borde, der skal droppes 1751 01:22:49,670 --> 01:22:54,070 eller noget dårligt at ske med vores database. 1752 01:22:54,070 --> 01:22:56,790 >> Session kapring er en anden type angreb 1753 01:22:56,790 --> 01:23:05,940 der sker, når nogle dårlige person bruger nogle ofrets session 1754 01:23:05,940 --> 01:23:08,740 ID for at få adgang til login-oplysninger. 1755 01:23:08,740 --> 01:23:13,620 Så en meget trivielt eksempel på det er gerne, hvis vi har en offentlig computer, 1756 01:23:13,620 --> 01:23:21,120 så dårligt menneske logger ind og derefter de har cookies, der er gemt. 1757 01:23:21,120 --> 01:23:23,380 Og cookies ikke ændre sig for sessionen. 1758 01:23:23,380 --> 01:23:27,620 >> Så har vi ofret gå i og derefter logge ind på hjemmesiden. 1759 01:23:27,620 --> 01:23:30,290 De cookies ændrer ikke for en bestemt session. 1760 01:23:30,290 --> 01:23:33,060 Og så offeret logger ind hjemmesiden og derefter efterlader. 1761 01:23:33,060 --> 01:23:36,190 Og derefter den person, der går tilbage kan så stadig bruge deres session-id 1762 01:23:36,190 --> 01:23:37,430 at få adgang til deres oplysninger. 1763 01:23:37,430 --> 01:23:40,050 Så det er et eksempel på hvordan det kunne ske. 1764 01:23:40,050 --> 01:23:45,570 >> Og så ville jeg ikke bekymre dig for meget om specifikke kode eller noget 1765 01:23:45,570 --> 01:23:49,270 gerne, at der kunne forårsage dette, men som har en slags idé om, hvad 1766 01:23:49,270 --> 01:23:51,400 De er involveret i denne variabler. 1767 01:23:51,400 --> 01:23:53,897 Og derefter manipulere header data er en anden type angreb 1768 01:23:53,897 --> 01:23:55,230 der har David har talt om. 1769 01:23:55,230 --> 01:23:59,730 Og det bare refererer til hvad der kan ske, når 1770 01:23:59,730 --> 01:24:04,300 svaret, HTTP reaktion inde i vores header 1771 01:24:04,300 --> 01:24:05,720 ikke desinficeres korrekt. 1772 01:24:05,720 --> 01:24:14,340 >> Og enhver af fields-- for eksempel hvis nogen overskriver en af ​​headeren 1773 01:24:14,340 --> 01:24:18,860 værdier for at indeholde noget mere end hvad de skal contain-- og faktisk 1774 01:24:18,860 --> 01:24:22,720 indeholde for eksempel en 200 OK statuskode, så de 1775 01:24:22,720 --> 01:24:26,890 kunne potentielt gøre ondsindet ting, når de ikke skal. 1776 01:24:26,890 --> 01:24:30,815 Men jeg ville ikke bekymre dig for meget om den specifikke kode 1777 01:24:30,815 --> 01:24:34,110 der kunne forårsage dette, bare slags forståelse 1778 01:24:34,110 --> 01:24:37,290 højt niveau sådan noget. 1779 01:24:37,290 --> 01:24:39,570 >> Jeg tror, ​​det er alt at vi er nødt til at dække. 1780 01:24:39,570 --> 01:24:40,090 Fantastiske. 1781 01:24:40,090 --> 01:24:43,310 Nogen der har nogen spørgsmål om nogen af de ting, vi er dækket? 1782 01:24:43,310 --> 01:24:44,213 Ja. 1783 01:24:44,213 --> 01:24:48,077 >> PUBLIKUM: Så en slags mere logistiske spørgsmål. 1784 01:24:48,077 --> 01:24:53,400 Er indholdet hovedsagelig fokuseret på tingene efter quiz 1? 1785 01:24:53,400 --> 01:24:55,730 >> MARIA ZLATKOVA: Så Spørgsmålet er, er indholdet 1786 01:24:55,730 --> 01:24:59,720 fokuserede primært på tingene efter quiz 1? 1787 01:24:59,720 --> 01:25:06,070 Så er der fokus på, efter quiz 1, med undtagelse 1788 01:25:06,070 --> 01:25:10,914 at vi er nødt til at fokusere på ting i pset5 og en masse af de datastrukturer 1789 01:25:10,914 --> 01:25:11,580 at vi dækket. 1790 01:25:11,580 --> 01:25:14,300 Og vi kan ikke sige, at vi kan ignorere noget før 1791 01:25:14,300 --> 01:25:17,120 det, fordi det bygger på det så godt. 1792 01:25:17,120 --> 01:25:21,845 >> Så fokusere på det, plus pset5 materiale ligesom herunder forbundne lister, stakke, 1793 01:25:21,845 --> 01:25:23,720 køer, og alt at Hannah gik over. 1794 01:25:23,720 --> 01:25:24,050 >> HANNAH BLUMBERG: Right. 1795 01:25:24,050 --> 01:25:27,450 Ja, vi gik over al C kram i begyndelsen meget hurtigt. 1796 01:25:27,450 --> 01:25:29,090 Men sørg for at gennemgå det. 1797 01:25:29,090 --> 01:25:32,700 Gå tilbage og se quizzen 0 anmeldelse. 1798 01:25:32,700 --> 01:25:36,110 >> Et par mere logistiske noter, lige, mens vi har din opmærksomhed. 1799 01:25:36,110 --> 01:25:39,100 Vi kommer til at have kontortid både mandag og tirsdag aften. 1800 01:25:39,100 --> 01:25:41,540 De kommer til at være i MD 119. 1801 01:25:41,540 --> 01:25:44,220 Dette er alt på hjemmesiden, så hvis du ikke høre det, ingen bekymringer. 1802 01:25:44,220 --> 01:25:45,266 >> MARIA ZLATKOVA: 8:30 til 11:00. 1803 01:25:45,266 --> 01:25:46,260 >> HANNAH BLUMBERG: Ja, fra 8:30 til 11:00. 1804 01:25:46,260 --> 01:25:46,910 Vi vil være der. 1805 01:25:46,910 --> 01:25:48,368 Vi vil være der til at besvare spørgsmål. 1806 01:25:48,368 --> 01:25:49,480 Det er temmelig chill og sjov. 1807 01:25:49,480 --> 01:25:53,240 Du fyre kan stille spørgsmål at du har på quiz 1. 1808 01:25:53,240 --> 01:25:55,740 Og quiz 1 er på Onsdag så held og lykke. 1809 01:25:55,740 --> 01:25:59,770 Hvis du har spørgsmål, måske kommer tale med os op her en-til-en. 1810 01:25:59,770 --> 01:26:00,880 Afkøle. 1811 01:26:00,880 --> 01:26:01,630 Tusind tak. 1812 01:26:01,630 --> 01:26:02,880 >> MARIA ZLATKOVA: Tak så meget, gutter. 1813 01:26:02,880 --> 01:26:03,480 >> PUBLIKUM: Yay. 1814 01:26:03,480 --> 01:26:05,930 >> [BIFALD] 1815 01:26:05,930 --> 01:26:07,530