1 00:00:00,000 --> 00:00:05,616 2 00:00:05,616 --> 00:00:07,030 >> HANNAH Blumberg: Hej alla. 3 00:00:07,030 --> 00:00:09,530 Vi kommer att komma igång bara ett par minuter för tidigt 4 00:00:09,530 --> 00:00:11,738 eftersom vi har en hel del av material för att få igenom. 5 00:00:11,738 --> 00:00:12,790 Jag är Hannah. 6 00:00:12,790 --> 00:00:13,865 Jag är en TF. 7 00:00:13,865 --> 00:00:16,239 Maria kommer att ansluta oss på bara ett par minuter. 8 00:00:16,239 --> 00:00:17,560 Hon undervisar avsnittet precis innan. 9 00:00:17,560 --> 00:00:19,351 Jag undervisar avsnitt rätt efter, så vi tänker 10 00:00:19,351 --> 00:00:21,200 att hålla det till och en halv timme. 11 00:00:21,200 --> 00:00:25,490 >> Så som du ser här uppe, vi har helt några frågor som vi behöver för att få igenom, 12 00:00:25,490 --> 00:00:27,200 så vi kommer att gå lite snabbt. 13 00:00:27,200 --> 00:00:31,140 Men om vid någon punkt vi säger något för snabbt eller om du inte förstår, 14 00:00:31,140 --> 00:00:33,170 gärna att avbryta med frågor. 15 00:00:33,170 --> 00:00:36,610 Vi vill kunna göra detta till en granska session som användbar för alla er 16 00:00:36,610 --> 00:00:37,973 som möjligt. 17 00:00:37,973 --> 00:00:38,920 Grymt bra. 18 00:00:38,920 --> 00:00:41,650 >> Så låt oss hoppa rätt in med vissa ämnen som vi faktiskt 19 00:00:41,650 --> 00:00:46,980 mycket, mycket kort täckas in för quiz 0 i frågesporten 0 omdöme session. 20 00:00:46,980 --> 00:00:48,840 Så börjar med länkade listor. 21 00:00:48,840 --> 00:00:52,090 Så bara till att du har några grundläggande kunskaper om länkade listor 22 00:00:52,090 --> 00:00:55,110 och är bekväm att göra några av de grundläggande funktionerna. 23 00:00:55,110 --> 00:00:58,560 >> Så bara för att granska, kopplade listor är bättre än arrayer 24 00:00:58,560 --> 00:01:01,020 eftersom de kan växa dynamiskt. 25 00:01:01,020 --> 00:01:03,300 Så vi har det stor fördel. 26 00:01:03,300 --> 00:01:06,031 Vi har sett dem används i hashtabeller när vi 27 00:01:06,031 --> 00:01:08,280 vet inte exakt hur många saker vi kommer att vilja 28 00:01:08,280 --> 00:01:10,900 att infoga i vår datastruktur. 29 00:01:10,900 --> 00:01:15,700 Tyvärr, vi har bitar av den länkade listan över hela minnet, 30 00:01:15,700 --> 00:01:20,820 så vi kommer inte nödvändigtvis kunna göra konstant tid tillgång 31 00:01:20,820 --> 00:01:22,502 till alla element i den länkade listan. 32 00:01:22,502 --> 00:01:24,210 För att finna en särskilt element, vi 33 00:01:24,210 --> 00:01:26,510 måste iterera alla sätt från början. 34 00:01:26,510 --> 00:01:30,610 Så kom ihåg att de flesta av grundläggande funktionerna är omega av 1. 35 00:01:30,610 --> 00:01:32,130 Så insatsen bara kommer att ta en. 36 00:01:32,130 --> 00:01:37,520 Radera kommer att ta n eftersom vi måste gå att hitta den i listan. 37 00:01:37,520 --> 00:01:39,260 Och sökning kunde ta, i värsta fall, n. 38 00:01:39,260 --> 00:01:42,330 Vi kan inte göra något liknande binär sökning på en länkad lista 39 00:01:42,330 --> 00:01:45,101 eftersom vi kan inte bara slumpmässigt hoppa till mitten. 40 00:01:45,101 --> 00:01:45,600 Häftigt. 41 00:01:45,600 --> 00:01:48,160 42 00:01:48,160 --> 00:01:48,960 Grymt bra. 43 00:01:48,960 --> 00:01:50,270 >> En liten bit av staplar. 44 00:01:50,270 --> 00:01:53,980 Detta, återigen, kom upp på frågesport 0, så att du bör vara super bekväm med det. 45 00:01:53,980 --> 00:01:57,210 Men för stackar, ber vi dig att komma ihåg en stapel av brickor. 46 00:01:57,210 --> 00:01:59,940 Och det kommer att vara först in, sist ut. 47 00:01:59,940 --> 00:02:02,272 Så vi stack upp saker i stapeln, och sedan 48 00:02:02,272 --> 00:02:04,980 Om vi ​​försöker ta något off-- som vi kallar poppar ut 49 00:02:04,980 --> 00:02:06,581 den stack-- vi kommer från toppen. 50 00:02:06,581 --> 00:02:09,289 Och om vi vill sätta något i stapeln, vi kallar det driver. 51 00:02:09,289 --> 00:02:13,170 Så det är alltid kommer att växa upp från botten som en stapel av brickor. 52 00:02:13,170 --> 00:02:14,540 Grymt bra. 53 00:02:14,540 --> 00:02:17,607 >> Vi har sett staplar genomförts med både länkade listor och matriser. 54 00:02:17,607 --> 00:02:19,440 Om du genomföra med arrayer, du vill 55 00:02:19,440 --> 00:02:22,350 att se till att hålla reda på både storleken och kapaciteten. 56 00:02:22,350 --> 00:02:27,540 Så storlek kommer att bli aktuellt antal saker i din stack, 57 00:02:27,540 --> 00:02:32,900 medan kapaciteten är det totala antalet av saker du kan lagra i din stack. 58 00:02:32,900 --> 00:02:34,220 Häftigt. 59 00:02:34,220 --> 00:02:35,767 >> På samma sätt, har vi köer. 60 00:02:35,767 --> 00:02:38,850 I detta fall, i stället för att tänka på en stapel av brickor, tänk på en linje. 61 00:02:38,850 --> 00:02:40,697 Detta kommer att vara först in, först ut. 62 00:02:40,697 --> 00:02:42,780 Så om du ställer upp för något i butiken, 63 00:02:42,780 --> 00:02:46,920 Vi hoppas att personen först i linjen kommer att få hjälp först. 64 00:02:46,920 --> 00:02:49,350 >> Istället för att säga tryck och pop som vi gör för stack, 65 00:02:49,350 --> 00:02:52,000 vi bara säga enqueue och dequeue. 66 00:02:52,000 --> 00:02:54,970 Och återigen, om du är genomföra detta med en array, 67 00:02:54,970 --> 00:02:56,720 vi behöver hålla reda av inte bara storleken 68 00:02:56,720 --> 00:03:02,390 och kapacitet, men också huvudet, vilket kommer att vara på framsidan av vår kö. 69 00:03:02,390 --> 00:03:03,010 Häftigt. 70 00:03:03,010 --> 00:03:05,770 Eventuella frågor om något av detta? 71 00:03:05,770 --> 00:03:06,320 Grymt bra. 72 00:03:06,320 --> 00:03:07,640 Flytta höger längs. 73 00:03:07,640 --> 00:03:08,564 >> OK, hashtabeller. 74 00:03:08,564 --> 00:03:10,605 Här är där det börjar bli riktigt intressant. 75 00:03:10,605 --> 00:03:14,150 Så en hashtabell är en implementering av en associativ array. 76 00:03:14,150 --> 00:03:16,700 Så i princip vad som hände är vi alla denna ingång, 77 00:03:16,700 --> 00:03:18,750 och vi ger det till en hash funktion som säger, 78 00:03:18,750 --> 00:03:21,840 OK, det är här i hashtabell den tillhör. 79 00:03:21,840 --> 00:03:24,860 >> Så den enklaste hashfunktionen att vi har sett är bara säga, 80 00:03:24,860 --> 00:03:28,170 OK, antar att vi vill sätta strängar i vårt hashtabell. 81 00:03:28,170 --> 00:03:30,870 Och en riktigt enkel idé skulle kunna vara att säga, OK, 82 00:03:30,870 --> 00:03:34,350 låt oss bara sortera efter första bokstaven i ordet. 83 00:03:34,350 --> 00:03:37,570 Så du kan se här, tar vi banan, vi sätter det genom en hashfunktion, 84 00:03:37,570 --> 00:03:40,190 och det står, hey, att bör gå vid index 1. 85 00:03:40,190 --> 00:03:45,120 >> Så vi kan i princip tänka på en hash tabell som ett gäng olika skopor. 86 00:03:45,120 --> 00:03:49,880 Och var och en av dessa skopor kommer att hålla huvudet av en länkad lista. 87 00:03:49,880 --> 00:03:55,030 Och i den länkade listan är där vi kan faktiskt sätta olika delar av data. 88 00:03:55,030 --> 00:03:57,820 >> Så dyka lite mer i en hashfunktion, här är 89 00:03:57,820 --> 00:03:59,870 exemplet jag bara beskrivs där vi bara säga, 90 00:03:59,870 --> 00:04:02,460 OK, ta den första bokstaven av ordet och vi är 91 00:04:02,460 --> 00:04:03,990 kommer att sortera det i hinkar. 92 00:04:03,990 --> 00:04:08,490 Så förmodligen kommer det att finnas 26 hinkar, en för varje bokstav i alfabetet. 93 00:04:08,490 --> 00:04:10,090 Varför är inte detta ett bra hash funktion? 94 00:04:10,090 --> 00:04:13,461 Vad som gör denna icke-ideal? 95 00:04:13,461 --> 00:04:13,960 Ja. 96 00:04:13,960 --> 00:04:15,790 >> PUBLIK: Du kommer ha kollisioner. 97 00:04:15,790 --> 00:04:16,390 >> HANNAH Blumberg: Ja, exakt. 98 00:04:16,390 --> 00:04:18,000 Du kommer att ha kollisioner. 99 00:04:18,000 --> 00:04:18,954 Så det är en sak. 100 00:04:18,954 --> 00:04:21,620 Och vi kommer att tala om hur vi kan fixa kollisioner på bara en sekund. 101 00:04:21,620 --> 00:04:23,980 Ett annat problem med denna särskilt hash-funktion 102 00:04:23,980 --> 00:04:25,980 är att våra olika hinkar kommer att vara 103 00:04:25,980 --> 00:04:28,960 nätt drastiskt olika storlekar. 104 00:04:28,960 --> 00:04:33,840 >> Vi vet att det finns en hel del fler ord som börjar med A än X, 105 00:04:33,840 --> 00:04:38,980 så vi kommer att ha mycket obalanserad hinkar i vårt hash bord. 106 00:04:38,980 --> 00:04:40,050 Häftigt. 107 00:04:40,050 --> 00:04:41,340 Så ja, låt oss gå tillbaka till punkten för kollisioner. 108 00:04:41,340 --> 00:04:42,900 Vad gör vi om det finns en kollision? 109 00:04:42,900 --> 00:04:44,490 >> Vi har ett par olika alternativ. 110 00:04:44,490 --> 00:04:47,600 Så en, så antar vi försöker att sätta bär i våra hash bord. 111 00:04:47,600 --> 00:04:50,370 Och vi ser, åh, vi vill ha för att uttrycka det i index 1, 112 00:04:50,370 --> 00:04:52,070 men banan bor redan där. 113 00:04:52,070 --> 00:04:53,110 Vad ska vi göra? 114 00:04:53,110 --> 00:04:54,560 Vi har två huvudalternativ. 115 00:04:54,560 --> 00:04:58,050 >> Nummer ett är att vi kan säga, OK, det finns inget utrymme i index 1, 116 00:04:58,050 --> 00:05:03,210 men låt oss bara hålla titta igenom tills vi kan hitta en annan öppen plats. 117 00:05:03,210 --> 00:05:08,490 Så vi säger, OK, låt oss lägga den i plats 3. 118 00:05:08,490 --> 00:05:09,240 Det är ett alternativ. 119 00:05:09,240 --> 00:05:11,470 Det kallas linjär sondering. 120 00:05:11,470 --> 00:05:15,500 >> Och ett andra alternativ säger, OK, ja, låt oss bara göra var och en av dessa skopor 121 00:05:15,500 --> 00:05:17,470 vara huvuden länkade listor. 122 00:05:17,470 --> 00:05:21,910 Och det är OK om det finns mer än en sak i en hink. 123 00:05:21,910 --> 00:05:23,820 Vi ska bara bifoga det på framsidan. 124 00:05:23,820 --> 00:05:26,032 Så här kan du se, OK, när vi införas bär, vi 125 00:05:26,032 --> 00:05:28,240 bara tog banan, typ av sköt det över lite 126 00:05:28,240 --> 00:05:29,842 och kastade en bär där. 127 00:05:29,842 --> 00:05:31,050 Och det är också helt bra. 128 00:05:31,050 --> 00:05:32,830 Detta kallas separat kedja. 129 00:05:32,830 --> 00:05:38,100 Du kan tänka på det som ungefär som en rad huvuden länkade listor. 130 00:05:38,100 --> 00:05:41,950 Har du frågor om hash tabeller, hash funktioner? 131 00:05:41,950 --> 00:05:44,290 Grymt bra. 132 00:05:44,290 --> 00:05:45,470 >> Träd och försök. 133 00:05:45,470 --> 00:05:47,287 Så ett träd är någon sort av datastrukturen 134 00:05:47,287 --> 00:05:49,453 där det finns någon form hierarki eller någon sorts 135 00:05:49,453 --> 00:05:51,247 att rangordna dina olika objekt. 136 00:05:51,247 --> 00:05:53,580 Och detta kommer att bli super klart när vi ser ett exempel. 137 00:05:53,580 --> 00:05:56,960 Och vi såg försök, tillsammans med hashtabeller, i pset5-- 138 00:05:56,960 --> 00:06:00,700 som, återigen, helt rättvist spel för detta quiz-- som ett annat data 139 00:06:00,700 --> 00:06:03,110 strukturer som vi kan lagra olika saker. 140 00:06:03,110 --> 00:06:06,782 I fallet med ordlistan, vi lagrat en massa ord. 141 00:06:06,782 --> 00:06:08,240 Så låt oss ta en titt på några träd. 142 00:06:08,240 --> 00:06:10,190 Så detta är ett exempel på ett träd. 143 00:06:10,190 --> 00:06:13,105 Den har en typ av struktur, att hierarkisk struktur, 144 00:06:13,105 --> 00:06:15,920 där du kan se att detta en nod på toppen 145 00:06:15,920 --> 00:06:20,750 har någon form av rang över 2 och 3, som ligger över 4, 5, och 6 och 7, 146 00:06:20,750 --> 00:06:22,860 som ligger över 8 och 9. 147 00:06:22,860 --> 00:06:25,210 Så det är allt menar vi med en träd, så att du kan bara typ 148 00:06:25,210 --> 00:06:26,660 av bild här i ditt huvud. 149 00:06:26,660 --> 00:06:29,050 >> Nu har vi ett par mer specialiserade träd. 150 00:06:29,050 --> 00:06:31,070 Så ett exempel är ett binärt träd. 151 00:06:31,070 --> 00:06:33,290 Och ett binärt träd är, igen, bara kommer att bli 152 00:06:33,290 --> 00:06:37,040 en datastruktur med någon sorts hierarki, men var och en av noderna 153 00:06:37,040 --> 00:06:38,650 kan ha högst två barn. 154 00:06:38,650 --> 00:06:41,530 Det är där ordet binära kommer ifrån. 155 00:06:41,530 --> 00:06:43,410 Så detta är ett exempel på ett binärt träd. 156 00:06:43,410 --> 00:06:45,720 Så det är en mindre kategori av träd. 157 00:06:45,720 --> 00:06:48,960 >> Låt oss nu få ännu mer specifik och tala om binär trees-- binär sökning 158 00:06:48,960 --> 00:06:51,310 träd, snarare. 159 00:06:51,310 --> 00:06:56,430 Så här idén är inte bara varje nod har högst två barn, 160 00:06:56,430 --> 00:07:00,300 men alla barn till vänster kommer att vara mindre 161 00:07:00,300 --> 00:07:03,450 och alla barnen till höger kommer att bli större. 162 00:07:03,450 --> 00:07:05,890 Så varsel bara vår binärt träd, det finns 163 00:07:05,890 --> 00:07:08,650 inget samband mellan siffrorna. 164 00:07:08,650 --> 00:07:12,990 Men i vår binär sökning träd, vi ser, OK, här är 44. 165 00:07:12,990 --> 00:07:17,080 Och varje nummer till vänster om 44 mindre och allt till höger 166 00:07:17,080 --> 00:07:17,920 är större. 167 00:07:17,920 --> 00:07:20,130 >> Och det håller på varje nivå i trädet. 168 00:07:20,130 --> 00:07:24,810 Så här är det mindre än 22 och det är större än 22. 169 00:07:24,810 --> 00:07:26,390 Och det är binärt sökträd. 170 00:07:26,390 --> 00:07:28,900 Varför tror vi det kallas ett binärt sökträd? 171 00:07:28,900 --> 00:07:30,651 Vad algoritm gör det påminna er om? 172 00:07:30,651 --> 00:07:31,650 PUBLIK: Binär sökning. 173 00:07:31,650 --> 00:07:32,480 HANNAH Blumberg: Binär sökning. 174 00:07:32,480 --> 00:07:35,150 För om du letar efter en visst antal i detta träd, 175 00:07:35,150 --> 00:07:38,800 vid varje punkt, kan du bara slå off hälften av trädet, vilket är bra. 176 00:07:38,800 --> 00:07:43,800 Och så som kommer att ge oss något som ser väldigt lik binär sökning. 177 00:07:43,800 --> 00:07:45,870 Några frågor? 178 00:07:45,870 --> 00:07:47,570 Okej, cool. 179 00:07:47,570 --> 00:07:48,560 >> Okej, försöker. 180 00:07:48,560 --> 00:07:49,657 Allas favorit. 181 00:07:49,657 --> 00:07:51,990 Så detta är exempel som Vi har sett ett gäng i klassen. 182 00:07:51,990 --> 00:07:54,710 Och återigen, detta är bara en annan sätt som vi kan lagra data. 183 00:07:54,710 --> 00:07:57,530 I fallet med ordlistan, återigen, detta är bara kommer att bli strängar. 184 00:07:57,530 --> 00:08:00,870 Så låt oss se vad detta faktiskt ser ut på en något lägre nivå. 185 00:08:00,870 --> 00:08:03,690 >> Så låt oss ta en titt vid en nod i ett trie. 186 00:08:03,690 --> 00:08:07,532 Och vi ser, OK, är det att gå att vara ett booleskt och en nod, 187 00:08:07,532 --> 00:08:09,170 en pekare till en nod. 188 00:08:09,170 --> 00:08:11,400 Och vi ser att Boolean kallas is_word. 189 00:08:11,400 --> 00:08:13,490 Så i huvudsak, det är kommer att motsvara 190 00:08:13,490 --> 00:08:16,750 till dessa små trianglar som säger, om du har fått här, 191 00:08:16,750 --> 00:08:19,100 du har hittat ett fullständigt ord. 192 00:08:19,100 --> 00:08:23,670 >> Vi vet att "turing" över här är ett fullständigt ord, 193 00:08:23,670 --> 00:08:28,030 medan bara T-U-R är inte ett ord eftersom vi inte ser den lilla deltat. 194 00:08:28,030 --> 00:08:31,440 Och den lilla delta, återigen, motsvarar denna is_word, 195 00:08:31,440 --> 00:08:34,480 Detta Boolean is_word. 196 00:08:34,480 --> 00:08:36,320 Och så har vi en rad barn. 197 00:08:36,320 --> 00:08:39,860 Så på varje nivå, du har en viss nod, 198 00:08:39,860 --> 00:08:42,470 och den noden pekar på en matris med hela alfabetet. 199 00:08:42,470 --> 00:08:44,346 >> Så du kan se, återigen, i detta picture-- jag 200 00:08:44,346 --> 00:08:48,170 kommer att fortsätta att hoppa tillbaka och forth-- att denna matris på toppen 201 00:08:48,170 --> 00:08:51,640 har ett gäng olika noder som kommer ut av det. 202 00:08:51,640 --> 00:08:57,140 Det har 26 eller 27 om du vill att inkludera en extra karaktär. 203 00:08:57,140 --> 00:09:01,320 Och detta ger oss en sätt att lagra våra data 204 00:09:01,320 --> 00:09:04,450 på ett sätt som kan ses på att du kan slå upp supersnabb. 205 00:09:04,450 --> 00:09:06,650 Vad är lookup dags för en trie? 206 00:09:06,650 --> 00:09:07,970 >> PUBLIK: [OHÖRBAR]. 207 00:09:07,970 --> 00:09:08,300 >> HANNAH Blumberg: Ja. 208 00:09:08,300 --> 00:09:09,550 I teorin är det konstant tid. 209 00:09:09,550 --> 00:09:13,230 Det kommer bara att vara storleken på det ord som du vill slå upp. 210 00:09:13,230 --> 00:09:15,950 Även om vi lägger till en zillioner fler ord till vår trie, 211 00:09:15,950 --> 00:09:18,160 det kommer inte att ta oss längre att bestämma 212 00:09:18,160 --> 00:09:19,690 om ett givet ord är i trie. 213 00:09:19,690 --> 00:09:21,412 Så det är riktigt nice. 214 00:09:21,412 --> 00:09:23,697 >> PUBLIK: Har du bara initiera att array? 215 00:09:23,697 --> 00:09:24,780 Du missade en punkt eller två. 216 00:09:24,780 --> 00:09:26,130 Kan du bara prata om att för en sekund? 217 00:09:26,130 --> 00:09:26,680 >> HANNAH Blumberg: Visst, absolut. 218 00:09:26,680 --> 00:09:27,590 Bra fråga. 219 00:09:27,590 --> 00:09:31,140 Frågan var, vi har en matris som är 220 00:09:31,140 --> 00:09:34,180 kommer att ha nod stjärna som motsats till bara nod, rätt? 221 00:09:34,180 --> 00:09:35,180 Häftigt. 222 00:09:35,180 --> 00:09:37,990 Så här är vad vi säger är vår array är bara 223 00:09:37,990 --> 00:09:40,035 kommer att vara pekare till andra arrayer. 224 00:09:40,035 --> 00:09:42,910 Så det är essentially-- det slags känns som en länkad lista på detta sätt 225 00:09:42,910 --> 00:09:46,620 där var och en av dessa barn bara peka på nästa nod. 226 00:09:46,620 --> 00:09:49,030 >> Och det sätt som vi faktiskt bestämmer, hej, OK, 227 00:09:49,030 --> 00:09:52,320 Vi har upprepas igenom en hel ord, är detta ord i ordlistan 228 00:09:52,320 --> 00:09:54,476 vi kontrollerar just detta is_word. 229 00:09:54,476 --> 00:09:55,100 Bra fråga. 230 00:09:55,100 --> 00:09:55,675 Ja. 231 00:09:55,675 --> 00:09:56,216 PUBLIK: OK. 232 00:09:56,216 --> 00:09:57,470 Så vad var runtime för trie? 233 00:09:57,470 --> 00:09:58,386 >> HANNAH Blumberg: Visst. 234 00:09:58,386 --> 00:10:01,852 Så runtime för en trie för lookup kommer att vara konstant tid. 235 00:10:01,852 --> 00:10:04,310 Så det är bara att vara Antalet bokstäver i ordet. 236 00:10:04,310 --> 00:10:06,310 Det är inte beroende av storleken på ordlistan 237 00:10:06,310 --> 00:10:09,510 eller storleken på datastrukturen. 238 00:10:09,510 --> 00:10:12,170 Så här är en något enklare exempel. 239 00:10:12,170 --> 00:10:15,430 >> I det här fallet, kan du se att ordet BAT är i ordboken 240 00:10:15,430 --> 00:10:18,900 och du har zoom, men du inte har något liknande zoo. 241 00:10:18,900 --> 00:10:20,050 Hur skulle vi zoo? 242 00:10:20,050 --> 00:10:24,276 Hur ska vi lägga zoo till vår ordbok, till vår trie? 243 00:10:24,276 --> 00:10:24,776 Ja. 244 00:10:24,776 --> 00:10:27,014 >> PUBLIK: Gör is_word gäller för [OHÖRBAR]. 245 00:10:27,014 --> 00:10:27,930 HANNAH Blumberg: Good. 246 00:10:27,930 --> 00:10:31,731 Så vi skulle säga Z-O-O, och då skulle vi vill bocka av den rutan också. 247 00:10:31,731 --> 00:10:32,230 Bra. 248 00:10:32,230 --> 00:10:35,160 249 00:10:35,160 --> 00:10:37,930 Låt oss jämföra mycket kort försöker kontra hashtabeller. 250 00:10:37,930 --> 00:10:39,770 Försök är riktigt bra eftersom, som sagt, 251 00:10:39,770 --> 00:10:41,610 de ger konstant tids lookup. 252 00:10:41,610 --> 00:10:44,285 Men den stora nackdelen är att de är humongous. 253 00:10:44,285 --> 00:10:46,160 Du kan få känslan, även genom att titta på det, 254 00:10:46,160 --> 00:10:48,454 att det kommer att ta en stor mängd minne. 255 00:10:48,454 --> 00:10:50,620 Så de kommer att vara mycket större än hashtabeller, 256 00:10:50,620 --> 00:10:52,270 men de kommer att ge oss mycket snabbare lookup gånger. 257 00:10:52,270 --> 00:10:54,478 Så det är typ av din avvägning, vad du bryr dig om, 258 00:10:54,478 --> 00:10:57,350 oavsett om det är hastighet eller minne. 259 00:10:57,350 --> 00:11:02,251 Eventuella frågor om något av detta, alla de C-datastrukturer. 260 00:11:02,251 --> 00:11:02,750 Vacker. 261 00:11:02,750 --> 00:11:03,250 OK. 262 00:11:03,250 --> 00:11:07,322 Vi kommer att gå vidare till en liten bit av webbutveckling med Maria. 263 00:11:07,322 --> 00:11:08,280 MARIA ZLATKOVA: Lovely. 264 00:11:08,280 --> 00:11:09,036 OK. 265 00:11:09,036 --> 00:11:10,380 >> HANNAH Blumberg: Du kan använda min bärbara dator. 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 bra. 269 00:11:14,912 --> 00:11:17,120 När vi går nu till webb utveckling, vi pratade lite 270 00:11:17,120 --> 00:11:20,680 om hur du ändrar behörigheter filer och kataloger 271 00:11:20,680 --> 00:11:24,190 så att de kan vara tillgängliga till andra användare, till världen, 272 00:11:24,190 --> 00:11:28,640 och så att vi kan se hur i princip kan vi förmedla dem 273 00:11:28,640 --> 00:11:32,600 när vi utvecklar saker som webbplatser att vi oftast har gjort. 274 00:11:32,600 --> 00:11:36,400 >> Så vi såg kommandot chmod, vilket är förändring läget, i princip. 275 00:11:36,400 --> 00:11:39,300 Det är en linux kommando och den ändrar åtkomstbehörigheter 276 00:11:39,300 --> 00:11:40,410 fil systemobjekt. 277 00:11:40,410 --> 00:11:43,370 Och ett filsystem objekt är bara en katalog, en fil, 278 00:11:43,370 --> 00:11:46,810 något som du kan ändra behörigheterna. 279 00:11:46,810 --> 00:11:53,750 >> Så för att se filrättigheter, vi skriver kommandot ls, lista, -l. 280 00:11:53,750 --> 00:11:56,500 Och när vi skriver att vi brukar se några behörigheter 281 00:11:56,500 --> 00:11:59,660 som ser ungefär som denna framför ett katalognamn. 282 00:11:59,660 --> 00:12:01,260 Så d hänvisar till katalogen. 283 00:12:01,260 --> 00:12:05,930 Och sedan har vi tre triader som i stort sett 284 00:12:05,930 --> 00:12:11,675 hänvisa till behörigheterna antingen en användare, en grupp, eller världen. 285 00:12:11,675 --> 00:12:16,490 >> De typer av behörigheter som vi kan har för dessa tre grupper av människor 286 00:12:16,490 --> 00:12:20,830 antingen r för läsning, w för skriva, och x för verkställa. 287 00:12:20,830 --> 00:12:23,650 Och vi kan ha dem för gruppen och världen också. 288 00:12:23,650 --> 00:12:26,940 Det knepiga är att ibland när vi skriver kommandot chmod, 289 00:12:26,940 --> 00:12:32,960 vi skulle skriva ett visst antal som bestod av tre bitar. 290 00:12:32,960 --> 00:12:36,990 Så vi kunde göra som 777 och som i stort sett 291 00:12:36,990 --> 00:12:40,450 hänvisade till mervärde av vart och ett av dessa triader 292 00:12:40,450 --> 00:12:45,060 eftersom r hänvisar till 4, w skulle hänvisar till två, och x hänvisar till en, 293 00:12:45,060 --> 00:12:50,020 så när de läggs upp, varje nummer skulle komma ner till ett ackumulerat antal 294 00:12:50,020 --> 00:12:52,750 till ett kumulativt värde mellan 0 och 7. 295 00:12:52,750 --> 00:12:55,150 Så vi kunde också ha 0 för inga rättigheter alls. 296 00:12:55,150 --> 00:12:58,200 Och det skulle i princip ge oss behörigheterna för antingen användaren, 297 00:12:58,200 --> 00:13:00,450 gruppen, eller världen. 298 00:13:00,450 --> 00:13:02,620 Eventuella frågor om detta så långt? 299 00:13:02,620 --> 00:13:05,331 >> PUBLIK: Du sa läste var 4? 300 00:13:05,331 --> 00:13:06,164 MARIA ZLATKOVA: Ja. 301 00:13:06,164 --> 00:13:07,568 PUBLIK: [OHÖRBAR]. 302 00:13:07,568 --> 00:13:08,504 HANNAH Blumberg: Japp. 303 00:13:08,504 --> 00:13:11,790 PUBLIK: Och sedan genom att tillsätta alla andra tyder ditt 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 Dessa är stora frågor. 307 00:13:17,810 --> 00:13:20,490 Härlig. 308 00:13:20,490 --> 00:13:25,340 Därefter hoppade vi in ​​HTML och lite mer om webbutveckling. 309 00:13:25,340 --> 00:13:27,990 Så HTML betyder bara Hypertext Markup Language. 310 00:13:27,990 --> 00:13:30,460 Och det är uppmärkning språk som är en standard 311 00:13:30,460 --> 00:13:32,720 att det används för att skapa webbsidor. 312 00:13:32,720 --> 00:13:35,750 >> Det kallas en markup language eftersom det faktiskt inte sammanställts. 313 00:13:35,750 --> 00:13:40,310 Det säger inte hur någon kod ska utföras eller nåt sånt. 314 00:13:40,310 --> 00:13:44,800 Det skisserar bara och beskriver hur en bana 315 00:13:44,800 --> 00:13:46,840 sida bör inrättas med var och en av dess beståndsdelar 316 00:13:46,840 --> 00:13:48,460 och hur de ska se ut till användaren. 317 00:13:48,460 --> 00:13:53,090 318 00:13:53,090 --> 00:13:57,110 >> Några av de HTML-taggar som vi gick över är följande. 319 00:13:57,110 --> 00:14:00,500 Alla våra HTML-dokument började med DOCTYPE html. 320 00:14:00,500 --> 00:14:02,550 Sedan har vi alltid html-taggen. 321 00:14:02,550 --> 00:14:03,930 Vi har ett huvud och en kropp. 322 00:14:03,930 --> 00:14:07,890 Och det är viktigt att HTML har denna typ av kapslade struktur 323 00:14:07,890 --> 00:14:09,280 eftersom det är mycket tydligt. 324 00:14:09,280 --> 00:14:13,200 Och då blir det väldigt tydligt när vi måste öppna och faktiskt nära taggar. 325 00:14:13,200 --> 00:14:18,400 Och vi behöver alltid att stänga taggar som vi har öppnat. 326 00:14:18,400 --> 00:14:23,170 >> Och här har vi några av de typer saker framåt som vi vill ha. 327 00:14:23,170 --> 00:14:26,580 Så vi har, till exempel, titeln CS50. 328 00:14:26,580 --> 00:14:31,980 Och sedan vi faktiskt kan koppla en formatmall 329 00:14:31,980 --> 00:14:34,030 som definierar hur vi utformar vår hemsida. 330 00:14:34,030 --> 00:14:35,650 Det är CSS. 331 00:14:35,650 --> 00:14:39,320 Vi kommer att gå igenom den i nästa par av bilder också. 332 00:14:39,320 --> 00:14:42,580 >> I kroppen, vi satt några klasser och ID. 333 00:14:42,580 --> 00:14:45,860 Och som en påminnelse, återigen, ID är unika och klasser 334 00:14:45,860 --> 00:14:47,390 kan tilldelas flera objekt. 335 00:14:47,390 --> 00:14:52,110 Och det betyder bara att vi kan använda klasser och ID 336 00:14:52,110 --> 00:14:55,860 inom andra structures-- så, för exempel inom CSS-filer eller stil 337 00:14:55,860 --> 00:15:00,940 sheets-- att hänvisa till specifika delar och i princip säga att vi vill styla 338 00:15:00,940 --> 00:15:03,280 eller designa något element på något särskilt sätt. 339 00:15:03,280 --> 00:15:06,440 Och vi hänvisar till dem genom deras ID och klasser. 340 00:15:06,440 --> 00:15:09,870 Och vi kan också hänvisa till olika saker från taggar också, 341 00:15:09,870 --> 00:15:13,830 men ID och klasser bara ge oss några mångsidighet och vad som specifikt vi 342 00:15:13,830 --> 00:15:15,850 vill hänvisa till. 343 00:15:15,850 --> 00:15:19,620 >> Så bara ett exempel. 344 00:15:19,620 --> 00:15:22,730 Vi kan, återigen, inom en CSS-fil där vi 345 00:15:22,730 --> 00:15:25,770 vill definiera vissa style-- så färger, teckensnitt, 346 00:15:25,770 --> 00:15:30,340 och sånt that-- vi kan definiera stilen för en kropp. 347 00:15:30,340 --> 00:15:32,640 Så det skulle definiera det för hela kroppen taggen. 348 00:15:32,640 --> 00:15:36,160 Men då kan vi också definiera en stil för en #title. 349 00:15:36,160 --> 00:15:40,390 Och återigen hänvisar hashtag till vår Id och punkten hänvisar till vår klass. 350 00:15:40,390 --> 00:15:44,760 >> Och sedan för .info, vi kan också ställa vissa attribut. 351 00:15:44,760 --> 00:15:49,750 Och återigen, när vi går tillbaka, vi hade vår klass som kallas info och vår ID titel. 352 00:15:49,750 --> 00:15:53,422 Och vi kan se att vi hänvisar till dem av #title och .info. 353 00:15:53,422 --> 00:15:55,380 PUBLIK: Skulle du säga hashtag [? adoptera mig? ?] 354 00:15:55,380 --> 00:15:55,725 MARIA ZLATKOVA: Förlåt? 355 00:15:55,725 --> 00:15:58,120 PUBLIK: Skulle du säga hashtag [? adoptera 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 hänvisar till oavsett element har detta ID kallas titel. 358 00:16:07,890 --> 00:16:10,735 Och sedan punkten hänför sig till en klass. 359 00:16:10,735 --> 00:16:14,590 Så .info hänvisar till detta element eftersom det har klass info. 360 00:16:14,590 --> 00:16:15,090 Japp. 361 00:16:15,090 --> 00:16:17,905 >> PUBLIK: Varför tror du skilja dem i HTML? 362 00:16:17,905 --> 00:16:20,985 Varför säger du vissa saker är ID och vissa saker är klass? 363 00:16:20,985 --> 00:16:22,610 MARIA ZLATKOVA: Det är bara upp till dig-- 364 00:16:22,610 --> 00:16:24,151 HANNAH Blumberg: Upprepa frågan. 365 00:16:24,151 --> 00:16:25,370 MARIA ZLATKOVA: Åh, förlåt. 366 00:16:25,370 --> 00:16:29,480 Varför vi urskilja vissa delar som ID och andra element som klasser? 367 00:16:29,480 --> 00:16:34,760 Det är bara för att det är verkligen ofta en konstruktion val. 368 00:16:34,760 --> 00:16:38,520 Det ger dig en hel del mångsidighet i att vara 369 00:16:38,520 --> 00:16:43,250 kunna säga att jag vill ha den här särskilda post att detta ID för att de vill 370 00:16:43,250 --> 00:16:45,300 att göra en massa saker med det, och jag bara 371 00:16:45,300 --> 00:16:50,010 vill definiera en stil, viss stil eller färg vad för det objektet. 372 00:16:50,010 --> 00:16:52,630 Och sättet att göra det är bara ge det ett ID. 373 00:16:52,630 --> 00:16:55,060 >> Och sedan om jag vill ha ett par olika objekt 374 00:16:55,060 --> 00:16:58,940 med att i stället för gå och ställa their-- 375 00:16:58,940 --> 00:17:03,840 istället för att göra det genom tagg eftersom etiketten skulle 376 00:17:03,840 --> 00:17:07,369 ställa cellen för hela taggen för varje gång den taggen används, 377 00:17:07,369 --> 00:17:09,740 du kan ställa in en klass till flera objekt. 378 00:17:09,740 --> 00:17:15,109 Och sedan bara komma åt den klassen och säga Jag vill styla denna klass på det sättet. 379 00:17:15,109 --> 00:17:17,579 >> Och återigen, klassen kan finnas flera olika objekt 380 00:17:17,579 --> 00:17:21,150 och ID måste vara unikt. 381 00:17:21,150 --> 00:17:21,849 Stora frågor. 382 00:17:21,849 --> 00:17:25,339 Alla andra frågor? 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 Återigen, detta är hur dessa väljare refereras i CSS, med hashtag, 386 00:17:35,330 --> 00:17:40,031 med prick, eller utan något för tilldela stil med några tag, 387 00:17:40,031 --> 00:17:40,530 liknande kropp. 388 00:17:40,530 --> 00:17:43,500 389 00:17:43,500 --> 00:17:47,860 Och här har vi den allmänna syntax för hur detta görs. 390 00:17:47,860 --> 00:17:52,830 391 00:17:52,830 --> 00:17:55,680 >> För att upprepa några bäst praxis för HTML och CSS, 392 00:17:55,680 --> 00:17:59,170 Vi måste återigen, stäng alla HTML-taggar som vi kan öppnas. 393 00:17:59,170 --> 00:18:03,950 Och vad vi rekommenderar att du göra för din slutliga projekt, 394 00:18:03,950 --> 00:18:10,560 liksom för CS50 Finance, är att göra Se till att alla dina HTML validerar. 395 00:18:10,560 --> 00:18:12,920 Och det är gjort med W3 Validator. 396 00:18:12,920 --> 00:18:16,940 >> Och vad vi gjorde och vad vi rekommenderar gör 397 00:18:16,940 --> 00:18:19,790 separerar stil, så CSS från uppmärkning HTML. 398 00:18:19,790 --> 00:18:24,210 Så allt som relaterar till hur din sida kommer att visuellt se 399 00:18:24,210 --> 00:18:27,330 och hur det kommer att ändras bör gå in i en CSS-dokument. 400 00:18:27,330 --> 00:18:33,880 Och sedan ditt markup säga hur saker är i förhållande till varandra är HTML, 401 00:18:33,880 --> 00:18:37,550 och det borde gå in av dina HTML-dokument. 402 00:18:37,550 --> 00:18:38,590 Några frågor? 403 00:18:38,590 --> 00:18:39,226 Mhm. 404 00:18:39,226 --> 00:18:42,628 >> PUBLIK: Vad exakt kommer på med sidan validering 405 00:18:42,628 --> 00:18:47,945 när vi validera HTML som [OHÖRBAR] skapat? 406 00:18:47,945 --> 00:18:49,850 >> MARIA ZLATKOVA: Så Vad-- tror dig. 407 00:18:49,850 --> 00:18:53,020 Så vad exakt går på med sida validering 408 00:18:53,020 --> 00:18:55,570 och varför måste vi göra det? 409 00:18:55,570 --> 00:18:59,180 I grund och botten, vi måste göra det eftersom många gånger, din webbläsare, 410 00:18:59,180 --> 00:19:01,390 Om du inte stänger en tagg eller något sådant, 411 00:19:01,390 --> 00:19:05,680 webbläsaren fortfarande kommer att göra en sida och kan fortfarande fungera, 412 00:19:05,680 --> 00:19:10,840 men det är bästa praxis för att se till att Du har återigen stängt alla dina taggar, 413 00:19:10,840 --> 00:19:13,190 att alla dina delar är det sätt som de borde vara, 414 00:19:13,190 --> 00:19:18,470 och i princip att det är av konventioner som är förinställda. 415 00:19:18,470 --> 00:19:21,970 >> Det är, återigen, bara en sak som du bör 416 00:19:21,970 --> 00:19:24,040 att lära sig att göra, i motsats till med 417 00:19:24,040 --> 00:19:25,696 sloppier kod och sånt. 418 00:19:25,696 --> 00:19:26,688 Ja. 419 00:19:26,688 --> 00:19:27,680 Åh förlåt. 420 00:19:27,680 --> 00:19:29,221 Jag trodde du höja din hand. 421 00:19:29,221 --> 00:19:31,240 Målgrupp: Nej, jag var bara [OHÖRBAR]. 422 00:19:31,240 --> 00:19:33,800 >> MARIA ZLATKOVA: OK. 423 00:19:33,800 --> 00:19:34,640 >> PUBLIK: Tack. 424 00:19:34,640 --> 00:19:36,181 >> MARIA ZLATKOVA: Naturligtvis, tack. 425 00:19:36,181 --> 00:19:41,680 Så återigen, pågår i hur information överförs 426 00:19:41,680 --> 00:19:44,630 och kommunikationsmodeller för att överföra information. 427 00:19:44,630 --> 00:19:45,730 TCP / IP. 428 00:19:45,730 --> 00:19:48,600 TCP betyder bara Överföring Control Protocol och IP 429 00:19:48,600 --> 00:19:51,260 hänvisar till Internet Protocol. 430 00:19:51,260 --> 00:19:54,275 Och som bara refererar till hur data levereras. 431 00:19:54,275 --> 00:19:59,470 432 00:19:59,470 --> 00:20:02,710 >> Om vi ​​har vissa uppgifter som behöver levereras till du-- så 433 00:20:02,710 --> 00:20:06,770 du gör en begäran om en viss server. 434 00:20:06,770 --> 00:20:09,800 Till exempel när vi försöker komma åt cs50.net, 435 00:20:09,800 --> 00:20:12,420 Vi gör en begäran om att den CS50 servern och vi 436 00:20:12,420 --> 00:20:14,720 se att vi vill få denna typ av information. 437 00:20:14,720 --> 00:20:19,294 Och sedan bygger på detta protokoll för hur denna information avges, 438 00:20:19,294 --> 00:20:21,460 servern ger information tillbaka till oss, kunden. 439 00:20:21,460 --> 00:20:25,590 Och då är vi kunna visa informationen för sidan 440 00:20:25,590 --> 00:20:26,390 och sedan använda den. 441 00:20:26,390 --> 00:20:29,300 442 00:20:29,300 --> 00:20:33,050 >> Så då Hypertext Transfer Protocol är bara ett annat protokoll eller ställa 443 00:20:33,050 --> 00:20:37,470 konventioner som definierar hur webbläsaren och webbservern 444 00:20:37,470 --> 00:20:38,890 ska kommunicera. 445 00:20:38,890 --> 00:20:43,730 Och sätta detta allt tillsammans, HTTP, återigen, 446 00:20:43,730 --> 00:20:50,960 bara definierar hur denna hyper definieras av HTML som vi har arbetat det, 447 00:20:50,960 --> 00:20:59,500 hur det ska levereras till dig och hur den data som levereras till dig 448 00:20:59,500 --> 00:21:00,540 får du. 449 00:21:00,540 --> 00:21:05,990 >> Och det är därför, om ni minns från en klass, vi hade en hel del förfrågningar 450 00:21:05,990 --> 00:21:08,970 och vi hade en hel del syntax för dessa ansökningar som vi är 451 00:21:08,970 --> 00:21:10,250 kommer att gå över just nu. 452 00:21:10,250 --> 00:21:13,270 Så återigen, när vi skickar en begäran till en server, 453 00:21:13,270 --> 00:21:15,920 Vi måste definiera ett par saker. 454 00:21:15,920 --> 00:21:18,520 Så vi måste hitta den typ av begäran om att vi inställningen. 455 00:21:18,520 --> 00:21:22,180 Och återigen, vi har, till exempel, GET är en typ av metod 456 00:21:22,180 --> 00:21:25,290 som vi har i vår begäran. 457 00:21:25,290 --> 00:21:31,710 >> Och sedan HTTP / 1.1 är bara protokoll som vi använder för närvarande. 458 00:21:31,710 --> 00:21:34,224 459 00:21:34,224 --> 00:21:36,890 Merparten av tiden, är att gå till det protokoll som vi använder. 460 00:21:36,890 --> 00:21:40,290 Så om du har en fråga sånt på din frågesport. 461 00:21:40,290 --> 00:21:43,120 Det är de konventioner att vi har så här långt. 462 00:21:43,120 --> 00:21:46,580 >> Omvänt snedstreck avser vilken typ saker som vi efterfrågar. 463 00:21:46,580 --> 00:21:52,810 Då är vår värd, till exempel, i detta fall, vi försöker att gå till google.com. 464 00:21:52,810 --> 00:21:57,070 Så detta är värdet för en värd. 465 00:21:57,070 --> 00:21:59,330 Detta är en typ av begäran som kunde sändas. 466 00:21:59,330 --> 00:22:02,890 >> Och sedan en typ av svar som kunde sändas, återigen på grundval av detta protokoll, 467 00:22:02,890 --> 00:22:05,190 är återigen, HTTP / 1,1. 468 00:22:05,190 --> 00:22:07,150 Så det är HTTP-versionen igen. 469 00:22:07,150 --> 00:22:09,730 200 OK är bara statuskoden. 470 00:22:09,730 --> 00:22:12,860 Och det OK är bara en fras baserat på denna statuskod. 471 00:22:12,860 --> 00:22:15,520 >> Och sedan Content-Type syftar på den typ 472 00:22:15,520 --> 00:22:20,295 som går tillbaka till dig som är för den webbsida som du får 473 00:22:20,295 --> 00:22:22,570 och att din webbläsare kan göra efteråt. 474 00:22:22,570 --> 00:22:24,401 Och det är text / html. 475 00:22:24,401 --> 00:22:26,660 >> PUBLIK: Vad betyder 1.1 detta? 476 00:22:26,660 --> 00:22:29,910 >> MARIA ZLATKOVA: Det är bara version of-- åh, vad betyder 1.1 detta? 477 00:22:29,910 --> 00:22:37,075 Det är bara den version, HTTP version av ett protokoll som vi använder. 478 00:22:37,075 --> 00:22:37,700 Bra fråga. 479 00:22:37,700 --> 00:22:38,366 Andra frågor? 480 00:22:38,366 --> 00:22:41,222 481 00:22:41,222 --> 00:22:45,080 >> PUBLIK: Kan du sammanfatta Content-Type riktigt snabbt? 482 00:22:45,080 --> 00:22:48,150 >> MARIA ZLATKOVA: Så det är vad servern. 483 00:22:48,150 --> 00:22:51,020 typen av information-- vad som är innehållstypen var frågorna. 484 00:22:51,020 --> 00:22:53,400 Så det var den typ av information som du får tillbaka 485 00:22:53,400 --> 00:22:58,200 från servern, den typ av data som webbläsaren kan då 486 00:22:58,200 --> 00:23:00,604 göra att du använder. 487 00:23:00,604 --> 00:23:03,020 PUBLIK: Är det vad detta protokollet säger till dig att göra? 488 00:23:03,020 --> 00:23:03,390 MARIA ZLATKOVA: Förlåt? 489 00:23:03,390 --> 00:23:05,380 PUBLIK: Är det vad protokollet säga? 490 00:23:05,380 --> 00:23:05,915 MARIA ZLATKOVA: Den protocol-- 491 00:23:05,915 --> 00:23:07,940 PUBLIK: --what den Content-Type är eller Vad-- 492 00:23:07,940 --> 00:23:12,040 MARIA ZLATKOVA: Protokollet bygger on-- vad är det protokoll som talar om? 493 00:23:12,040 --> 00:23:16,070 Det är precis som att denna information 494 00:23:16,070 --> 00:23:18,610 levererades till dig baserat på vilken typ av protokoll 495 00:23:18,610 --> 00:23:21,830 var denna information fick levereras tillbaka till dig. 496 00:23:21,830 --> 00:23:23,500 Låter det vettigt slags? 497 00:23:23,500 --> 00:23:28,320 498 00:23:28,320 --> 00:23:30,070 HANNAH Blumberg: Du kan tänka på protokoll 499 00:23:30,070 --> 00:23:33,300 som en-- Jag tror Professor Malan beskrev det 500 00:23:33,300 --> 00:23:36,910 i klassen som ungefär som en-- det är som motsvarande mänskliga handskakning. 501 00:23:36,910 --> 00:23:44,930 Säg, liksom, hey, jag är en begäran och jag vet hur man hanterar HTTP version 1.1. 502 00:23:44,930 --> 00:23:48,770 Och då servern säger, åh, OK, jag-- och båda existerar. 503 00:23:48,770 --> 00:23:51,337 Jag vet också hur man handskas med HTTP / 1.1. 504 00:23:51,337 --> 00:23:53,170 Och jag kommer att ge du säkerhets något innehåll. 505 00:23:53,170 --> 00:23:56,230 I det här fallet, det kommer att vara av typen text / html. 506 00:23:56,230 --> 00:23:58,480 Så det är typ av bara ett sätt av dem för communicating-- 507 00:23:58,480 --> 00:24:00,480 >> MARIA ZLATKOVA: Det är bara bekräftar att du är 508 00:24:00,480 --> 00:24:03,290 både att följa samma protokoll och att både 509 00:24:03,290 --> 00:24:06,620 klienten och server-- så webbläsaren och server-- 510 00:24:06,620 --> 00:24:09,280 sorts vet vad du är talar om och har 511 00:24:09,280 --> 00:24:12,557 konventionen för att passera i data. 512 00:24:12,557 --> 00:24:17,022 >> PUBLIK: Så Content-Type part-- Content-Type text / är html-- att 513 00:24:17,022 --> 00:24:18,521 en separat del av samma meddelande? 514 00:24:18,521 --> 00:24:20,509 Eller är det en del av låt oss säga, 200? 515 00:24:20,509 --> 00:24:22,010 Har 200 berätta för dem att eller är-- 516 00:24:22,010 --> 00:24:23,770 >> MARIA ZLATKOVA: 200 säger allt gick OK. 517 00:24:23,770 --> 00:24:27,900 Och sedan innehållstyp är en slags separat del av samma meddelande, 518 00:24:27,900 --> 00:24:34,274 och säger det som jag Återvände har den här typen av text / html. 519 00:24:34,274 --> 00:24:35,690 Det är bara att ge mer information. 520 00:24:35,690 --> 00:24:38,700 521 00:24:38,700 --> 00:24:39,995 Har något att tillägga? 522 00:24:39,995 --> 00:24:40,495 OK. 523 00:24:40,495 --> 00:24:43,590 524 00:24:43,590 --> 00:24:46,530 >> Alla andra frågor om detta? 525 00:24:46,530 --> 00:24:48,370 Grymt bra. 526 00:24:48,370 --> 00:24:54,070 Så några andra HTTP status som vi kunde få i tillägg till 200 OK, 527 00:24:54,070 --> 00:24:59,500 de som vi har sett kanske möjligen en hel del är 403 och 404. 528 00:24:59,500 --> 00:25:05,190 Så 404, om du försökte Tillgång till något som inte existerar. 529 00:25:05,190 --> 00:25:10,460 Så till exempel, i CS50 Finance psets, 530 00:25:10,460 --> 00:25:15,640 om du hade varit rendering quote.html och du inte har filen, 531 00:25:15,640 --> 00:25:19,740 men i stället du hade quote.php att skulle resultera i en 404 Not Found 532 00:25:19,740 --> 00:25:21,600 eftersom filen kanske inte existerar. 533 00:25:21,600 --> 00:25:25,690 >> För en 403 förbjudet att hänvisar till de behörigheter. 534 00:25:25,690 --> 00:25:31,150 Så om någon fil är inte läsbar av värld, kan du få en 403 returneras. 535 00:25:31,150 --> 00:25:34,510 536 00:25:34,510 --> 00:25:37,810 Några andra som du kan get-- 301, Flyttad permanent; 537 00:25:37,810 --> 00:25:41,300 302, Funnet; 304, modifierad; 400 Bad Request; 538 00:25:41,300 --> 00:25:47,330 och sedan Internal Server Error för 500 och 503, service Otillgänglig. 539 00:25:47,330 --> 00:25:48,140 Ja. 540 00:25:48,140 --> 00:25:51,490 >> PUBLIK: Kommer vi förväntas memorera alla dessa status? 541 00:25:51,490 --> 00:25:53,739 MARIA ZLATKOVA: Jag skulle ha dem på din fusklapp. 542 00:25:53,739 --> 00:25:55,146 [SKRATT] 543 00:25:55,146 --> 00:25:59,954 PUBLIK: Är vi förväntas vet vad som triggar varje? 544 00:25:59,954 --> 00:26:00,995 MARIA ZLATKOVA: Är de? 545 00:26:00,995 --> 00:26:03,870 HANNAH Blumberg: För dem som vi har kör into-- så frågan was-- 546 00:26:03,870 --> 00:26:08,010 MARIA ZLATKOVA: Är de förväntas vet vad var och en av dessa status 547 00:26:08,010 --> 00:26:09,330 koder kan utlösas av? 548 00:26:09,330 --> 00:26:13,240 Så för de som vi har använt och sprang in, skulle jag säga, ja. 549 00:26:13,240 --> 00:26:16,610 Så vi har definitivt sett 200 OK och föreläste den psets. 550 00:26:16,610 --> 00:26:19,071 Vi har sett 403, 404. 551 00:26:19,071 --> 00:26:20,550 För andra? 552 00:26:20,550 --> 00:26:22,690 >> HANNAH Blumberg: Jag skulle säger 500 verkar rättvist spel. 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 Bara ha en allmän känsla av vad som orsakar dem. 556 00:26:27,006 --> 00:26:28,880 Och även bara genom dessa namn, kan du typ av 557 00:26:28,880 --> 00:26:32,890 som gör en kvalificerad gissning som vad som faktiskt orsakat dem. 558 00:26:32,890 --> 00:26:36,919 Till exempel, flytta permanent, förmodligen filen flyttades permanent. 559 00:26:36,919 --> 00:26:39,328 >> PUBLIK: Men på ett tidigare examen, fanns det en så 560 00:26:39,328 --> 00:26:41,050 Hur förväntar du dig att vi ska svara på det? 561 00:26:41,050 --> 00:26:42,883 >> HANNAH Blumberg: Att var värd noll poäng. 562 00:26:42,883 --> 00:26:45,870 Frågan om 418 på tekannan är tekniskt en HTTP-status, 563 00:26:45,870 --> 00:26:47,090 men det var värt noll poäng. 564 00:26:47,090 --> 00:26:48,320 Självklart, du är inte förväntas känna dem. 565 00:26:48,320 --> 00:26:49,670 >> PUBLIK: Är det en riktig? 566 00:26:49,670 --> 00:26:51,970 >> HANNAH Blumberg: Det är en verklig en, men det betyder ingenting. 567 00:26:51,970 --> 00:26:52,700 Det är bara ett skämt. 568 00:26:52,700 --> 00:26:55,480 569 00:26:55,480 --> 00:26:57,010 Internet människor är rolig. 570 00:26:57,010 --> 00:26:59,680 >> MARIA ZLATKOVA: Stora frågor, killar. 571 00:26:59,680 --> 00:27:01,452 Alla andra frågor? 572 00:27:01,452 --> 00:27:04,891 >> PUBLIK: Vad är internt fel server? 573 00:27:04,891 --> 00:27:06,640 MARIA ZLATKOVA: inre serverfel bara 574 00:27:06,640 --> 00:27:10,050 innebär att du har varit inte kan kommunicera 575 00:27:10,050 --> 00:27:13,400 med servern av någon anledning. 576 00:27:13,400 --> 00:27:15,400 Så det är inte nödvändigtvis något som har att göra 577 00:27:15,400 --> 00:27:19,170 med kunden eller nåt sånt. 578 00:27:19,170 --> 00:27:22,170 Jag känner inte till något specifikt exempel att vi har gått över till att förklara, 579 00:27:22,170 --> 00:27:23,000 men ja. 580 00:27:23,000 --> 00:27:23,250 >> HANNAH Blumberg: Visst. 581 00:27:23,250 --> 00:27:25,625 Så till exempel, som låt oss säga att du arbetade på mashup 582 00:27:25,625 --> 00:27:30,440 och en Google-server gick ner för vissa Därför ett strömavbrott, låt oss säga. 583 00:27:30,440 --> 00:27:33,400 Det skulle vara en intern server fel eller någon sorts of-- gillar dig 584 00:27:33,400 --> 00:27:34,630 skulle inte få ett svar tillbaka. 585 00:27:34,630 --> 00:27:35,260 >> MARIA ZLATKOVA: Ja. 586 00:27:35,260 --> 00:27:37,050 Det är bara när du är inte kan kommunicera 587 00:27:37,050 --> 00:27:40,299 med servern av någon anledning eftersom det går ner eller av någon annan orsak. 588 00:27:40,299 --> 00:27:44,430 589 00:27:44,430 --> 00:27:47,690 Så hoppa in i PHP. 590 00:27:47,690 --> 00:27:49,930 PHP, till skillnad från HTML, är en programmeringsspråk. 591 00:27:49,930 --> 00:27:54,820 Och vi började använda det eftersom det är mycket användbart för webbutveckling. 592 00:27:54,820 --> 00:27:56,940 >> Vi använde det först i CS50 Finance. 593 00:27:56,940 --> 00:28:02,240 Och det i princip hjälper oss att föra ihop den här markup, design, 594 00:28:02,240 --> 00:28:07,460 och hur vi faktiskt använda information att visa saker på en webbsida. 595 00:28:07,460 --> 00:28:11,870 Så PHP sig innebär PHP Hypertext Preprocessor, 596 00:28:11,870 --> 00:28:15,360 så det är en rekursiv backnorym av sig själv. 597 00:28:15,360 --> 00:28:22,330 Och öppna taggar för PHP vi vänster och höger pilarna med frågetecken 598 00:28:22,330 --> 00:28:23,060 och php. 599 00:28:23,060 --> 00:28:25,890 >> Så vi har redan sett ett gäng det. 600 00:28:25,890 --> 00:28:29,150 Nu, vi ska bara gå över några av de grundläggande saker om det. 601 00:28:29,150 --> 00:28:32,280 Så med PHP, variabeln namn börjar med dollartecken. 602 00:28:32,280 --> 00:28:35,660 Vi anger inte, återigen, en variabel skriver längre. 603 00:28:35,660 --> 00:28:38,450 Precis som vi gjorde med C, vi behöver inte göra det. 604 00:28:38,450 --> 00:28:41,670 605 00:28:41,670 --> 00:28:44,490 >> Vi kan göra en massa olika grejer med variabler. 606 00:28:44,490 --> 00:28:47,750 Vi kan sätta ihop dem genom att sammanlänka dem 607 00:28:47,750 --> 00:28:52,900 med punktnotation, som Vi kunde inte göra i C igen. 608 00:28:52,900 --> 00:28:57,490 Återigen, vi har lite mer mångsidighet med PHP i form av variabler. 609 00:28:57,490 --> 00:29:00,080 Återigen, vi har inte en huvudfunktion. 610 00:29:00,080 --> 00:29:03,370 >> Och PHP tolkas i motsats till sammanställts, 611 00:29:03,370 --> 00:29:09,970 Så hur vi gjorde för C-filer, vi behöver inte göra det för PHP. 612 00:29:09,970 --> 00:29:15,440 Utan snarare det sätt att det språk drivs av sig själv, är det tolkas. 613 00:29:15,440 --> 00:29:18,550 Och sedan löst skrivit betyder bara att vi 614 00:29:18,550 --> 00:29:22,490 behöver inte ange en variabel typ och variabeltyper 615 00:29:22,490 --> 00:29:25,415 förstås vid körning. 616 00:29:25,415 --> 00:29:29,185 >> PUBLIK: Men vad gjorde du menar med dot sammanlänkning? 617 00:29:29,185 --> 00:29:30,060 MARIA ZLATKOVA: Visst. 618 00:29:30,060 --> 00:29:37,660 När vi vill sätta saker together-- så om vi hade några variabel som 619 00:29:37,660 --> 00:29:41,500 hade ett värde av 3 och vi hade en annan variabel som hade värdet av strängen, 620 00:29:41,500 --> 00:29:45,920 vi kunde sätta variablerna tillsammans genom att sätta en punkt mellan dem 621 00:29:45,920 --> 00:29:46,970 och konkatenera dem. 622 00:29:46,970 --> 00:29:52,670 Eller vi kan skapa en variabel som heter namn 623 00:29:52,670 --> 00:29:56,900 och satte ihop med konkatenering två strängar. 624 00:29:56,900 --> 00:30:00,680 >> Så om vi hade en sträng i dubbel offerter och vi sätter en punkt efter det, 625 00:30:00,680 --> 00:30:03,660 och sedan hade vi en annan sträng, att skulle skapa en sträng helt och hållet. 626 00:30:03,660 --> 00:30:05,242 >> PUBLIK: OK. 627 00:30:05,242 --> 00:30:06,450 MARIA LETTLAND: Var det klara? 628 00:30:06,450 --> 00:30:07,099 PUBLIK: 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 >> PUBLIK: När du säger tolkas snarare än sammanställt, 632 00:30:11,146 --> 00:30:14,160 pratar du om du inte måste vara så specifik när 633 00:30:14,160 --> 00:30:15,906 det kommer att PHP kontra C? 634 00:30:15,906 --> 00:30:18,085 635 00:30:18,085 --> 00:30:20,710 MARIA ZLATKOVA: När vi säger tolkas i motsats till sammanställts, 636 00:30:20,710 --> 00:30:21,850 Vad menar vi? 637 00:30:21,850 --> 00:30:26,220 Så det innebär att vi inte behöver körbara filer för att köra PHP. 638 00:30:26,220 --> 00:30:29,870 Det innebär att det går som det går. 639 00:30:29,870 --> 00:30:31,650 Betyder det vettigt? 640 00:30:31,650 --> 00:30:32,495 Lite mer. 641 00:30:32,495 --> 00:30:34,620 HANNAH Blumberg: Så du kan tänka tolk 642 00:30:34,620 --> 00:30:38,980 som ett annat program som är ansvarig för att gå rad för rad genom PHP 643 00:30:38,980 --> 00:30:42,745 och faktiskt verkställer det, i motsats att sammanställa allt ner till binärt. 644 00:30:42,745 --> 00:30:46,050 Det faktiskt inte betyder något om hur specifik måste vi vara. 645 00:30:46,050 --> 00:30:49,470 Vi behöver fortfarande att vara exakt, och inte glömt semikolon, och se till att 646 00:30:49,470 --> 00:30:51,470 du har din dollartecken, och sånt. 647 00:30:51,470 --> 00:30:52,240 Bra fråga. 648 00:30:52,240 --> 00:30:53,115 >> MARIA ZLATKOVA: Ja. 649 00:30:53,115 --> 00:30:55,590 Så rad för rad, som motsats till med C-filer, 650 00:30:55,590 --> 00:30:59,100 Vi måste göra hela finalen innan vi faktiskt kan köra det. 651 00:30:59,100 --> 00:31:00,360 Det är den största skillnaden. 652 00:31:00,360 --> 00:31:02,655 Men återigen, vi kan inte verkligen vara mindre specifik. 653 00:31:02,655 --> 00:31:08,760 654 00:31:08,760 --> 00:31:13,950 Så matriser i PHP representerar faktiskt en ordnad karta. 655 00:31:13,950 --> 00:31:17,550 >> Så arrayer associerade värden till nycklar. 656 00:31:17,550 --> 00:31:23,350 De två sätt att förklara en array, grundar sig på detta syntax, 657 00:31:23,350 --> 00:31:26,380 Vi kan vara mer explicit att säga att vi har en matris 658 00:31:26,380 --> 00:31:31,010 och vi har denna nyckel1 som avbildas till detta värde1, KEY2 som avbildar value2. 659 00:31:31,010 --> 00:31:34,660 Eller vi kan bara skapa en array som innehåller de värden själv 660 00:31:34,660 --> 00:31:38,360 och sedan tangenterna är förstås på ett sätt. 661 00:31:38,360 --> 00:31:40,000 Eventuella frågor om detta? 662 00:31:40,000 --> 00:31:42,500 >> Publik: Vad skulle tangenterna vara i det andra exemplet? 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: Till exempel är det bara nycklar i denna inte nödvändigtvis 667 00:31:55,780 --> 00:31:56,550 Göra skillnad. 668 00:31:56,550 --> 00:32:01,720 De definierar hur du kan använda värdena inne i den. 669 00:32:01,720 --> 00:32:08,660 Så om vi hade en foreach slinga i PHP som skulle 670 00:32:08,660 --> 00:32:14,760 tillåter oss att gå igenom alla värden, vi kan gå igenom alla värden, 671 00:32:14,760 --> 00:32:19,570 även om vi hade eller hade inte definierat en särskild nyckel i webbplatsens 672 00:32:19,570 --> 00:32:20,820 tidigare syntax. 673 00:32:20,820 --> 00:32:23,460 >> Så även med denna typ av array, vi kan fortfarande 674 00:32:23,460 --> 00:32:26,260 ha en foreach slinga som går genom varje 675 00:32:26,260 --> 00:32:31,240 av värdena i nyckeln i arrayen. 676 00:32:31,240 --> 00:32:36,180 Så syntaxen av en foreach loop, börjar vi med en array. 677 00:32:36,180 --> 00:32:38,720 678 00:32:38,720 --> 00:32:43,900 Denna $ arr variabel är vår verkliga array att vi definierade i föregående bild 679 00:32:43,900 --> 00:32:47,550 som ett värde som bokstavligen går genom var och en av de värden, 680 00:32:47,550 --> 00:32:50,122 oavsett vi hade en nyckel eller inte. 681 00:32:50,122 --> 00:32:53,080 Och då kan vi göra något med värdet insidan av foreach slingan. 682 00:32:53,080 --> 00:32:57,730 Så återigen, om vi hade en matris som det här created-- 683 00:32:57,730 --> 00:33:03,270 så vi har nyckeln till foo och värdet av bar, nyckeln till baz och värdet av qux-- 684 00:33:03,270 --> 00:33:09,730 vi kan ha en foreach loop som går genom array som nyckelvärde 685 00:33:09,730 --> 00:33:11,900 och sedan göra något med nyckeln och / eller värde. 686 00:33:11,900 --> 00:33:15,980 Men vi gör inte nödvändigtvis alltid måste ha en foreach slingor att 687 00:33:15,980 --> 00:33:19,410 går igenom array som nyckel karta att värdera. 688 00:33:19,410 --> 00:33:26,060 Vi kan gå igenom foreach slinga array som värde. 689 00:33:26,060 --> 00:33:28,990 >> HANNAH Blumberg: Och jag tror att-- var din fråga, vad 690 00:33:28,990 --> 00:33:31,229 är det implicita indexet? 691 00:33:31,229 --> 00:33:31,895 PUBLIK: 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å i princip, om du inte anger en nyckel, det kommer att bli 01. 695 00:33:36,150 --> 00:33:37,140 >> MARIA ZLATKOVA: Ja. 696 00:33:37,140 --> 00:33:41,718 Precis som med C, det är noll indexeras om du inte anger en nyckel. 697 00:33:41,718 --> 00:33:42,384 PUBLIK: Förlåt. 698 00:33:42,384 --> 00:33:43,827 Kan du försöker tala lite högre? 699 00:33:43,827 --> 00:33:45,270 Jag har en liten bit av svårt att höra allt. 700 00:33:45,270 --> 00:33:46,478 >> MARIA ZLATKOVA: Jag är så ledsen. 701 00:33:46,478 --> 00:33:48,439 Ja självklart. 702 00:33:48,439 --> 00:33:50,230 Så vill du mig att gå över detta igen? 703 00:33:50,230 --> 00:33:51,680 Eller är this-- 704 00:33:51,680 --> 00:33:54,930 PUBLIK: Så på föregående slide-- om du kan bara gå tillbaka för en sekund. 705 00:33:54,930 --> 00:33:57,313 MARIA ZLATKOVA: Naturligtvis, sorry. 706 00:33:57,313 --> 00:33:59,237 PUBLIK: Så den andra array här inte 707 00:33:59,237 --> 00:34:04,135 verkar ha ett värde att knappa, ungefär [? orsakssamband. ?] 708 00:34:04,135 --> 00:34:05,343 MARIA ZLATKOVA: Höger, höger. 709 00:34:05,343 --> 00:34:07,608 PUBLIK: Så hur fungerar det när du säger det är allt eller inget. 710 00:34:07,608 --> 00:34:08,969 För mig ser det ut som en [? foo?] redan. 711 00:34:08,969 --> 00:34:10,093 >> MARIA ZLATKOVA: Ja, ja. 712 00:34:10,093 --> 00:34:12,969 Så återigen, detta är en beställt kartan i denna mening 713 00:34:12,969 --> 00:34:15,639 att det förstås, exempelvis indexen 714 00:34:15,639 --> 00:34:20,159 här kan förstås som 0, 1, 2, 3. 715 00:34:20,159 --> 00:34:25,929 Återigen, det är med de index är vår motsvarighet 716 00:34:25,929 --> 00:34:28,980 att ha nycklar mappats på värden. 717 00:34:28,980 --> 00:34:34,710 Så om vår nyckel var 0-- ledsen. 718 00:34:34,710 --> 00:34:36,524 >> HANNAH Blumberg: Nej, Det är krita upp här. 719 00:34:36,524 --> 00:34:36,929 Det är faktiskt riktigt nice. 720 00:34:36,929 --> 00:34:37,460 >> MARIA ZLATKOVA: Det är bra. 721 00:34:37,460 --> 00:34:38,260 OK. 722 00:34:38,260 --> 00:34:49,489 Så återigen, skulle $ arr 0 vara nyckeln till värdet 1. 723 00:34:49,489 --> 00:34:51,138 0 skulle vara nyckeln till värdet 1. 724 00:34:51,138 --> 00:34:51,971 PUBLIK: Jag är ledsen. 725 00:34:51,971 --> 00:34:53,190 Det är osynlig. 726 00:34:53,190 --> 00:34:53,659 >> HANNAH Blumberg: Okej, nevermind. 727 00:34:53,659 --> 00:34:54,980 Krita var en dålig idé. 728 00:34:54,980 --> 00:34:58,030 Jag tar tillbaka det. 729 00:34:58,030 --> 00:35:01,425 Du kan tänka på tangenterna som 0 kartor till värdet 1. 730 00:35:01,425 --> 00:35:02,300 MARIA ZLATKOVA: Ja. 731 00:35:02,300 --> 00:35:04,630 Så det här är 0, är ​​detta ett, två, tre. 732 00:35:04,630 --> 00:35:05,760 Dessa kan vara dina nycklar. 733 00:35:05,760 --> 00:35:10,020 Du kan tänka på dem as-- ja. 734 00:35:10,020 --> 00:35:12,740 Så istället för att ha uttryckliga nycklar, de är 735 00:35:12,740 --> 00:35:17,180 slags förstås som indexen börjar vid 0. 736 00:35:17,180 --> 00:35:21,630 737 00:35:21,630 --> 00:35:24,820 Krita hjälpte inte. 738 00:35:24,820 --> 00:35:25,722 Ja. 739 00:35:25,722 --> 00:35:30,914 >> PUBLIK: För foreach loop, om vi ville se som ett värde, 740 00:35:30,914 --> 00:35:33,245 Det skulle bara automatiskt index till 0? 741 00:35:33,245 --> 00:35:34,120 MARIA ZLATKOVA: Ja. 742 00:35:34,120 --> 00:35:35,745 Det skulle gå igenom vart och ett av värdena. 743 00:35:35,745 --> 00:35:39,130 PUBLIK: [OHÖRBAR] som 0 eller skulle det bara göra 0? 744 00:35:39,130 --> 00:35:43,710 >> MARIA ZLATKOVA: Du skulle behöva att säga som dollartecken och sedan 745 00:35:43,710 --> 00:35:46,266 vissa variabelnamn, värde. 746 00:35:46,266 --> 00:35:47,182 PUBLIK: [OHÖRBAR]. 747 00:35:47,182 --> 00:35:50,048 748 00:35:50,048 --> 00:35:50,964 MARIA ZLATKOVA: Förlåt? 749 00:35:50,964 --> 00:35:52,839 Målgrupp: Tyvärr, jag är bara försöka komma ihåg. 750 00:35:52,839 --> 00:35:57,190 Hur skulle du göra det om du kan göra det automatiskt indexering är bara 0 av? 751 00:35:57,190 --> 00:36:00,780 >> MARIA ZLATKOVA: Så hur skulle du göra det om du inte har särskilda nyckel namn? 752 00:36:00,780 --> 00:36:01,710 >> PUBLIK: Ja. 753 00:36:01,710 --> 00:36:07,820 >> MARIA ZLATKOVA: Du skulle bara define-- bara säga dig själv som en del namn. 754 00:36:07,820 --> 00:36:17,950 Så i dina psets, ni kanske minns foreach $ v $ rader, 755 00:36:17,950 --> 00:36:24,610 Vi skapade själv denna $ rad säger Vi vill gå igenom rad som $ rader. 756 00:36:24,610 --> 00:36:28,360 Även om vi inte har detta uttryckliga $ rader definieras, 757 00:36:28,360 --> 00:36:31,990 vi kunde bara gå och säga detta kan vara vår nyckel, 758 00:36:31,990 --> 00:36:33,615 och bara gå igenom vart och ett av värdena. 759 00:36:33,615 --> 00:36:37,295 760 00:36:37,295 --> 00:36:41,660 >> PUBLIK: Så är värde en ny variabel vi skapar för att lagra [OHÖRBAR]? 761 00:36:41,660 --> 00:36:46,820 762 00:36:46,820 --> 00:36:49,990 >> MARIA ZLATKOVA: Så det är inte till sin natur en ny variabel. 763 00:36:49,990 --> 00:37:00,310 Det är en variabel som hänvisar till insidan av uppsättningen för att var och en av dem. 764 00:37:00,310 --> 00:37:02,060 HANNAH Blumberg: Det är ett nytt variabelnamn. 765 00:37:02,060 --> 00:37:04,018 MARIA ZLATKOVA: Ja, det är ett nytt variabelnamn, 766 00:37:04,018 --> 00:37:06,680 men det är inte inherently-- ja. 767 00:37:06,680 --> 00:37:08,950 Det är bara en ny variabel att du kan göra det. 768 00:37:08,950 --> 00:37:12,680 Så hur gör vi gjorde $ rad som $ rader, rader 769 00:37:12,680 --> 00:37:17,980 var ett nytt variabelnamn som vi skulle kunna skapa i vårt foreach slinga. 770 00:37:17,980 --> 00:37:22,065 Det behöver inte preexist dessförinnan. 771 00:37:22,065 --> 00:37:25,777 >> PUBLIK: Kan du gå igenom logik för varje, med hjälp av exempel där? 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 förlåt. 775 00:37:32,080 --> 00:37:33,780 Här är exempel. 776 00:37:33,780 --> 00:37:34,280 Säker. 777 00:37:34,280 --> 00:37:38,950 Så för varje array-- så det betyder gå till denna samling 778 00:37:38,950 --> 00:37:43,930 som nyckel value-- det kommer att gå igenom denna samling 779 00:37:43,930 --> 00:37:49,480 och först gå och få foo, den nyckel foo och värdet bar. 780 00:37:49,480 --> 00:37:51,570 Och sedan på den andra iteration av for-slingan, 781 00:37:51,570 --> 00:37:55,090 det kommer att gå igenom och ta nyckeln baz och värdet qux. 782 00:37:55,090 --> 00:38:00,512 Och då kan du göra något med endera av dem eller båda av dem. 783 00:38:00,512 --> 00:38:03,488 >> PUBLIK: Så tanken bakom som har en viktig punkt att det värde, 784 00:38:03,488 --> 00:38:07,470 vad gör du i slutändan få tillgång till? 785 00:38:07,470 --> 00:38:10,680 >> MARIA ZLATKOVA: Vad är tanken att ha en nyckel pekar på värde? 786 00:38:10,680 --> 00:38:16,400 Det är bara en annan konvention, annan sätt att gå igenom arrayen 787 00:38:16,400 --> 00:38:22,600 och att kunna komma åt antingen nyckel eller värde eller båda och använda dem. 788 00:38:22,600 --> 00:38:27,100 >> PUBLIK: Vad är roll för besluta att foreach körs i? 789 00:38:27,100 --> 00:38:29,250 Så om vi skulle lägga element till arrayen senare, 790 00:38:29,250 --> 00:38:32,140 skulle de vara de första kallas i foreach array, 791 00:38:32,140 --> 00:38:33,750 eller skulle det vara senare? 792 00:38:33,750 --> 00:38:37,770 >> MARIA ZLATKOVA: Så vad är den ordning som foreach 793 00:38:37,770 --> 00:38:39,210 loop går igenom en rad i? 794 00:38:39,210 --> 00:38:42,220 Den går genom den första element till sista elementet, 795 00:38:42,220 --> 00:38:43,400 till det sista tillagda elementet. 796 00:38:43,400 --> 00:38:48,020 Om du lägger till element senare, skulle de att accessed-- de första elementen skulle 797 00:38:48,020 --> 00:38:51,410 nås som den första elementen i uppsättningen, 798 00:38:51,410 --> 00:38:57,620 och sedan skulle gå igenom var och en av elementen som typ av en ordered-- 799 00:38:57,620 --> 00:39:02,930 inte en ordnad, men det sätt som de har satts i arrayen. 800 00:39:02,930 --> 00:39:06,855 >> PUBLIK: Så nya element sätts senare? 801 00:39:06,855 --> 00:39:10,680 Så de är added-- de ska vara sista som i [? iteration. ?] 802 00:39:10,680 --> 00:39:14,280 >> MARIA ZLATKOVA: Nya inslag can-- i princip, när nya element läggs till, 803 00:39:14,280 --> 00:39:16,520 läggs de till i slutet av arrayen? 804 00:39:16,520 --> 00:39:17,632 >> PUBLIK: Ja. 805 00:39:17,632 --> 00:39:18,840 MARIA ZLATKOVA: Jag tror det. 806 00:39:18,840 --> 00:39:20,850 Ja. 807 00:39:20,850 --> 00:39:24,330 Och sedan med din foreach loop, efter att du har lagt till nya element 808 00:39:24,330 --> 00:39:26,790 och du går igenom dem, de nya inslag skulle 809 00:39:26,790 --> 00:39:30,930 vara accessed-- den nya delen, om det är sattes sist skulle det nås sist. 810 00:39:30,930 --> 00:39:34,416 >> PUBLIK: Kan du bara ge ett exempel något som skulle [OHÖRBAR] 811 00:39:34,416 --> 00:39:37,404 med något med värde som [OHÖRBAR] eller värde, 812 00:39:37,404 --> 00:39:38,910 gillar hur du skulle formatera det? 813 00:39:38,910 --> 00:39:39,785 >> MARIA ZLATKOVA: Visst. 814 00:39:39,785 --> 00:39:42,340 815 00:39:42,340 --> 00:39:46,410 Kan jag ge ett exempel på vad vi skulle göra med värdet? 816 00:39:46,410 --> 00:39:52,440 Så vad ni kanske känner till är att vi har gått igenom en rad 817 00:39:52,440 --> 00:39:55,380 och i princip tryckta vart och ett av elementen, 818 00:39:55,380 --> 00:40:00,910 till exempel, som en del av en ordnad lista eller något som. 819 00:40:00,910 --> 00:40:02,674 Betyder det vettigt eller vill vi att-- 820 00:40:02,674 --> 00:40:04,340 PUBLIK: Kan vi skriva ut dessa värden ut? 821 00:40:04,340 --> 00:40:13,220 MARIA ZLATKOVA: Ja, vi kunde skriva ut och sedan i princip $ värde på grund av att 822 00:40:13,220 --> 00:40:16,570 det specifika värde, skulle vi vara utskrift värdet inne i den. 823 00:40:16,570 --> 00:40:20,150 Så om vi var på vår första iteration det och vi tryckt $ värde, 824 00:40:20,150 --> 00:40:23,775 vi skulle skriva ut bar. 825 00:40:23,775 --> 00:40:27,020 >> PUBLIK: Finns det även för loopar i PHP eller bara foreach slingor? 826 00:40:27,020 --> 00:40:30,430 >> MARIA ZLATKOVA: Det finns även för loopar i PHP. 827 00:40:30,430 --> 00:40:33,399 Och deras logik är oftast samma som vad du har varit vana vid. 828 00:40:33,399 --> 00:40:34,690 PUBLIK: Så dess värde är noll. 829 00:40:34,690 --> 00:40:35,090 MARIA ZLATKOVA: Det är som samma. 830 00:40:35,090 --> 00:40:35,590 Ja. 831 00:40:35,590 --> 00:40:37,747 PUBLIK: Jag kommer bara att fråga. 832 00:40:37,747 --> 00:40:39,695 Så när du deklarerar en array, behöver du inte 833 00:40:39,695 --> 00:40:42,617 att tala om vilken storlek det kommer att vara, vilket innebär att du kan bara 834 00:40:42,617 --> 00:40:44,417 lägga till och ta bort delar [OHÖRBAR]. 835 00:40:44,417 --> 00:40:45,250 MARIA ZLATKOVA: Japp. 836 00:40:45,250 --> 00:40:45,750 Japp. 837 00:40:45,750 --> 00:40:46,251 Exakt. 838 00:40:46,251 --> 00:40:48,875 När vi förklarar en array, vi behöver inte säga vilken storlek det är, 839 00:40:48,875 --> 00:40:51,022 så att vi kan bara lägga till element på den senare också. 840 00:40:51,022 --> 00:40:55,075 841 00:40:55,075 --> 00:40:55,700 Fler frågor? 842 00:40:55,700 --> 00:40:59,870 843 00:40:59,870 --> 00:41:05,950 Så föra PHP och HTML tillsammans, vad vi har seen-- bra, 844 00:41:05,950 --> 00:41:15,130 till exempel, i detta exempel, har vi ett HTML-formulär som har ett inmatningsfält. 845 00:41:15,130 --> 00:41:18,830 >> Och inmatningsfältet är bara namn och sedan har en Skicka-knapp. 846 00:41:18,830 --> 00:41:26,040 Och när du trycker på Skicka knapp, enligt vår hello.php fil, 847 00:41:26,040 --> 00:41:32,130 eftersom metoden för formuläret är få, kan vi komma åt allt som är på namn 848 00:41:32,130 --> 00:41:40,360 genom detta få globala variabel som är-- syntaxen för det är $ _GET. 849 00:41:40,360 --> 00:41:44,520 Och då kan vi komma åt oavsett användarens input inne i denna form under namnet 850 00:41:44,520 --> 00:41:47,410 genom att ange namnet på detta område. 851 00:41:47,410 --> 00:41:51,480 852 00:41:51,480 --> 00:41:55,060 >> Alla andra frågor eller någon frågor om detta specifika exempel? 853 00:41:55,060 --> 00:41:58,275 >> PUBLIK: Var är PHP? 854 00:41:58,275 --> 00:41:59,150 MARIA ZLATKOVA: Här. 855 00:41:59,150 --> 00:42:01,150 Så detta är vår starttagg för PHP. 856 00:42:01,150 --> 00:42:01,530 >> Målgrupp: Åh, höger. 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 = är en förkortning för detta är PHP och bara eko. 860 00:42:09,609 --> 00:42:10,150 PUBLIK: Oh. 861 00:42:10,150 --> 00:42:10,720 MARIA ZLATKOVA: Ja, tyvärr. 862 00:42:10,720 --> 00:42:12,040 Jag borde ha gjort det klart. 863 00:42:12,040 --> 00:42:13,759 >> HANNAH Blumberg: Skriv ut. 864 00:42:13,759 --> 00:42:16,800 MARIA ZLATKOVA: Det är bara funktionen som tillåter oss att skriva ut något. 865 00:42:16,800 --> 00:42:19,795 866 00:42:19,795 --> 00:42:20,420 Bra fråga. 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 >> PUBLIK: Finns det kommer att vara ganska lite manuell kodning av PHP och HTML 870 00:42:31,940 --> 00:42:33,450 på frågesport 1? 871 00:42:33,450 --> 00:42:36,310 872 00:42:36,310 --> 00:42:38,810 MARIA ZLATKOVA: Det kan finnas en hel del tolknings 873 00:42:38,810 --> 00:42:43,330 PHP och HTML, inte nödvändigtvis som en enorm mängd kodning, 874 00:42:43,330 --> 00:42:46,960 även om du kanske måste skriva en foreach loop, men en for-loop. 875 00:42:46,960 --> 00:42:49,790 Vilken som helst av de slingor som vi täcka här är rättvist spel. 876 00:42:49,790 --> 00:42:51,889 Och det är oftast det. 877 00:42:51,889 --> 00:42:53,430 HANNAH Blumberg: Jag skulle vara beredd. 878 00:42:53,430 --> 00:42:57,010 På samma sätt som vi bad dig skriva en massa C funktioner på frågesport 0, 879 00:42:57,010 --> 00:42:59,766 Jag skulle vara beredd att göra densamma i PHP och JavaScript. 880 00:42:59,766 --> 00:43:00,640 MARIA ZLATKOVA: Ja. 881 00:43:00,640 --> 00:43:03,210 HANNAH Blumberg: Jag skulle säga a little-- som vi inte 882 00:43:03,210 --> 00:43:06,251 kommer att göra dig att skriva en enorm HTML sida bara för att det är lite 883 00:43:06,251 --> 00:43:08,240 tråkiga, men du kan ha delar. 884 00:43:08,240 --> 00:43:09,310 Det är helt rättvist spel. 885 00:43:09,310 --> 00:43:11,082 Som små HTML-sida, helt rättvist. 886 00:43:11,082 --> 00:43:11,623 PUBLIK: OK. 887 00:43:11,623 --> 00:43:13,814 Vad sägs om i JavaScript liksom? 888 00:43:13,814 --> 00:43:14,730 HANNAH Blumberg: Ja. 889 00:43:14,730 --> 00:43:15,250 JavaScript verkliga spel. 890 00:43:15,250 --> 00:43:15,635 >> MARIA ZLATKOVA: Ja. 891 00:43:15,635 --> 00:43:16,801 Det är helt rättvist spel. 892 00:43:16,801 --> 00:43:19,280 HANNAH Blumberg: Vi får som i liknande 10 minuter. 893 00:43:19,280 --> 00:43:23,750 >> MARIA ZLATKOVA: SQL, återigen, Structured Query Language. 894 00:43:23,750 --> 00:43:28,651 Den tillåter i princip att vi kan hantera data i en relationsdatabas 895 00:43:28,651 --> 00:43:29,150 system. 896 00:43:29,150 --> 00:43:31,149 Det betyder bara i grund och botten att vi har någonstans 897 00:43:31,149 --> 00:43:37,980 att lagra några data som vi kanske vill användning i en webbplats eller i någon annan form. 898 00:43:37,980 --> 00:43:42,190 Och sedan har vi frågor för att få information från vår databas, 899 00:43:42,190 --> 00:43:44,320 eller för att infoga information i dem. 900 00:43:44,320 --> 00:43:47,560 En hel del av den gemensamma ones-- UPDATE, INSERT, SELECT och DELETE. 901 00:43:47,560 --> 00:43:50,790 >> Så för UPDATE är syntaxen för uppdatering av data i en databas. 902 00:43:50,790 --> 00:43:53,330 903 00:43:53,330 --> 00:43:57,340 Uppdatering tabellen kallas tabell genom att säga SET, 904 00:43:57,340 --> 00:44:04,170 Vi kan ange några värden i alla rader till lika något annat. 905 00:44:04,170 --> 00:44:09,410 Så kan vi också ange vissa specifika poster som vi vill ändra 906 00:44:09,410 --> 00:44:11,240 och det kan vara att använda VAR. 907 00:44:11,240 --> 00:44:16,380 Och vi kan ange att vi bara vill ändra vissa rader där huset för, 908 00:44:16,380 --> 00:44:19,830 om vi hade en tabell med studenter och alla studenter hade hus, 909 00:44:19,830 --> 00:44:24,890 så vi skulle bara ändra vissa värden där ett hus är lika Currier, 910 00:44:24,890 --> 00:44:25,430 till exempel. 911 00:44:25,430 --> 00:44:29,120 912 00:44:29,120 --> 00:44:31,800 >> För INSERT, kan vi sätta in vissa värden i en tabell. 913 00:44:31,800 --> 00:44:35,150 Så INSERT INTO tabell, och sedan värdena 914 00:44:35,150 --> 00:44:39,080 och sedan inom parentes anger vi vilka värden du vill infoga. 915 00:44:39,080 --> 00:44:43,220 Så INSERT INTO tabell, col1 och col2, är värdet val1 och val2. 916 00:44:43,220 --> 00:44:48,930 Så detta införs i grunden en ny rad i en tabell som innehåller värdena 1 och 2 917 00:44:48,930 --> 00:44:50,850 I kolumnerna 1 och 2. 918 00:44:50,850 --> 00:44:54,760 >> Och då kommer vi att gå över ett snabbt exempel på hur detta ser ut 919 00:44:54,760 --> 00:44:56,310 som i vår databas lite. 920 00:44:56,310 --> 00:44:58,685 Men denna sista frågan som jag tror att vi kommer att gå över, 921 00:44:58,685 --> 00:45:01,450 VÄLJ, det bara ger oss att välja data från en tabell 922 00:45:01,450 --> 00:45:03,080 att eventuellt använda den efteråt. 923 00:45:03,080 --> 00:45:05,830 Och sättet vi gör det är vi bara lagra den i någon variabel. 924 00:45:05,830 --> 00:45:07,780 Och då kan vi eventuellt använda den igen. 925 00:45:07,780 --> 00:45:10,260 >> Så SELECT stjärna betyder att välja alla. 926 00:45:10,260 --> 00:45:13,280 Det är bara en förkortning för val alla. 927 00:45:13,280 --> 00:45:19,760 FRÅN tabell där vi ser för vissa specifika förhållanden, 928 00:45:19,760 --> 00:45:22,290 så där kolumn lika någonting, till exempel. 929 00:45:22,290 --> 00:45:24,410 Om vi ​​ville bara markera alla från bordet, 930 00:45:24,410 --> 00:45:28,400 Detta väljer bara alla kolumner och alla rader från en tabell. 931 00:45:28,400 --> 00:45:32,040 >> Och sedan DELETE FROM tabell VAR col lika något, 932 00:45:32,040 --> 00:45:36,440 detta bara tar bort vissa ro från vårt bord 933 00:45:36,440 --> 00:45:38,860 där vi har några särskilda villkor. 934 00:45:38,860 --> 00:45:41,870 I detta fall, de villkor är kolumnen lika något. 935 00:45:41,870 --> 00:45:43,460 Så bara en snabb exempel på detta. 936 00:45:43,460 --> 00:45:49,100 Om vi ​​har denna tabell här och vi infoga den i en tabell, dessa värden, 937 00:45:49,100 --> 00:45:50,400 som skulle sätta in en ny rad. 938 00:45:50,400 --> 00:45:56,380 Och om vi hade auto-ökning, skulle detta bara öka vår ID 0-1 och 2. 939 00:45:56,380 --> 00:46:00,010 >> Om vi ​​valt allt från studenter, det bara tillbaka alla områden och alla rader. 940 00:46:00,010 --> 00:46:02,430 Där år är större än eller lika med 2016, 941 00:46:02,430 --> 00:46:04,390 som bara skulle återvända Hannah och jag själv. 942 00:46:04,390 --> 00:46:08,360 Och sedan om vi bara valt år ID och år från studenter 943 00:46:08,360 --> 00:46:11,710 där huset är Cabot House, som skulle återigen tillbaka Hannah och jag själv. 944 00:46:11,710 --> 00:46:14,430 >> Sen om vi utgår från studenter där namn är lika med Rob, 945 00:46:14,430 --> 00:46:16,760 som skulle ta bort hela raden. 946 00:46:16,760 --> 00:46:19,696 Och sedan om vi sätter namn, UPDATE studenter 947 00:46:19,696 --> 00:46:21,570 SET namn är lika med Daven DÄR hus är lika 948 00:46:21,570 --> 00:46:27,010 Cabot House, som kommer att gå till dessa rader och sedan uppdatera namnet. 949 00:46:27,010 --> 00:46:31,470 >> Och sedan ett par SQL datatyper är CHAR, VARCHAR, INT, och flyta. 950 00:46:31,470 --> 00:46:32,760 Dessa är lovligt byte. 951 00:46:32,760 --> 00:46:36,740 Jag skulle gå igen och se till att du känner 952 00:46:36,740 --> 00:46:40,930 och ha dem på din fusklapp, vad var och en av dessa tecken 953 00:46:40,930 --> 00:46:44,140 har använts för, vad du använt dem på dina psets, 954 00:46:44,140 --> 00:46:48,050 och se till att du är bekant och bekväm med att behöva välja 955 00:46:48,050 --> 00:46:51,450 från olika datatyper i din pset. 956 00:46:51,450 --> 00:46:51,950 Ja. 957 00:46:51,950 --> 00:46:54,300 >> PUBLIK: Vad var det bord förvaras? 958 00:46:54,300 --> 00:46:57,119 Ja, där denna tabell förvaras? 959 00:46:57,119 --> 00:46:59,160 MARIA ZLATKOVA: Tja, just nu, det är inte lagras. 960 00:46:59,160 --> 00:47:00,700 Hur som helst, där denna tabell förvaras? 961 00:47:00,700 --> 00:47:04,503 Men det kan lagras i en SQL-databas. 962 00:47:04,503 --> 00:47:07,330 >> PUBLIK: Och var är SQL-databas? 963 00:47:07,330 --> 00:47:11,200 I datorn, på nätet någonstans, servern? 964 00:47:11,200 --> 00:47:15,000 >> MARIA ZLATKOVA: Det kan vara en antal olika saker. 965 00:47:15,000 --> 00:47:19,690 >> HANNAH Blumberg: Vi har gränssnitt med SQL-tabeller mestadels med phpMyAdmin. 966 00:47:19,690 --> 00:47:22,060 Så vi kunde ställa en server att lagra dem för oss. 967 00:47:22,060 --> 00:47:23,830 Vi kunde lagra dem på vår egen dator. 968 00:47:23,830 --> 00:47:27,950 >> MARIA ZLATKOVA: Det beror bara på hur du vill göra det själv. 969 00:47:27,950 --> 00:47:30,075 Men vi har lagring dem, som Hannah nämnde, 970 00:47:30,075 --> 00:47:31,755 på phpMyAdmin, som är på nätet. 971 00:47:31,755 --> 00:47:36,550 972 00:47:36,550 --> 00:47:39,280 Och sedan hur vi använder PHP och SQL, vi lagrar det 973 00:47:39,280 --> 00:47:43,450 i någon variabel vad vi har efterfrågas för. 974 00:47:43,450 --> 00:47:48,370 >> Så om vi väljer alla av historien där USER_ID lika sessions-ID, 975 00:47:48,370 --> 00:47:53,900 som skulle markera alla rader för viss person som 976 00:47:53,900 --> 00:47:58,327 loggas in från historien bord och sortera dem i rader. 977 00:47:58,327 --> 00:48:00,410 En häftig sak att veta är att CS50: s sökfunktion 978 00:48:00,410 --> 00:48:02,180 skyddar mot SQL injection taggar. 979 00:48:02,180 --> 00:48:07,420 Det betyder bara att det ser den ingång som matas in är korrekt 980 00:48:07,420 --> 00:48:09,920 och att den person som går in i ingångs 981 00:48:09,920 --> 00:48:15,100 inte försöker att mata in några skadliga kod för att antingen släppa våra bord 982 00:48:15,100 --> 00:48:17,305 eller ta bort allt inne i vår databas. 983 00:48:17,305 --> 00:48:20,060 984 00:48:20,060 --> 00:48:23,400 >> En snabb överblick över Model View Controller-modellen, 985 00:48:23,400 --> 00:48:27,360 det är bara ett sätt att organisera och tänker på koden. 986 00:48:27,360 --> 00:48:29,100 Det är återigen en design paradigm. 987 00:48:29,100 --> 00:48:33,380 Vad detta innebär är att vi can-- och det är god praxis 988 00:48:33,380 --> 00:48:37,790 att separera olika delar av vår kod och vad de 989 00:48:37,790 --> 00:48:40,530 styra in dessa tre paradigm. 990 00:48:40,530 --> 00:48:46,700 >> Så vår uppfattning är oftast vår mallar, vår layout, vägen 991 00:48:46,700 --> 00:48:48,260 att vi ställa in hur vår kod ser ut. 992 00:48:48,260 --> 00:48:55,190 Det är främst våra CSS-filer och hur att vi definierade utformningen av vår kod, 993 00:48:55,190 --> 00:48:55,710 i grund och botten. 994 00:48:55,710 --> 00:48:59,280 Vår controller är oftast vad vi har gjort med PHP-filer. 995 00:48:59,280 --> 00:49:03,030 Så återigen, som arbetar med information som vi har 996 00:49:03,030 --> 00:49:06,700 och definierar hur det information används, 997 00:49:06,700 --> 00:49:10,660 och sedan passerar denna information antingen på utsikten eller modell. 998 00:49:10,660 --> 00:49:13,880 Och modellen, det sätt som vi har använt vill säga har varit vår databas, 999 00:49:13,880 --> 00:49:17,510 så där vår information är lagras så det har någonstans 1000 00:49:17,510 --> 00:49:21,490 att leva i, och något av kod som hänför sig till det sätt 1001 00:49:21,490 --> 00:49:25,410 att vi får denna information eller sätt som vi uppdaterar denna information. 1002 00:49:25,410 --> 00:49:28,940 1003 00:49:28,940 --> 00:49:33,200 >> Så i MVC-modellen, HTTP förfrågningar skickas till en webbserver. 1004 00:49:33,200 --> 00:49:36,220 Därefter, styrenheten tolkar begäran från användaren 1005 00:49:36,220 --> 00:49:38,260 och sedan validerar användardata. 1006 00:49:38,260 --> 00:49:41,580 Det är frivilligt att vi har styrenheten kommunicerar 1007 00:49:41,580 --> 00:49:44,000 med en modell, så något som vår databas 1008 00:49:44,000 --> 00:49:47,500 eller någon annan funktionalitet som förmedlar information. 1009 00:49:47,500 --> 00:49:50,340 Och sedan slutligen, styrenheten passerar information på vyn 1010 00:49:50,340 --> 00:49:52,090 så att det kan vara återges och att det kan 1011 00:49:52,090 --> 00:49:55,860 blir synlig för en person åtkomst till webbsidan. 1012 00:49:55,860 --> 00:49:58,440 1013 00:49:58,440 --> 00:50:01,340 >> Några frågor? 1014 00:50:01,340 --> 00:50:01,840 Grymt bra. 1015 00:50:01,840 --> 00:50:04,530 1016 00:50:04,530 --> 00:50:08,469 Så återigen, modellen, dess funktion, återigen, 1017 00:50:08,469 --> 00:50:11,260 är beständig lagring av information, hantera och organisera data. 1018 00:50:11,260 --> 00:50:13,890 Och vad vi har sett så långt är MySQL-databas 1019 00:50:13,890 --> 00:50:16,200 och alla datafiler som kan användas. 1020 00:50:16,200 --> 00:50:20,580 >> View, presentation av information till användaren, UI, eller användargränssnitt. 1021 00:50:20,580 --> 00:50:22,350 Och exempel på detta är HTML. 1022 00:50:22,350 --> 00:50:23,950 Och då kan vi ha minimal PHP. 1023 00:50:23,950 --> 00:50:28,360 Så en for-loop som upprepar över data som skrivs ut 1024 00:50:28,360 --> 00:50:30,720 är en del av den uppfattningen, som motsats till styrenheten. 1025 00:50:30,720 --> 00:50:35,660 Och sedan en hel del av våra PHP-filer falla in i styrenheten kategori. 1026 00:50:35,660 --> 00:50:38,410 Den hanterar bara användarnas önskemål och får information från modellen. 1027 00:50:38,410 --> 00:50:42,880 1028 00:50:42,880 --> 00:50:45,590 >> Hoppa in dokument Object Model, detta bara 1029 00:50:45,590 --> 00:50:47,700 syftar på det sätt HTML dokument organiseras. 1030 00:50:47,700 --> 00:50:51,600 Och de är organiserade i ett träd struktur som har en hierarki. 1031 00:50:51,600 --> 00:50:56,720 Så om vi har tillgång till [OHÖRBAR] representation av dokumentet, 1032 00:50:56,720 --> 00:51:02,750 Vi kan arbeta med dokumentet, i likhet vi manipulera objekt i grund och botten. 1033 00:51:02,750 --> 00:51:06,630 >> Och för att göra detta till en lite tydligare, när 1034 00:51:06,630 --> 00:51:10,540 Vi har en hel del av våra olika taggar svarar 1035 00:51:10,540 --> 00:51:12,590 till olika vägar i vårt träd. 1036 00:51:12,590 --> 00:51:17,070 Och sedan för detta exempel, vi har start dokumentnod. 1037 00:51:17,070 --> 00:51:20,010 Vi har alltså vår HTML nod som delas upp i huvud och kropp. 1038 00:51:20,010 --> 00:51:22,810 Head har titeln och sedan Titeln innehåller hej, värld. 1039 00:51:22,810 --> 00:51:24,860 Och vår kropp innehåller bara Hej, världen såväl. 1040 00:51:24,860 --> 00:51:28,700 1041 00:51:28,700 --> 00:51:31,900 >> Så några frågor om någon av saker som vi täckt hittills? 1042 00:51:31,900 --> 00:51:35,891 Och om inte, Hannah kommer ta över med JavaScript. 1043 00:51:35,891 --> 00:51:36,390 Grymt bra. 1044 00:51:36,390 --> 00:51:37,473 >> HANNAH Blumberg: OK, cool. 1045 00:51:37,473 --> 00:51:40,980 Om något kommer upp med PHP eller HTML, eller någon av de saker Maria omfattas, 1046 00:51:40,980 --> 00:51:42,700 Vi kan alltid pausa. 1047 00:51:42,700 --> 00:51:46,430 Vi gör bättre på gång, så häftigt. 1048 00:51:46,430 --> 00:51:48,770 Och bara för att gå tillbaka riktigt snabbt till detta, 1049 00:51:48,770 --> 00:51:51,010 om man tittar på varje senaste årets examen, detta 1050 00:51:51,010 --> 00:51:54,120 kommer upp either-- här är vissa HTML, gör detta diagram. 1051 00:51:54,120 --> 00:51:58,380 Eller här är det här diagrammet, göra några HTML, så absolut öva det. 1052 00:51:58,380 --> 00:52:01,500 Och då är det en garanterad fråga som du kan få rätt. 1053 00:52:01,500 --> 00:52:02,000 Häftigt. 1054 00:52:02,000 --> 00:52:04,510 Så låt oss tala om JavaScript och hur det är lite 1055 00:52:04,510 --> 00:52:09,130 skiljer sig från språk som PHP och C, de två språken som vi såg i förväg. 1056 00:52:09,130 --> 00:52:10,780 Så nummer ett, det är löst skrivit. 1057 00:52:10,780 --> 00:52:14,630 Det är som PHP, men till skillnad från C. 1058 00:52:14,630 --> 00:52:15,890 >> Det är ett tolkat språk. 1059 00:52:15,890 --> 00:52:19,870 Återigen, det är som PHP, till skillnad från C. Och detta 1060 00:52:19,870 --> 00:52:24,630 kommer att tillåta oss att use-- det fungerar riktigt bra med webbsidor. 1061 00:52:24,630 --> 00:52:28,350 Det kommer att ge oss möjlighet att manipulera innehållet och hur det ser ut 1062 00:52:28,350 --> 00:52:30,300 och vad den gör. 1063 00:52:30,300 --> 00:52:32,330 >> Vi kommer att se en liten bit av Ajax. 1064 00:52:32,330 --> 00:52:36,140 Det ger oss möjlighet att kommunicera asynkront med olika servrar 1065 00:52:36,140 --> 00:52:37,950 och få information. 1066 00:52:37,950 --> 00:52:42,820 Och det är det som verkligen separerar JavaScript från PHP och C 1067 00:52:42,820 --> 00:52:45,590 är att det är på klientsidan. 1068 00:52:45,590 --> 00:52:49,860 Både PHP och C är vanligtvis på serversidan. 1069 00:52:49,860 --> 00:52:51,960 >> För det mesta och nästan helt vad 1070 00:52:51,960 --> 00:52:53,900 vi har sett, åtminstone i denna klass, JavaScript 1071 00:52:53,900 --> 00:52:57,040 verkar på klientsidan, vilket innebär att webbläsaren är faktiskt 1072 00:52:57,040 --> 00:52:58,597 ansvarar för driften det. 1073 00:52:58,597 --> 00:53:01,180 Och det betyder att vi inte måste interagera med servern. 1074 00:53:01,180 --> 00:53:04,380 Så det betyder att det kan vara en mycket snabbare eftersom det är faktiskt bara det är Chrome, 1075 00:53:04,380 --> 00:53:10,420 Det är Safari, det är Firefox, vad du Använd faktiskt kör JavaScript. 1076 00:53:10,420 --> 00:53:12,290 >> PUBLIK: Vad betyder asynkron detta? 1077 00:53:12,290 --> 00:53:13,620 >> HANNAH Blumberg: Ah, vad betyder asynkront detta? 1078 00:53:13,620 --> 00:53:14,250 Bra fråga. 1079 00:53:14,250 --> 00:53:17,890 Asynkront means-- väl, innehållet i vilken 1080 00:53:17,890 --> 00:53:22,140 vi använder den är, OK, vi skapar en webbsida 1081 00:53:22,140 --> 00:53:23,860 och vi måste få lite information. 1082 00:53:23,860 --> 00:53:28,250 Så med exempel på mashup, viss information som vi kanske vill 1083 00:53:28,250 --> 00:53:30,580 är artikelrubriker. 1084 00:53:30,580 --> 00:53:33,330 Nu, could-- vi ett alternativ är att göra det synkront 1085 00:53:33,330 --> 00:53:37,940 och det betyder låter stopp, gå och hämta artikeln, 1086 00:53:37,940 --> 00:53:41,275 få artikeln tillbaka, och sedan render, men det skulle vara väldigt långsam. 1087 00:53:41,275 --> 00:53:44,150 Det skulle vara en dålig användarupplevelse eftersom du skulle bara sitta 1088 00:53:44,150 --> 00:53:46,630 där väntar på att något ska svara. 1089 00:53:46,630 --> 00:53:50,020 >> Asynkront innebär att vi ska fortsätta gå om vår verksamhet, 1090 00:53:50,020 --> 00:53:52,529 rendering sidan och Vi skickar ut en förfrågan 1091 00:53:52,529 --> 00:53:54,570 som är typ att gå till hända i bakgrunden. 1092 00:53:54,570 --> 00:53:57,610 Jag tror att vi använder exemplet i föreläsning att ringa Rob och sade: 1093 00:53:57,610 --> 00:53:59,980 hej, kan du slå upp det här för mig och komma tillbaka till mig, 1094 00:53:59,980 --> 00:54:02,870 i stället för bara mig väntar på telefonen. 1095 00:54:02,870 --> 00:54:07,020 Så asynkront betyder det händer i bakgrunden ifrån oss 1096 00:54:07,020 --> 00:54:08,676 parallellt. 1097 00:54:08,676 --> 00:54:10,400 >> Bra fråga. 1098 00:54:10,400 --> 00:54:11,830 Någonting annat? 1099 00:54:11,830 --> 00:54:12,330 Bra. 1100 00:54:12,330 --> 00:54:15,020 Vi hoppar mycket mer i asynkrona förfrågningar med Ajax. 1101 00:54:15,020 --> 00:54:18,287 >> PUBLIK: Gör JavaScript-- där gör det falla med model-view-controller? 1102 00:54:18,287 --> 00:54:19,620 HANNAH Blumberg: Bra fråga. 1103 00:54:19,620 --> 00:54:23,320 Var gör JavaScript falla med model-view-controller? 1104 00:54:23,320 --> 00:54:23,930 Hm. 1105 00:54:23,930 --> 00:54:28,350 Jag antar att det kan fall-- så vi brukar inte 1106 00:54:28,350 --> 00:54:31,340 vilja trycka ihop den till att paradigm, men jag antar att jag skulle säga, 1107 00:54:31,340 --> 00:54:34,280 OK, så JavaScript faktiskt kommer att tillåta 1108 00:54:34,280 --> 00:54:37,587 oss att samla in data, tolka data, faktiskt gör 1109 00:54:37,587 --> 00:54:38,920 meningsfulla saker med data. 1110 00:54:38,920 --> 00:54:41,100 På så sätt är det mycket kontroll liknande. 1111 00:54:41,100 --> 00:54:43,900 >> Men det kommer också att ge oss möjlighet att visa saker och utskrifts saker. 1112 00:54:43,900 --> 00:54:47,021 På så sätt är det mycket view-liknande. 1113 00:54:47,021 --> 00:54:47,520 Ja. 1114 00:54:47,520 --> 00:54:51,710 Så det är ungefär som PHP i där det kan typ av vara både och. 1115 00:54:51,710 --> 00:54:53,330 Bra fråga. 1116 00:54:53,330 --> 00:54:55,209 Någonting annat? 1117 00:54:55,209 --> 00:54:56,000 Okej, awesome. 1118 00:54:56,000 --> 00:54:57,120 Flytta höger längs. 1119 00:54:57,120 --> 00:54:59,110 >> Så låt oss se ett exempel hur vi kan använda 1120 00:54:59,110 --> 00:55:02,250 JavaScript en av våra webb-program. 1121 00:55:02,250 --> 00:55:05,680 Så jag ska överväga detta index.html med ett gäng HTML. 1122 00:55:05,680 --> 00:55:08,800 Och jag vill att du fokusera på är det här skriptet taggen. 1123 00:55:08,800 --> 00:55:13,280 Och det säger, OK, jag vill köra några JavaScript och här är där den lever. 1124 00:55:13,280 --> 00:55:15,400 Den lever i hello.js. 1125 00:55:15,400 --> 00:55:21,120 >> Och så mycket som CSS, vi kunde sätta JavaScript i HTML. 1126 00:55:21,120 --> 00:55:24,000 Varför skulle vi vill skilja ut? 1127 00:55:24,000 --> 00:55:24,500 Ja. 1128 00:55:24,500 --> 00:55:25,486 >> PUBLIK: Lättare att skriva om? 1129 00:55:25,486 --> 00:55:26,402 >> HANNAH Blumberg: Ja. 1130 00:55:26,402 --> 00:55:28,450 Det är lättare att använda över olika webbsidor. 1131 00:55:28,450 --> 00:55:29,980 Det håller saker renare. 1132 00:55:29,980 --> 00:55:32,090 Det är bara bra metoder. 1133 00:55:32,090 --> 00:55:32,590 Grymt bra. 1134 00:55:32,590 --> 00:55:33,930 Bra svar. 1135 00:55:33,930 --> 00:55:36,690 Så bra, så detta kommer vara vår index.html. 1136 00:55:36,690 --> 00:55:39,430 Och så här nere är vår lilla JavaScript-fil. 1137 00:55:39,430 --> 00:55:42,410 >> Och allt det står är alert Hej världen. 1138 00:55:42,410 --> 00:55:46,040 Så vad händer är när denna sida renders-- 1139 00:55:46,040 --> 00:55:49,680 så om du gå till valfri webbplats Detta är-- allt som kommer att hända 1140 00:55:49,680 --> 00:55:53,330 det kommer att säga, OK, jag är kommer att köra denna JavaScript-kod. 1141 00:55:53,330 --> 00:55:56,370 Och detta JavaScript-kod bara säger alert Hej, värld. 1142 00:55:56,370 --> 00:55:59,090 Så jag kommer att få detta vänlig liten pop-up. 1143 00:55:59,090 --> 00:56:00,360 >> Häftigt? 1144 00:56:00,360 --> 00:56:04,746 Det är ungefär som vår allra första Javascriptprogram, vår Hej världen. 1145 00:56:04,746 --> 00:56:07,690 1146 00:56:07,690 --> 00:56:12,190 Låt oss titta lite mer om vad syntax JavaScript ser ut. 1147 00:56:12,190 --> 00:56:16,330 Och i synnerhet, låt oss jämföra det med C och PHP, som vi har sett förut. 1148 00:56:16,330 --> 00:56:20,610 >> I JavaScript, vi kommer att ha var, namnet på variabeln, och sedan 1149 00:56:20,610 --> 00:56:21,690 dess faktiska värde. 1150 00:56:21,690 --> 00:56:26,170 Och vi inte anger en typ, bara liknande i PHP, men mycket skillnad i C. 1151 00:56:26,170 --> 00:56:28,850 Så till exempel, om vi ville att lagra värdet 50, 1152 00:56:28,850 --> 00:56:32,490 i C, skulle vi säga, hey, C, jag vill ha en heltal, 1153 00:56:32,490 --> 00:56:35,076 Jag kommer att kalla det i, och dess värde är 50. 1154 00:56:35,076 --> 00:56:36,450 I PHP, det är lite lättare. 1155 00:56:36,450 --> 00:56:41,880 Vi säger, hej, jag vill ha en variabel kallas i och dess värde är 50. 1156 00:56:41,880 --> 00:56:45,890 På samma sätt, i JavaScript, vi säger hej, vill jag en variabel som heter i, 1157 00:56:45,890 --> 00:56:47,080 dess värde är 50. 1158 00:56:47,080 --> 00:56:52,140 Varje senare tidpunkt som jag använder i, jag behöver inte skriva var. 1159 00:56:52,140 --> 00:56:53,810 Det är bara i från den punkten. 1160 00:56:53,810 --> 00:56:58,660 På samma sätt, i C, där när vi säger int i, vi bara använda i. 1161 00:56:58,660 --> 00:57:00,340 Häftigt? 1162 00:57:00,340 --> 00:57:01,800 Okej. 1163 00:57:01,800 --> 00:57:03,710 >> Går vidare till loopar, lyckligtvis dessa nästan 1164 00:57:03,710 --> 00:57:06,720 titta exactly-- Jag tror att de är exakt samma som vad 1165 00:57:06,720 --> 00:57:09,799 slingor kommer att se ut i något som C där din för loop 1166 00:57:09,799 --> 00:57:11,840 kommer att ha tre parts-- en initiering, 1167 00:57:11,840 --> 00:57:13,640 ett tillstånd, och en uppdatering. 1168 00:57:13,640 --> 00:57:15,340 En while-slinga, ser det exakt samma. 1169 00:57:15,340 --> 00:57:16,390 Vi ger bara det ett villkor. 1170 00:57:16,390 --> 00:57:18,264 >> Och en gör while-slinga, igen, exakt samma. 1171 00:57:18,264 --> 00:57:20,190 Vi ger det ett villkor. 1172 00:57:20,190 --> 00:57:24,510 Låt oss säga att jag ville upprepa over-- Jag ville göra något fem gånger. 1173 00:57:24,510 --> 00:57:27,840 I C, kan vi skriva för init i är lika med 0. 1174 00:57:27,840 --> 00:57:30,480 i är mindre än 5, i ++. 1175 00:57:30,480 --> 00:57:34,240 Enda skillnaden, i JavaScript, istället för att säga int i lika med 0, 1176 00:57:34,240 --> 00:57:36,820 vi säger var i lika med 0. 1177 00:57:36,820 --> 00:57:38,370 Vacker. 1178 00:57:38,370 --> 00:57:41,320 Det är den enda skillnaden. 1179 00:57:41,320 --> 00:57:43,200 Eventuella frågor om något av detta? 1180 00:57:43,200 --> 00:57:44,160 Ja. 1181 00:57:44,160 --> 00:57:48,480 >> PUBLIK: Så i PHP, det är samma sak, utom utan som en variabel? 1182 00:57:48,480 --> 00:57:49,564 Eller var det en var exempel? 1183 00:57:49,564 --> 00:57:50,480 HANNAH Blumberg: Ja. 1184 00:57:50,480 --> 00:57:52,310 Så i PHP, det kommer att vara ett dollartecken. 1185 00:57:52,310 --> 00:57:59,450 Så det kommer att $ i jämlikar 0, jag är $ mindre än 5, $ i ++. 1186 00:57:59,450 --> 00:58:02,490 Bra fråga. 1187 00:58:02,490 --> 00:58:04,570 >> Nu ska vi prata om funktionsdeklarationer. 1188 00:58:04,570 --> 00:58:07,010 I C, när vi förklarade en funktionen, vi gav den ett namn 1189 00:58:07,010 --> 00:58:08,490 och vi gav det vissa parametrar. 1190 00:58:08,490 --> 00:58:10,670 Och i början skrev vi typen. 1191 00:58:10,670 --> 00:58:12,440 I JavaScript, allt vi behöver göra är att skriva 1192 00:58:12,440 --> 00:58:15,080 sökordet funktion som säger hej, JavaScript, 1193 00:58:15,080 --> 00:58:16,570 Jag är på väg att definiera en funktion. 1194 00:58:16,570 --> 00:58:18,520 >> I detta fall har det namn summa. 1195 00:58:18,520 --> 00:58:20,820 Och det tar två argument, x och y. 1196 00:58:20,820 --> 00:58:23,280 Lägg märke till att vi inte bryr om vilka typer av x och y. 1197 00:58:23,280 --> 00:58:26,280 Och precis som C, vi har detta sökord avkastning, 1198 00:58:26,280 --> 00:58:29,140 så att vi kan göra något som retur x och y. 1199 00:58:29,140 --> 00:58:32,540 >> Och nu när vi har skrivit denna första funktion, kan vi använda summan som helst. 1200 00:58:32,540 --> 00:58:34,740 Och det är helt bra. 1201 00:58:34,740 --> 00:58:37,530 En riktigt cool sak om JavaScript som är mycket olik C 1202 00:58:37,530 --> 00:58:40,770 är att funktioner kan behandlas som värden. 1203 00:58:40,770 --> 00:58:43,895 Så vi kan göra något liknande här där jag antar att jag täcker detta up-- 1204 00:58:43,895 --> 00:58:46,400 Jag täckte upp var sum part-- och vi sa bara 1205 00:58:46,400 --> 00:58:49,850 Funktionen xy lika med retur x plus y. 1206 00:58:49,850 --> 00:58:52,140 >> Det är vad som skulle kunna kallas en anonym funktion. 1207 00:58:52,140 --> 00:58:53,920 Det är en funktion utan namn. 1208 00:58:53,920 --> 00:58:56,290 Detta säger funktion summa, bla, bla, bla, 1209 00:58:56,290 --> 00:58:59,340 detta bara skulle säga funktion. 1210 00:58:59,340 --> 00:59:02,020 Men nu, även om jag har Detta anonym funktion, 1211 00:59:02,020 --> 00:59:03,630 denna funktion är egentligen bara ett värde. 1212 00:59:03,630 --> 00:59:05,160 Vi kan behandla det som ett värde. 1213 00:59:05,160 --> 00:59:10,180 >> Så vi kan spara den i en variabel samma sätt skulle vi kunna lagra 50 i en variabel. 1214 00:59:10,180 --> 00:59:13,870 Så vi kan säga, OK, vill jag variabel, det kallas summa, 1215 00:59:13,870 --> 00:59:16,011 och det är denna funktion. 1216 00:59:16,011 --> 00:59:18,760 Så dessa två saker är faktiskt kommer att göra exakt samma sak, 1217 00:59:18,760 --> 00:59:21,576 men syntaxen är lite annorlunda och typ av en rolig anmärkning. 1218 00:59:21,576 --> 00:59:22,076 Ja. 1219 00:59:22,076 --> 00:59:25,548 >> PUBLIK: Så du skulle kunna kalla en funktion som var anonyma genom att säga, 1220 00:59:25,548 --> 00:59:28,244 sum konsoler 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 kalla detta anonym fungerar på samma sätt. 1223 00:59:32,280 --> 00:59:33,350 Du skulle göra summan (2, 5) ;. 1224 00:59:33,350 --> 00:59:36,180 1225 00:59:36,180 --> 00:59:38,200 Det skulle vara helt bra. 1226 00:59:38,200 --> 00:59:41,575 >> Om jag inte gjorde var sum lika funktion, om jag bara bort 1227 00:59:41,575 --> 00:59:45,480 this-- Jag vet att det är på min hand, men låtsas att jag raderade this-- sedan 1228 00:59:45,480 --> 00:59:46,964 denna funktion är typ av bara borta. 1229 00:59:46,964 --> 00:59:49,630 Du kan aldrig använda den igen eftersom du inte har ett namn för det. 1230 00:59:49,630 --> 00:59:53,497 Det är svårt att se något du vet inte vad jag ska ringa. 1231 00:59:53,497 --> 00:59:54,080 Bra fråga. 1232 00:59:54,080 --> 00:59:54,580 Ja. 1233 00:59:54,580 --> 00:59:59,580 >> PUBLIK: Kan du referera summa i andra platser med värdet på x plus y? 1234 00:59:59,580 --> 01:00:01,940 >> HANNAH Blumberg: Kan du referensbelopp på andra ställen 1235 01:00:01,940 --> 01:00:03,360 med värdet x plus y? 1236 01:00:03,360 --> 01:00:05,130 Jag är inte helt säker på vad du menar. 1237 01:00:05,130 --> 01:00:10,582 >> PUBLIK: Så dina tidigare halv anonym Funktionen är summan är lika med detta 1238 01:00:10,582 --> 01:00:14,452 anonym funktion, så summan är nu en variabel som du can-- 1239 01:00:14,452 --> 01:00:15,410 HANNAH Blumberg: Rätt. 1240 01:00:15,410 --> 01:00:18,980 Så summan är variabeln, men det är actually-- 1241 01:00:18,980 --> 01:00:23,770 så summan är en variabel vars värde är funktionen. 1242 01:00:23,770 --> 01:00:27,030 Så det är en funktion, som är typ av en konstig sak att svepa huvudet runt 1243 01:00:27,030 --> 01:00:29,880 eftersom vi har spelat med C och du kan inte göra det i C. 1244 01:00:29,880 --> 01:00:32,679 Men nu kan vi kalla sammanfatta samma sätt som vi skulle kunna kalla summan här. 1245 01:00:32,679 --> 01:00:33,220 PUBLIK: OK. 1246 01:00:33,220 --> 01:00:33,970 HANNAH Blumberg: Ja. 1247 01:00:33,970 --> 01:00:34,553 Bra fråga. 1248 01:00:34,553 --> 01:00:35,438 Ja. 1249 01:00:35,438 --> 01:00:39,862 >> PUBLIK: Så vi inte använder prototyper i PHP eller JavaScript? 1250 01:00:39,862 --> 01:00:42,070 HANNAH Blumberg: Nej, vi behöver inte använda prototyper, 1251 01:00:42,070 --> 01:00:43,880 speciellt i JavaScript. 1252 01:00:43,880 --> 01:00:49,380 Så en dålig praxis sak som jag är kommer att säga att du inte bör göra 1253 01:00:49,380 --> 01:00:52,620 är att du inte behöver skriva var i = 50. 1254 01:00:52,620 --> 01:00:54,840 Du kan bara börja göra i = 50. 1255 01:00:54,840 --> 01:00:57,490 Och skulle bara göra i en global variabel. 1256 01:00:57,490 --> 01:01:00,550 >> Det är mycket dålig praxis att aldrig säga uttryckligen var i, 1257 01:01:00,550 --> 01:01:01,800 men det är något du kan göra. 1258 01:01:01,800 --> 01:01:03,591 Tolken är inte kommer att skrika på dig. 1259 01:01:03,591 --> 01:01:05,920 JavaScript är ganska liknande, du kan göra vad du vill. 1260 01:01:05,920 --> 01:01:09,301 1261 01:01:09,301 --> 01:01:09,800 Åh förlåt. 1262 01:01:09,800 --> 01:01:10,300 Det finns två. 1263 01:01:10,300 --> 01:01:12,150 I orange byxor. 1264 01:01:12,150 --> 01:01:13,190 Varsågod. 1265 01:01:13,190 --> 01:01:14,390 >> Målgrupp: Nej, du går först. 1266 01:01:14,390 --> 01:01:16,765 >> Målgrupp: Nej, jag bara säga Jag hade inte min hand upp. 1267 01:01:16,765 --> 01:01:20,248 1268 01:01:20,248 --> 01:01:20,748 OK. 1269 01:01:20,748 --> 01:01:26,604 Så om du skulle ringa den första gången, nu summera, 1270 01:01:26,604 --> 01:01:29,864 vi kallar det på samma sätt, x, y, som varje gång? 1271 01:01:29,864 --> 01:01:30,780 HANNAH Blumberg: Ja. 1272 01:01:30,780 --> 01:01:32,572 Så dessa två väsentligen göra samma sak. 1273 01:01:32,572 --> 01:01:35,113 PUBLIK: Och vad är fördelen att använda det ena eller det andra? 1274 01:01:35,113 --> 01:01:37,500 HANNAH Blumberg: Ingen fördel för att använda ett eller det andra. 1275 01:01:37,500 --> 01:01:40,080 Jag ville bara visa dig två olika delar av syntax. 1276 01:01:40,080 --> 01:01:42,770 Många gånger när anonym funktioner gör har ett syfte 1277 01:01:42,770 --> 01:01:48,220 är om argumentet till en annan Funktionen ska vara en funktion. 1278 01:01:48,220 --> 01:01:50,600 Och vi ser att i bara en sekund med Ajax. 1279 01:01:50,600 --> 01:01:53,577 >> Så om det inte göra någon mening, förvara den på baksidan av huvudet. 1280 01:01:53,577 --> 01:01:55,660 Det är där en anonym Funktionen kan vara användbar 1281 01:01:55,660 --> 01:01:58,284 eftersom det inte är verkligen värt ge den ett namn eftersom vi är bara 1282 01:01:58,284 --> 01:01:59,443 kommer att använda den en gång. 1283 01:01:59,443 --> 01:02:00,370 Ja. 1284 01:02:00,370 --> 01:02:03,635 >> PUBLIK: Om x och y förändring senare på, kommer att samman förändras liksom? 1285 01:02:03,635 --> 01:02:06,510 HANNAH Blumberg: Om x och y förändring senare, kommer att samman förändras liksom? 1286 01:02:06,510 --> 01:02:08,840 Så det här är faktiskt jag tror att något som är, 1287 01:02:08,840 --> 01:02:12,260 igen, det känns bara väldigt annorlunda från C. Detta är inte ett värde. 1288 01:02:12,260 --> 01:02:13,620 Det är inte 5. 1289 01:02:13,620 --> 01:02:15,550 Det är bara själva funktionen. 1290 01:02:15,550 --> 01:02:19,110 Så snart som du ger det parametrar, Du kommer att faktiskt beräkna ett värde. 1291 01:02:19,110 --> 01:02:21,193 >> MARIA ZLATKOVA: Och sedan Du kan anropa funktionen 1292 01:02:21,193 --> 01:02:23,272 och använda den för att få ett visst värde. 1293 01:02:23,272 --> 01:02:24,230 HANNAH Blumberg: Rätt. 1294 01:02:24,230 --> 01:02:25,250 Exakt. 1295 01:02:25,250 --> 01:02:25,863 Ja. 1296 01:02:25,863 --> 01:02:27,946 >> PUBLIK: Så om du bara förvara den i variabeln, 1297 01:02:27,946 --> 01:02:31,430 som var x lika summan av två values-- 1298 01:02:31,430 --> 01:02:32,420 >> HANNAH Blumberg: Ja. 1299 01:02:32,420 --> 01:02:35,320 Så du kan bara göra var sum lika summan av två värden. 1300 01:02:35,320 --> 01:02:37,670 Ja. 1301 01:02:37,670 --> 01:02:38,680 Alla andra frågor? 1302 01:02:38,680 --> 01:02:39,642 Ja. 1303 01:02:39,642 --> 01:02:42,047 >> PUBLIK: Men skulle det förvirra summa och summa? 1304 01:02:42,047 --> 01:02:45,062 Som om du ringer din variabel summa, skulle du kalla funktionen summa? 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 Om du gjorde något som är lika summa 2, 5 summa? 1308 01:02:51,253 --> 01:02:53,170 >> PUBLIK: Ja. 1309 01:02:53,170 --> 01:02:56,465 >> HANNAH Blumberg: Jag tror att skulle skriva värdet av summan. 1310 01:02:56,465 --> 01:02:59,290 Så en annan intressant sak om JavaScript 1311 01:02:59,290 --> 01:03:02,950 är att en enda variabel kan ta på en massa olika typer. 1312 01:03:02,950 --> 01:03:03,790 Dålig praxis. 1313 01:03:03,790 --> 01:03:06,280 Du bör inte göra något precis vad du just sa. 1314 01:03:06,280 --> 01:03:10,240 >> Men i C, om jag är inställd är lika med ett heltal, 1315 01:03:10,240 --> 01:03:13,570 Vi vet att det är aldrig kommer att bli en sträng. 1316 01:03:13,570 --> 01:03:15,670 Detta är inte fallet i JavaScript. 1317 01:03:15,670 --> 01:03:17,770 Ja, bra fråga. 1318 01:03:17,770 --> 01:03:20,151 Någonting annat? 1319 01:03:20,151 --> 01:03:20,650 Okej. 1320 01:03:20,650 --> 01:03:21,850 Gör allt rätt i tid. 1321 01:03:21,850 --> 01:03:23,050 Att hålla igång. 1322 01:03:23,050 --> 01:03:25,200 Okej. 1323 01:03:25,200 --> 01:03:27,780 >> Om vi ​​tittar på en matris i JavaScript, här är 1324 01:03:27,780 --> 01:03:30,250 en snabb exempel på en array med strängar. 1325 01:03:30,250 --> 01:03:31,967 Och arrayer kan växa dynamiskt. 1326 01:03:31,967 --> 01:03:33,675 De har inte en fast storlek på samma sätt 1327 01:03:33,675 --> 01:03:37,990 att de gör i C. Vi kan få tillgång till element med bara hakparenteserna. 1328 01:03:37,990 --> 01:03:41,720 >> Det ser ut ungefär som PHP och en hel del som C, där vi kan säga i detta fall, 1329 01:03:41,720 --> 01:03:48,360 om jag ville ordet JavaScript, skulle jag gör arr hakparenteser med en 0, 1, 2. 1330 01:03:48,360 --> 01:03:51,450 1331 01:03:51,450 --> 01:03:55,390 Och sedan om du kommer ihåg i C när vi ville få längden på en array, 1332 01:03:55,390 --> 01:03:56,820 Det var verkligen irriterande. 1333 01:03:56,820 --> 01:03:58,460 Men i JavaScript, super lätt. 1334 01:03:58,460 --> 01:03:59,910 Allt vi gör, .length. 1335 01:03:59,910 --> 01:04:01,120 Ger det längderna. 1336 01:04:01,120 --> 01:04:01,892 Det är allt. 1337 01:04:01,892 --> 01:04:03,140 >> PUBLIK: Det är enkelt. 1338 01:04:03,140 --> 01:04:05,306 >> HANNAH Blumberg: Ja, gör ditt liv mycket enklare. 1339 01:04:05,306 --> 01:04:08,950 1340 01:04:08,950 --> 01:04:11,560 OK, object-- inte där. 1341 01:04:11,560 --> 01:04:15,480 Objekt i JavaScript känsla en hel del som structs i C 1342 01:04:15,480 --> 01:04:18,280 och associativa arrayer i PHP. 1343 01:04:18,280 --> 01:04:20,270 Så vad vi har sett en massa är JSON, som 1344 01:04:20,270 --> 01:04:23,150 står för JavaScript Object Notation. 1345 01:04:23,150 --> 01:04:25,550 Och det är i grunden ett sätt att strukturera våra data. 1346 01:04:25,550 --> 01:04:27,880 >> Så låt oss se ett exempel, förmodligen det enklaste. 1347 01:04:27,880 --> 01:04:32,540 Så här är ett exempel på ett objekt som lagrar klassen, CS50. 1348 01:04:32,540 --> 01:04:37,790 Och när jag säger klass, menar jag naturligtvis, inte like-- ja, naturligtvis, CS50. 1349 01:04:37,790 --> 01:04:40,730 Och du ser att allt i objektet 1350 01:04:40,730 --> 01:04:43,526 kommer att innehållas i klammerparenteser. 1351 01:04:43,526 --> 01:04:48,260 >> Och vi börjar associera fältnamn eller nycklar med olika värden. 1352 01:04:48,260 --> 01:04:52,920 Så du kan börja se hur denna typ av känns som en associativ array i PHP. 1353 01:04:52,920 --> 01:04:57,450 Så vi kommer att associera fältet eller nyckelnamnet, naturligtvis, med strängen, 1354 01:04:57,450 --> 01:04:58,510 CS50. 1355 01:04:58,510 --> 01:04:59,940 >> Vi kommer att ha en instruktör. 1356 01:04:59,940 --> 01:05:00,940 Vi kommer att ha TF. 1357 01:05:00,940 --> 01:05:05,240 Vi kommer att ha antal psets och vi kommer att ha registrerats. 1358 01:05:05,240 --> 01:05:10,720 Och en cool sak att notera är alla dessa saker har olika typer, 1359 01:05:10,720 --> 01:05:12,020 och det är helt bra. 1360 01:05:12,020 --> 01:05:15,330 >> Det är bra för ett objekt, i själva verket, det är antagligen förväntas för ett objekt 1361 01:05:15,330 --> 01:05:19,620 att ha en kombination av strängar och siffror och Booleans och arrayer 1362 01:05:19,620 --> 01:05:23,420 och vad du kanske vill ha inne i objektet. 1363 01:05:23,420 --> 01:05:28,570 Och observera att dessa kommer att vara namn eller nycklar och då vi bara 1364 01:05:28,570 --> 01:05:30,300 ställa in den lika med en liten kolon. 1365 01:05:30,300 --> 01:05:32,015 >> PUBLIK: Vad exakt betyder JSON detta? 1366 01:05:32,015 --> 01:05:33,890 HANNAH Blumberg: Vad exakt betyder JSON detta? 1367 01:05:33,890 --> 01:05:36,470 JSON bara står för JavaScript Object Notation. 1368 01:05:36,470 --> 01:05:38,430 Det är bara ett sätt att formatering. 1369 01:05:38,430 --> 01:05:40,040 Ja. 1370 01:05:40,040 --> 01:05:41,800 Det är ett sätt att formatera våra data. 1371 01:05:41,800 --> 01:05:43,620 >> I C, är det structs. 1372 01:05:43,620 --> 01:05:45,800 I PHP är det associativa arrayer. 1373 01:05:45,800 --> 01:05:47,120 I JavaScript, har vi objekt. 1374 01:05:47,120 --> 01:05:48,969 >> PUBLIK: Så CS50 är ett objekt? 1375 01:05:48,969 --> 01:05:51,010 HANNAH Blumberg: CS50 är objektet i det här fallet. 1376 01:05:51,010 --> 01:05:54,830 1377 01:05:54,830 --> 01:05:57,880 Nu, hur gör vi faktiskt tillgång de områden eller ändra dessa områden. 1378 01:05:57,880 --> 01:06:03,920 Anta till exempel att vi beslutat att du ville ha en mindre pset den här terminen. 1379 01:06:03,920 --> 01:06:06,300 I stället för nio, vi är bara kommer att ha åtta. 1380 01:06:06,300 --> 01:06:08,240 Hur skulle vi ändra på det? 1381 01:06:08,240 --> 01:06:09,436 >> Åh, fel sätt. 1382 01:06:09,436 --> 01:06:11,060 Det finns två sätt som vi kan göra det. 1383 01:06:11,060 --> 01:06:13,490 Nummer ett är med pricken notation och nummer två 1384 01:06:13,490 --> 01:06:15,750 är med klammer notation. 1385 01:06:15,750 --> 01:06:19,720 Så, till exempel, om jag ville ändra eller åtkomst 1386 01:06:19,720 --> 01:06:26,820 den psets fältet i vår CS50 objekt, vad jag skulle göra är CS50.psets, 1387 01:06:26,820 --> 01:06:30,770 så namnet på objektet dot namnet på fältet eller nyckeln. 1388 01:06:30,770 --> 01:06:37,120 >> På samma sätt, det är exakt ekvivalent att göra CS50, och sedan 1389 01:06:37,120 --> 01:06:42,050 i kvadratiska hängslen, psets. 1390 01:06:42,050 --> 01:06:42,837 Häftigt? 1391 01:06:42,837 --> 01:06:44,298 Ja. 1392 01:06:44,298 --> 01:06:47,707 >> PUBLIK: Så är JSON tekniskt JavaScript fortfarande, 1393 01:06:47,707 --> 01:06:51,814 även om det i de psets vi skilja ut [OHÖRBAR]? 1394 01:06:51,814 --> 01:06:52,730 HANNAH Blumberg: Visst. 1395 01:06:52,730 --> 01:06:56,290 Så frågan är, är JavaScript och JSON motsvarande? 1396 01:06:56,290 --> 01:07:00,750 Så JSON är notation, i princip det sätt som vi skriver ut 1397 01:07:00,750 --> 01:07:02,700 ett objekt från JavaScript. 1398 01:07:02,700 --> 01:07:05,190 Så de är inte exakt samma. 1399 01:07:05,190 --> 01:07:08,950 >> Jag skulle vilja säga JavaScript, där är objekt i JavaScript. 1400 01:07:08,950 --> 01:07:12,590 JSON tar dessa objekt och skriver ut dem och visar dem 1401 01:07:12,590 --> 01:07:15,160 eller lagrar dem på ett trevligt sätt. 1402 01:07:15,160 --> 01:07:18,110 Så JSON är inte en programmerings språket sätt som JavaScript är. 1403 01:07:18,110 --> 01:07:20,900 Det är bara notation för våra objekt i JavaScript. 1404 01:07:20,900 --> 01:07:21,400 Ja. 1405 01:07:21,400 --> 01:07:24,144 >> PUBLIK: Så vad exakt [OHÖRBAR] slutföra? 1406 01:07:24,144 --> 01:07:25,060 HANNAH Blumberg: Visst. 1407 01:07:25,060 --> 01:07:27,727 Så detta faktiskt gör ingenting. 1408 01:07:27,727 --> 01:07:28,935 Detta är bara ett sätt att komma åt. 1409 01:07:28,935 --> 01:07:31,393 Så låt oss säga att vi ville ändra antalet problemsamlingar 1410 01:07:31,393 --> 01:07:32,450 9-8. 1411 01:07:32,450 --> 01:07:34,383 Vad vi gör är att göra något liknande CS50.psets = 8 ;. 1412 01:07:34,383 --> 01:07:38,500 1413 01:07:38,500 --> 01:07:39,400 >> Ja, bra fråga. 1414 01:07:39,400 --> 01:07:40,733 Detta är bara för att visa dig syntax. 1415 01:07:40,733 --> 01:07:43,620 Faktiskt inte göra något användbart. 1416 01:07:43,620 --> 01:07:46,085 Några frågor? 1417 01:07:46,085 --> 01:07:48,210 Flytta höger längs. 1418 01:07:48,210 --> 01:07:51,960 >> Så låt oss titta på ett snabbt exempel på hur JavaScript fungerar eftersom jag sa ju att det 1419 01:07:51,960 --> 01:07:55,170 gör alla dessa coola saker och tillåter oss att ändra webbsidor. 1420 01:07:55,170 --> 01:07:56,970 Låt oss faktiskt se den i aktion. 1421 01:07:56,970 --> 01:07:59,850 Så ta till exempel den här HTML-filen. 1422 01:07:59,850 --> 01:08:04,350 >> Och jag vill att du ska fokusera på är denna tagg, som är en knapp, 1423 01:08:04,350 --> 01:08:06,182 med id search_button. 1424 01:08:06,182 --> 01:08:08,670 Det är bara på sidan. 1425 01:08:08,670 --> 01:08:10,690 Så nu ska vi se vad vi faktiskt kan göra. 1426 01:08:10,690 --> 01:08:12,560 >> Tja, antar när du klickar på knappen, 1427 01:08:12,560 --> 01:08:16,010 Vi vill göra en alert-- du klickade på knappen. 1428 01:08:16,010 --> 01:08:17,840 Låt oss se hur vi kan göra det. 1429 01:08:17,840 --> 01:08:23,869 Så window.onload-- detta är inte något när du har sett i klassen, därför 1430 01:08:23,869 --> 01:08:26,180 behöver inte veta det för testet. 1431 01:08:26,180 --> 01:08:33,660 Men i grunden säger OK, samtal denna funktion när fönstret laster. 1432 01:08:33,660 --> 01:08:35,080 >> Så det är bara typ av inställningskoden. 1433 01:08:35,080 --> 01:08:36,390 Oroa dig inte så mycket om det. 1434 01:08:36,390 --> 01:08:39,170 Vad jag vill att du ska fokusera på är här. 1435 01:08:39,170 --> 01:08:44,020 Vi säger var searchButton lika document.getElementById search_button. 1436 01:08:44,020 --> 01:08:46,450 >> Så som ni kan gissa, Vad detta innebär är det något att säga, 1437 01:08:46,450 --> 01:08:50,920 OK, går att hitta elementet med ID search_button. 1438 01:08:50,920 --> 01:08:52,790 Och nu har vi att faktiska inslag och jag är 1439 01:08:52,790 --> 01:08:56,279 kommer att förvara den i en variabel searchButton. 1440 01:08:56,279 --> 01:09:00,651 Och nu kan vi faktiskt använda det elementet och ändra den, eller få tillgång till sina värderingar, 1441 01:09:00,651 --> 01:09:01,359 sådana saker. 1442 01:09:01,359 --> 01:09:04,649 Vi kan faktiskt börja samarbeta med webbsidan. 1443 01:09:04,649 --> 01:09:10,330 >> Så här säger jag, OK, nu när jag har den knappen, när den klickas, 1444 01:09:10,330 --> 01:09:12,859 kallar detta anonym funktion. 1445 01:09:12,859 --> 01:09:16,811 Så det är där anonym funktioner blir användbart. 1446 01:09:16,811 --> 01:09:18,060 Och vad gör funktionen gör? 1447 01:09:18,060 --> 01:09:20,529 Tja, kallar det just detta varningsfunktion och det står, 1448 01:09:20,529 --> 01:09:22,910 du klickade på Sök. 1449 01:09:22,910 --> 01:09:29,670 >> Så vad kommer att hända om jag går dit denna HTML bor och jag klickar på knappen, 1450 01:09:29,670 --> 01:09:33,729 Jag får en prydlig liten varning som säger att du har klickat på knappen. 1451 01:09:33,729 --> 01:09:40,710 Så saker att fokusera på här-- document.getElementById 1452 01:09:40,710 --> 01:09:44,960 får en särskild HTML- element med det givna ID. 1453 01:09:44,960 --> 01:09:48,529 Och nu kan vi ställa vad som ska hända när 1454 01:09:48,529 --> 01:09:50,702 just elementet klickas. 1455 01:09:50,702 --> 01:09:52,670 >> PUBLIK: Vi måste sätta allt detta i? 1456 01:09:52,670 --> 01:09:53,162 >> HANNAH Blumberg: Förlåt? 1457 01:09:53,162 --> 01:09:55,130 >> PUBLIK: Har vi till fysiskt koda allt detta? 1458 01:09:55,130 --> 01:09:56,340 >> HANNAH Blumberg: Har vi måste fysiskt koda allt detta? 1459 01:09:56,340 --> 01:09:56,839 Ja. 1460 01:09:56,839 --> 01:09:58,120 Är inte denna typ av irriterande? 1461 01:09:58,120 --> 01:10:00,032 Detta är en hel del kod. 1462 01:10:00,032 --> 01:10:01,574 >> PUBLIK: Du kan importera något. 1463 01:10:01,574 --> 01:10:02,532 HANNAH Blumberg: Rätt. 1464 01:10:02,532 --> 01:10:03,610 Vi skulle kunna använda något. 1465 01:10:03,610 --> 01:10:08,140 Och i particular-- oh, det är säger att jag måste lära avsnitt. 1466 01:10:08,140 --> 01:10:11,061 I synnerhet, låt oss använda biblioteket jQuery, 1467 01:10:11,061 --> 01:10:13,060 eftersom det var verkligen lång och verkligen irriterande 1468 01:10:13,060 --> 01:10:16,860 och jag vill kunna förenkla den och göra det kortare och lättare att skriva. 1469 01:10:16,860 --> 01:10:19,810 >> Så jQuery är ett JavaScript-bibliotek. 1470 01:10:19,810 --> 01:10:24,930 Så JavaScript är programmering språk; jQuery är ett bibliotek. 1471 01:10:24,930 --> 01:10:27,190 Och det gör en massa saker lättare. 1472 01:10:27,190 --> 01:10:33,230 Det gör att byta och gå över en HTML-dokument mycket lättare. 1473 01:10:33,230 --> 01:10:35,030 >> Det gör hanterings händelser lättare. 1474 01:10:35,030 --> 01:10:37,580 Det gör animation lättare och det gör Ajax lättare. 1475 01:10:37,580 --> 01:10:40,140 Så låt oss hoppa in två av dessa saker just nu. 1476 01:10:40,140 --> 01:10:40,900 Ursäkta. 1477 01:10:40,900 --> 01:10:42,620 Innan vi gör, vissa grundläggande syntax. 1478 01:10:42,620 --> 01:10:46,870 >> Detta är vad de flesta samtal till jQuery biblioteket ser ut. 1479 01:10:46,870 --> 01:10:50,520 Vi använder denna dollar sign-- ingen anslutning tecken till PHP, 1480 01:10:50,520 --> 01:10:56,030 bara inconvenient-- namnet på en väljare, pricka, och därefter talan. 1481 01:10:56,030 --> 01:10:58,860 Så låt oss se några konkreta exempel på detta. 1482 01:10:58,860 --> 01:11:02,980 >> Så detta är faktiskt densamma kod från händelsen bilden. 1483 01:11:02,980 --> 01:11:08,740 Så här länge, ful sak blir så mycket trevligare, mindre sak. 1484 01:11:08,740 --> 01:11:10,370 Så låt oss försöka bryta ner det. 1485 01:11:10,370 --> 01:11:17,090 Det säger, OK, jQuery-- här dollar sign-- jQuery, hitta mig fönstret. 1486 01:11:17,090 --> 01:11:18,480 Så det är väljaren. 1487 01:11:18,480 --> 01:11:21,800 >> När det laddar, kalla denna funktion. 1488 01:11:21,800 --> 01:11:23,880 Så det är allt inuti. 1489 01:11:23,880 --> 01:11:24,380 OK. 1490 01:11:24,380 --> 01:11:25,740 Hittils är det bra? 1491 01:11:25,740 --> 01:11:26,750 Okej. 1492 01:11:26,750 --> 01:11:32,970 >> Nu, jQuery, hitta mig sak med ID search_button. 1493 01:11:32,970 --> 01:11:36,090 Och vad det klickas kalla denna funktion. 1494 01:11:36,090 --> 01:11:37,900 Och så här funktionens exakt samma. 1495 01:11:37,900 --> 01:11:41,052 Bara göra en liten bit av varning, du klickade på Sök. 1496 01:11:41,052 --> 01:11:42,650 >> Så det är riktigt nice. 1497 01:11:42,650 --> 01:11:46,260 Det kondenserar verkligen och förenklar vår kod. 1498 01:11:46,260 --> 01:11:49,030 Hur visste jag att Det är ID search_button 1499 01:11:49,030 --> 01:11:50,960 och inte gillar klassen search_button? 1500 01:11:50,960 --> 01:11:52,024 >> PUBLIK: Hashtag? 1501 01:11:52,024 --> 01:11:52,940 HANNAH Blumberg: Ja. 1502 01:11:52,940 --> 01:11:56,450 Denna hash symbol, det är precis som CSS. 1503 01:11:56,450 --> 01:12:00,080 Så kom ihåg, med CSS, när vi ville välja något av ID, 1504 01:12:00,080 --> 01:12:01,590 vi använde nummertecken. 1505 01:12:01,590 --> 01:12:05,400 Och när vi ville välja något av klass använder vi punkten. 1506 01:12:05,400 --> 01:12:06,870 Bra. 1507 01:12:06,870 --> 01:12:08,230 Vettigt? 1508 01:12:08,230 --> 01:12:11,500 Så jQuery är tänkt att bara göra våra liv enklare. 1509 01:12:11,500 --> 01:12:12,000 Ja. 1510 01:12:12,000 --> 01:12:15,660 >> PUBLIK: Så jag är lite förvirrad hur den anonyma funktionen fungerar. 1511 01:12:15,660 --> 01:12:19,027 Har du nämna detta anonymouse funktionen fungerar? 1512 01:12:19,027 --> 01:12:20,594 Hur kallas det? 1513 01:12:20,594 --> 01:12:21,510 HANNAH Blumberg: Visst. 1514 01:12:21,510 --> 01:12:25,812 Så funktion är bara ett sökord som säger jag är på väg att definiera en funktion. 1515 01:12:25,812 --> 01:12:26,520 Målgrupp: Åh, OK. 1516 01:12:26,520 --> 01:12:27,353 HANNAH Blumberg: OK? 1517 01:12:27,353 --> 01:12:32,120 Och då passerar vi det som en argument att-- låt oss ta 1518 01:12:32,120 --> 01:12:37,040 denna inre en-- till klickfunktionen. 1519 01:12:37,040 --> 01:12:39,420 Så ja, så denna funktion, Detta anonym funktion, 1520 01:12:39,420 --> 01:12:40,910 blir en verklig argument. 1521 01:12:40,910 --> 01:12:43,632 Så kom ihåg i JavaScript, vi kan behandla funktioner som värden. 1522 01:12:43,632 --> 01:12:44,340 Målgrupp: Åh, OK. 1523 01:12:44,340 --> 01:12:45,256 HANNAH Blumberg: Ja. 1524 01:12:45,256 --> 01:12:46,035 Jag gillar att "oh." 1525 01:12:46,035 --> 01:12:47,490 Fin. 1526 01:12:47,490 --> 01:12:49,915 Andra frågor? 1527 01:12:49,915 --> 01:12:50,505 Tid? 1528 01:12:50,505 --> 01:12:51,380 MARIA ZLATKOVA: Good. 1529 01:12:51,380 --> 01:12:52,760 Bra. 1530 01:12:52,760 --> 01:12:54,210 >> HANNAH Blumberg: Awesome. 1531 01:12:54,210 --> 01:12:55,720 Några snabb användbara jQuery. 1532 01:12:55,720 --> 01:12:57,559 Jag tänker inte gå genom alla dessa. 1533 01:12:57,559 --> 01:12:59,350 Dessa bilder kommer att vara upp på nätet lite 1534 01:12:59,350 --> 01:13:02,040 senare, så kan du kontrollera det ut lite senare. 1535 01:13:02,040 --> 01:13:07,120 Men i grund och botten, den allmänna mönster håller där vi säger, 1536 01:13:07,120 --> 01:13:11,510 OK, hej, jQuery, här är min väljare och sedan här är en åtgärd. 1537 01:13:11,510 --> 01:13:15,940 Och du kan göra saker som tillgång till Värdet av ett formulär, komma åt vissa HTML, 1538 01:13:15,940 --> 01:13:19,195 kontroll vad som händer när användaren lämnar in en blankett, sånt. 1539 01:13:19,195 --> 01:13:20,106 Ja. 1540 01:13:20,106 --> 01:13:22,090 >> PUBLIK: Så i examen, vi kommer att behöva 1541 01:13:22,090 --> 01:13:25,066 att veta en hel del från jQuery dokumentation. 1542 01:13:25,066 --> 01:13:31,018 Så med tanke på att vi kopierar / klistra in jQuery dokumentation till vår fusklapp, 1543 01:13:31,018 --> 01:13:32,506 där är den linje? 1544 01:13:32,506 --> 01:13:33,957 Som hur många behöver vi veta? 1545 01:13:33,957 --> 01:13:35,290 HANNAH Blumberg: Bra fråga. 1546 01:13:35,290 --> 01:13:37,765 Frågan är i huvudsak med tanke på att du 1547 01:13:37,765 --> 01:13:41,330 kan inte komma åt jQuery dokumentation under testet, hur mycket bör du 1548 01:13:41,330 --> 01:13:41,830 känna till? 1549 01:13:41,830 --> 01:13:45,540 Vi skulle inte förvänta dig att komma med några slumpfunktion 1550 01:13:45,540 --> 01:13:47,240 att vi förväntar dig till Google. 1551 01:13:47,240 --> 01:13:52,930 >> Saker som är rättvist spel är jag skulle säger bara typ av den allmänna syntaxen, 1552 01:13:52,930 --> 01:13:58,310 att kunna välja på ID och genom class-- så precis som CSS. 1553 01:13:58,310 --> 01:14:01,876 Och sedan de faktiska funktionerna sig själv, kommer vi sannolikt berätta. 1554 01:14:01,876 --> 01:14:02,376 Ja. 1555 01:14:02,376 --> 01:14:05,591 >> PUBLIK: Så när du väljer per klass skulle innebära prick. 1556 01:14:05,591 --> 01:14:06,840 HANNAH Blumberg: Ja, exakt. 1557 01:14:06,840 --> 01:14:07,340 Bra. 1558 01:14:07,340 --> 01:14:10,461 När du väljer efter klass, det kommer att dot i stället för nummertecken. 1559 01:14:10,461 --> 01:14:10,960 Ja. 1560 01:14:10,960 --> 01:14:12,710 >> PUBLIK: Skulle du gå över skillnaden 1561 01:14:12,710 --> 01:14:14,310 mellan val av ID och klass? 1562 01:14:14,310 --> 01:14:14,560 >> HANNAH Blumberg: Visst. 1563 01:14:14,560 --> 01:14:17,510 Skillnaden mellan välj ID och välja per klass. 1564 01:14:17,510 --> 01:14:20,685 Så Maria sade en lite tidigare, det 1565 01:14:20,685 --> 01:14:26,280 kan bara vara en HTML-element med ett givet ID, medan klass, 1566 01:14:26,280 --> 01:14:29,740 Det ger oss möjlighet att gruppera ett gäng olika element tillsammans, 1567 01:14:29,740 --> 01:14:34,300 så saker som är relaterade, men inte exakt samma. 1568 01:14:34,300 --> 01:14:35,685 Besvarar det frågan? 1569 01:14:35,685 --> 01:14:36,200 Grymt bra. 1570 01:14:36,200 --> 01:14:37,194 Ja. 1571 01:14:37,194 --> 01:14:40,680 >> PUBLIK: Vad händer om du har flera saker som är i samma klass? 1572 01:14:40,680 --> 01:14:42,150 >> HANNAH Blumberg: Vad händer Om du har flera saker som 1573 01:14:42,150 --> 01:14:43,280 är samma klass? 1574 01:14:43,280 --> 01:14:45,829 Så, till exempel om vi är bara använda ren JavaScript 1575 01:14:45,829 --> 01:14:48,120 vi skulle göra något liknande document.getElementsByClass. 1576 01:14:48,120 --> 01:14:52,280 1577 01:14:52,280 --> 01:14:56,320 Och vad som faktiskt gör är tillbaka en rad element. 1578 01:14:56,320 --> 01:14:59,517 >> Och du måste antingen iterera över dem eller hitta vilken du vill. 1579 01:14:59,517 --> 01:15:01,350 Det kommer inte att ge en enda element. 1580 01:15:01,350 --> 01:15:03,450 Det kommer att ge dig ett arrangemang av element. 1581 01:15:03,450 --> 01:15:05,280 Bra fråga. 1582 01:15:05,280 --> 01:15:07,700 Någonting annat? 1583 01:15:07,700 --> 01:15:09,520 Grymt bra. 1584 01:15:09,520 --> 01:15:12,860 >> Så jag tror att om du är bekant med någon jQuery du såg i pset, 1585 01:15:12,860 --> 01:15:15,600 du bör vara bra att gå. 1586 01:15:15,600 --> 01:15:16,325 Fråga? 1587 01:15:16,325 --> 01:15:17,610 Å nej. 1588 01:15:17,610 --> 01:15:18,859 Jag har verkligen att undervisa. 1589 01:15:18,859 --> 01:15:19,358 koppla av. 1590 01:15:19,358 --> 01:15:20,035 Det kommer att bli bra. 1591 01:15:20,035 --> 01:15:20,660 Jag kommer dit. 1592 01:15:20,660 --> 01:15:24,670 1593 01:15:24,670 --> 01:15:26,870 >> Låt oss tala om Ajax. 1594 01:15:26,870 --> 01:15:31,350 Så Ajax kommer att bli en-- bra, låt oss börja med vad det står för. 1595 01:15:31,350 --> 01:15:32,350 Det är en akronym. 1596 01:15:32,350 --> 01:15:35,855 Den står för Asynchronous JavaScript och XML. 1597 01:15:35,855 --> 01:15:39,800 Och XML är i grunden kommer att vara [OHÖRBAR] med en typ av våra data. 1598 01:15:39,800 --> 01:15:42,100 Men vi har inte faktiskt används XML. 1599 01:15:42,100 --> 01:15:43,430 Istället använder vi bara JSON. 1600 01:15:43,430 --> 01:15:48,350 >> Så i princip är det några data-- asynkront, JavaScript, och data, 1601 01:15:48,350 --> 01:15:50,040 i det här fallet, JSON. 1602 01:15:50,040 --> 01:15:52,820 Och vårt mål, som vi nämnde lite tidigare, 1603 01:15:52,820 --> 01:15:56,880 är att kunna göra en begäran, har denna begäran göra 1604 01:15:56,880 --> 01:16:00,700 sin sak i bakgrund, men fortsätter 1605 01:16:00,700 --> 01:16:02,550 göra vad vi hade för avsikt att göra. 1606 01:16:02,550 --> 01:16:06,650 Och sedan när informationen är klar, då vi kommer att införliva det. 1607 01:16:06,650 --> 01:16:08,470 >> Så låt oss se vad detta faktiskt ser ut. 1608 01:16:08,470 --> 01:16:11,210 Och detta bör du vara lite bekant 1609 01:16:11,210 --> 01:16:13,680 från pset8, den du just fyllt i. 1610 01:16:13,680 --> 01:16:16,200 Så här är ett giltigt jQuery funktion som vi kanske 1611 01:16:16,200 --> 01:16:18,250 vill veta about-- denna dollartecken. 1612 01:16:18,250 --> 01:16:21,500 Så det säger jQuery funktion, .getJson. 1613 01:16:21,500 --> 01:16:25,020 >> Och vad den här funktionen gör det tar en webbadress och en del parameters-- 1614 01:16:25,020 --> 01:16:28,000 så jag tror att i fallet av pset8, var det som, 1615 01:16:28,000 --> 01:16:33,520 URL var articles.php och parametrar var att gå = vissa postnummer. 1616 01:16:33,520 --> 01:16:41,580 Och den säger, OK, gör en begäran till denna URL med givna parametrar. 1617 01:16:41,580 --> 01:16:43,480 Och som bara händer. 1618 01:16:43,480 --> 01:16:47,730 >> När den är klar, det är antingen kommer att framgångsrikt slutföra 1619 01:16:47,730 --> 01:16:49,370 eller det kommer att misslyckas. 1620 01:16:49,370 --> 01:16:53,480 Så det här är likvärdigt med samtals Rob och be honom att göra något. 1621 01:16:53,480 --> 01:17:00,260 Och sedan när han kallar tillbaka, han är antingen kommer att säga att jag är klar eller jag misslyckades. 1622 01:17:00,260 --> 01:17:04,030 >> Så i fallet där du är gjort, säger du, OK, jag är klar. 1623 01:17:04,030 --> 01:17:05,980 Och då du kallar den här funktionen. 1624 01:17:05,980 --> 01:17:08,915 I det här fallet, det kommer att bli en funktion som tar viss information. 1625 01:17:08,915 --> 01:17:12,890 Det vi brukar bryr sig om är data de data som vi faktiskt tillbaka 1626 01:17:12,890 --> 01:17:15,900 som ett resultat av ett anrop .getJSON. 1627 01:17:15,900 --> 01:17:17,470 >> Och du kan göra något med det. 1628 01:17:17,470 --> 01:17:23,670 Så i fallet med pset8, Vi visade det som en lista. 1629 01:17:23,670 --> 01:17:29,050 Fail kommer att vara en funktion som kallas om begäran misslyckas 1630 01:17:29,050 --> 01:17:30,450 oavsett orsak. 1631 01:17:30,450 --> 01:17:35,104 Och i fallet med pset8, vi bara console.log det. 1632 01:17:35,104 --> 01:17:36,020 Har du frågor om det? 1633 01:17:36,020 --> 01:17:36,300 Ja. 1634 01:17:36,300 --> 01:17:39,633 >> PUBLIK: Kan vi bara använda funktionen theta i stället för funktion, textStatus, jqHXR. 1635 01:17:39,633 --> 01:17:43,464 1636 01:17:43,464 --> 01:17:44,380 HANNAH Blumberg: Visst. 1637 01:17:44,380 --> 01:17:46,713 Så ja, jag tror i pset, vi såg bara funktionsdata. 1638 01:17:46,713 --> 01:17:48,700 Så det är bara the-- ja, OK. 1639 01:17:48,700 --> 01:17:50,510 Det är vad vi såg i pset. 1640 01:17:50,510 --> 01:17:51,480 Det är helt bra. 1641 01:17:51,480 --> 01:17:54,210 >> Dessa är bara om du ville att dra ut mer information, 1642 01:17:54,210 --> 01:17:57,190 Dessa är de saker som du kan få från .getJSON. 1643 01:17:57,190 --> 01:17:59,040 Bra fråga. 1644 01:17:59,040 --> 01:17:59,706 Någonting annat? 1645 01:17:59,706 --> 01:18:00,206 Ja. 1646 01:18:00,206 --> 01:18:01,787 >> PUBLIK: Så .getJSON är Ajax? 1647 01:18:01,787 --> 01:18:02,620 HANNAH Blumberg: OK. 1648 01:18:02,620 --> 01:18:05,700 Så det här är den typ av knepiga delen. 1649 01:18:05,700 --> 01:18:12,390 Det är en jQuery funktion som tillåter dig att göra asynkrona samtal. 1650 01:18:12,390 --> 01:18:16,080 Och de asynkrona samtal, det är vad vi har med hänvisning till som Ajax. 1651 01:18:16,080 --> 01:18:16,850 Ja. 1652 01:18:16,850 --> 01:18:20,185 Det tog mig en riktigt lång tid att dra isär när jag var student. 1653 01:18:20,185 --> 01:18:21,560 PUBLIK: Kan du säga det igen? 1654 01:18:21,560 --> 01:18:22,476 HANNAH Blumberg: Ja. 1655 01:18:22,476 --> 01:18:23,630 Kan jag säga det igen? 1656 01:18:23,630 --> 01:18:29,010 Denna .getJSON funktion, det är en jQuery funktion. 1657 01:18:29,010 --> 01:18:31,970 Och det kommer att göra en asynkron samtal. 1658 01:18:31,970 --> 01:18:35,700 Och dessa asynkrona samtal, vi har har med hänvisning till de som Ajax. 1659 01:18:35,700 --> 01:18:39,610 1660 01:18:39,610 --> 01:18:41,872 >> Alla andra frågor? 1661 01:18:41,872 --> 01:18:43,330 Vi har bara ett par minuter kvar. 1662 01:18:43,330 --> 01:18:45,080 Och Marias kommer att avsluta med säkerhet 1663 01:18:45,080 --> 01:18:47,464 och sedan kommer vi att nästan gjort. 1664 01:18:47,464 --> 01:18:48,630 MARIA ZLATKOVA: Awesome, OK. 1665 01:18:48,630 --> 01:18:54,030 Så det här är-- bara ta ett par sekunder att titta över denna. 1666 01:18:54,030 --> 01:18:56,750 Och detta är inte något riktigt bra. 1667 01:18:56,750 --> 01:18:59,430 Och kan någon berätta för mig varför? 1668 01:18:59,430 --> 01:19:05,650 Vad händer i foo och kan kunde potentiellt leda till något dåligt, 1669 01:19:05,650 --> 01:19:06,770 och vad det heter? 1670 01:19:06,770 --> 01:19:07,270 Ja. 1671 01:19:07,270 --> 01:19:10,391 PUBLIK: Om argumentet som är antogs i mer än 12 tecken, 1672 01:19:10,391 --> 01:19:11,454 det skulle kunna flöda över. 1673 01:19:11,454 --> 01:19:12,370 MARIA ZLATKOVA: Rätt. 1674 01:19:12,370 --> 01:19:14,180 Perfekt. 1675 01:19:14,180 --> 01:19:15,384 Vad kallas det? 1676 01:19:15,384 --> 01:19:16,300 Du nämnde just det. 1677 01:19:16,300 --> 01:19:16,840 >> PUBLIK: Buffertspill. 1678 01:19:16,840 --> 01:19:18,381 >> MARIA ZLATKOVA: Japp, buffertspill. 1679 01:19:18,381 --> 01:19:21,230 Så detta är något som vi kallar buffertspill. 1680 01:19:21,230 --> 01:19:25,500 Och vi ser att insidan av foo, vi har definierat vår buffert, c, 1681 01:19:25,500 --> 01:19:27,240 med en storlek på 12. 1682 01:19:27,240 --> 01:19:32,680 Men i huvudsak har vi inte checka in något sätt alls 1683 01:19:32,680 --> 01:19:36,480 huruvida argv1-- så att var det andra argumentet. 1684 01:19:36,480 --> 01:19:39,630 Vi kontrollerar inte om storleken av det är lämpligt. 1685 01:19:39,630 --> 01:19:43,380 >> Så om vi hade en särskilt angripare 1686 01:19:43,380 --> 01:19:47,170 som satte i vissa argument som var längre än 12, och sedan eventuellt 1687 01:19:47,170 --> 01:19:50,850 bortom gränserna för det argumentet, hade vissa exekverbara koden 1688 01:19:50,850 --> 01:19:55,570 att han försökte göra något dåligt med det; då detta, vad som skulle hända, 1689 01:19:55,570 --> 01:19:59,310 skulle åsidosätta avkastning adressen till den foo funktionen, 1690 01:19:59,310 --> 01:20:04,370 orsakar funktionen att när återvänder för att köra koden. 1691 01:20:04,370 --> 01:20:07,540 Och sedan dåliga saker kan hända. 1692 01:20:07,540 --> 01:20:09,850 Innebär detta vettigt för alla? 1693 01:20:09,850 --> 01:20:12,424 >> Och hur kan vi skydda sig mot detta? 1694 01:20:12,424 --> 01:20:13,090 Några förslag? 1695 01:20:13,090 --> 01:20:16,480 1696 01:20:16,480 --> 01:20:21,890 I grund och botten, inuti potentiellt foo, hur 1697 01:20:21,890 --> 01:20:28,294 kan vi kontrollera att att det inte kan hända? 1698 01:20:28,294 --> 01:20:33,879 >> PUBLIK: Om storleken 12 överskrids, skulle du allokera mer minne? 1699 01:20:33,879 --> 01:20:37,170 MARIA ZLATKOVA: Förslag är, fördela extra minne av storleken överskrids. 1700 01:20:37,170 --> 01:20:39,800 Egentligen kan vi göra något mycket enklare än att liksom. 1701 01:20:39,800 --> 01:20:44,870 Vi kan bara få stränglängden argumentet att tas upp, 1702 01:20:44,870 --> 01:20:48,590 kontrollera om det är mindre än eller lika med 12-- 1703 01:20:48,590 --> 01:20:50,790 vilket är vad vi vill ha det bero på att vi inte vill 1704 01:20:50,790 --> 01:20:52,373 att överskrida gränserna för vår buffert. 1705 01:20:52,373 --> 01:20:55,690 Och sedan om det inte, vi kan arbeta med argumentet. 1706 01:20:55,690 --> 01:21:00,296 Och sedan om det gör vi verkligen vill att Yello kan utsättas för användaren. 1707 01:21:00,296 --> 01:21:01,670 Men detta är hur vi skulle göra det. 1708 01:21:01,670 --> 01:21:02,443 Ja. 1709 01:21:02,443 --> 01:21:04,360 >> PUBLIK: Kan du förklara memcpy riktigt snabbt? 1710 01:21:04,360 --> 01:21:05,443 MARIA ZLATKOVA: Åh, förlåt. 1711 01:21:05,443 --> 01:21:06,040 Ja. 1712 01:21:06,040 --> 01:21:11,290 Memcpy tar vad är-- ledsen, OK. 1713 01:21:11,290 --> 01:21:15,850 Memcpy tar allt som är i bar, oavsett leds 1714 01:21:15,850 --> 01:21:18,050 på foo som kommandoraden argument. 1715 01:21:18,050 --> 01:21:19,440 Så det kommer att ta argv1. 1716 01:21:19,440 --> 01:21:21,420 Argv1 kallas bar här. 1717 01:21:21,420 --> 01:21:24,453 Så det kommer att ta bar och det kommer att kopiera den till c. 1718 01:21:24,453 --> 01:21:25,402 >> PUBLIK: OK. 1719 01:21:25,402 --> 01:21:28,360 MARIA ZLATKOVA: Och det kommer att copy-- det tredje argumentet bara hänvisar 1720 01:21:28,360 --> 01:21:30,601 hur mycket det kommer att kopiera till c. 1721 01:21:30,601 --> 01:21:31,142 PUBLIK: Ah. 1722 01:21:31,142 --> 01:21:33,030 Så här är kopiering allt det då. 1723 01:21:33,030 --> 01:21:34,310 >> MARIA ZLATKOVA: Ja, det är att kopiera allt. 1724 01:21:34,310 --> 01:21:34,810 Japp. 1725 01:21:34,810 --> 01:21:38,400 1726 01:21:38,400 --> 01:21:41,910 Först ser vi till baren är inte lika med noll eftersom det är en pekare. 1727 01:21:41,910 --> 01:21:44,680 Då får vi stränglängd bar. 1728 01:21:44,680 --> 01:21:47,530 Vi ser till att det är mindre än eller lika med 12. 1729 01:21:47,530 --> 01:21:50,070 Och sedan eftersom vi har såg, vi kan faktiskt 1730 01:21:50,070 --> 01:21:53,122 memcpy och vara säker på att det är OK. 1731 01:21:53,122 --> 01:21:53,705 Några frågor? 1732 01:21:53,705 --> 01:21:56,280 1733 01:21:56,280 --> 01:21:58,690 Bra. 1734 01:21:58,690 --> 01:22:00,400 Jag har två sant eller falskt frågor. 1735 01:22:00,400 --> 01:22:05,470 Kan någon berätta för mig genast om dessa är sanna eller falska? 1736 01:22:05,470 --> 01:22:07,460 Ja, det är falskt. 1737 01:22:07,460 --> 01:22:07,960 Exakt. 1738 01:22:07,960 --> 01:22:09,330 Båda är falska. 1739 01:22:09,330 --> 01:22:12,682 Så använder ett enda lösenord är aldrig riktigt bra idé 1740 01:22:12,682 --> 01:22:14,890 för om någon vet ditt lösenord, de kan bara 1741 01:22:14,890 --> 01:22:16,260 tillgång till alla dina andra konton. 1742 01:22:16,260 --> 01:22:19,260 Och sedan ikoner gör ingenting för att garantera säkerheten. 1743 01:22:19,260 --> 01:22:24,900 Vi bör vanligtvis leta efter HTTPS i stället för HTTP och webbadressen. 1744 01:22:24,900 --> 01:22:28,560 >> Och vissa andra typer av attacker som vi har nämnt, 1745 01:22:28,560 --> 01:22:31,390 David har nämnt i föreläsa, SQL injection attacker. 1746 01:22:31,390 --> 01:22:37,310 Vi har redan sett att om vi don't-- den CS50 sökfunktion ser till att SQL 1747 01:22:37,310 --> 01:22:39,530 injektion attacker kan inte förekomma. 1748 01:22:39,530 --> 01:22:42,640 Men om vi inte använder CS50, citationstecken, unquote "i fråga," 1749 01:22:42,640 --> 01:22:46,830 vi skulle behöva se till att användarens input är inte faktiskt en del SQL 1750 01:22:46,830 --> 01:22:49,670 fråga som kommer att orsaka allt våra bord att släppas 1751 01:22:49,670 --> 01:22:54,070 eller något dåligt att hända med vår databas. 1752 01:22:54,070 --> 01:22:56,790 >> Sessionskapning är annan typ av attack 1753 01:22:56,790 --> 01:23:05,940 som händer när några dåliga person använder några offrets session 1754 01:23:05,940 --> 01:23:08,740 ID för att få tillgång till inloggningsinformationen. 1755 01:23:08,740 --> 01:23:13,620 Så en mycket trivialt exempel på detta är som om vi har en offentlig dator, 1756 01:23:13,620 --> 01:23:21,120 då dålig människa loggar in och sedan de har cookies som sparas. 1757 01:23:21,120 --> 01:23:23,380 Och cookies inte förändras för sessionen. 1758 01:23:23,380 --> 01:23:27,620 >> Då har vi offret gå in och sedan logga in på webbplatsen. 1759 01:23:27,620 --> 01:23:30,290 Cookies ändras inte under en viss session. 1760 01:23:30,290 --> 01:23:33,060 Och sedan offret loggar in hemsidan och sedan lämnar. 1761 01:23:33,060 --> 01:23:36,190 Och sedan den person som går tillbaka kan då fortfarande använda sin session ID 1762 01:23:36,190 --> 01:23:37,430 att få tillgång till deras information. 1763 01:23:37,430 --> 01:23:40,050 Så det är ett exempel på hur det kunde hända. 1764 01:23:40,050 --> 01:23:45,570 >> Och då skulle jag inte oroa sig alltför mycket om specifik kod eller något 1765 01:23:45,570 --> 01:23:49,270 sånt som kan orsaka detta, men med något slags aning om vad 1766 01:23:49,270 --> 01:23:51,400 de variabler som är involverade i detta är. 1767 01:23:51,400 --> 01:23:53,897 Och sedan manipulera header uppgifter är en annan typ av attack 1768 01:23:53,897 --> 01:23:55,230 som har David har talat om. 1769 01:23:55,230 --> 01:23:59,730 Och det bara avser vad som kan hända när 1770 01:23:59,730 --> 01:24:04,300 svaret, HTTP svar inne i vår rubrik 1771 01:24:04,300 --> 01:24:05,720 är inte sanitized korrekt. 1772 01:24:05,720 --> 01:24:14,340 >> Och någon av de fields-- t.ex. om någon skriver över en av huvud 1773 01:24:14,340 --> 01:24:18,860 värden att innehålla något mer än vad de ska contain-- och faktiskt 1774 01:24:18,860 --> 01:24:22,720 innehålla, till exempel, en 200 OK statuskoden, då de 1775 01:24:22,720 --> 01:24:26,890 skulle kunna göra skadliga saker när de inte är tänkt. 1776 01:24:26,890 --> 01:24:30,815 Men jag skulle inte oroa sig alltför mycket om den särskilda koden 1777 01:24:30,815 --> 01:24:34,110 som kan orsaka detta, bara sorts förståelse 1778 01:24:34,110 --> 01:24:37,290 hög nivå sånt. 1779 01:24:37,290 --> 01:24:39,570 >> Jag tror att det är allt att vi måste täcka. 1780 01:24:39,570 --> 01:24:40,090 Fantastiskt. 1781 01:24:40,090 --> 01:24:43,310 Någon som har några frågor om någon av de saker som vi omfattas? 1782 01:24:43,310 --> 01:24:44,213 Ja. 1783 01:24:44,213 --> 01:24:48,077 >> PUBLIK: Så en sorts mer logistisk fråga. 1784 01:24:48,077 --> 01:24:53,400 Är innehållet främst inriktad på saker efter quiz 1? 1785 01:24:53,400 --> 01:24:55,730 >> MARIA ZLATKOVA: Så Frågan är, är innehållet 1786 01:24:55,730 --> 01:24:59,720 främst inriktat på saker efter quiz 1? 1787 01:24:59,720 --> 01:25:06,070 Så fokus på efter frågesport 1, med undantag 1788 01:25:06,070 --> 01:25:10,914 att vi måste fokusera på saker i pset5 och en hel del av datastrukturer 1789 01:25:10,914 --> 01:25:11,580 att vi täckt. 1790 01:25:11,580 --> 01:25:14,300 Och vi kan inte säga att vi kan ignorera något innan 1791 01:25:14,300 --> 01:25:17,120 att eftersom det bygger på det också. 1792 01:25:17,120 --> 01:25:21,845 >> Så fokusera på det, plus pset5 material som bland annat länkade listor, stackar, 1793 01:25:21,845 --> 01:25:23,720 köer, och allt att Hannah gick över. 1794 01:25:23,720 --> 01:25:24,050 >> HANNAH Blumberg: Rätt. 1795 01:25:24,050 --> 01:25:27,450 Ja, vi gick över hela C grejer vid början mycket snabbt. 1796 01:25:27,450 --> 01:25:29,090 Men se till att granska det. 1797 01:25:29,090 --> 01:25:32,700 Gå tillbaka och titta på quiz 0 omdöme. 1798 01:25:32,700 --> 01:25:36,110 >> Ett par mer logistiska anteckningar, bara medan vi har din uppmärksamhet. 1799 01:25:36,110 --> 01:25:39,100 Vi kommer att ha kontorstid både på måndag och tisdag kväll. 1800 01:25:39,100 --> 01:25:41,540 De kommer att vara i MD 119. 1801 01:25:41,540 --> 01:25:44,220 Detta är allt på hemsidan, så Om du inte hör det, inga bekymmer. 1802 01:25:44,220 --> 01:25:45,266 >> MARIA ZLATKOVA: 8:30 till 11:00. 1803 01:25:45,266 --> 01:25:46,260 >> HANNAH Blumberg: Ja, från 8:30 till 11:00. 1804 01:25:46,260 --> 01:25:46,910 Vi kommer att vara där. 1805 01:25:46,910 --> 01:25:48,368 Vi kommer att vara där för att svara på frågor. 1806 01:25:48,368 --> 01:25:49,480 Det är ganska chill och roligt. 1807 01:25:49,480 --> 01:25:53,240 Ni kan ställa några frågor som du har på frågesport 1. 1808 01:25:53,240 --> 01:25:55,740 Och quiz 1 är på Onsdag, så lycka till. 1809 01:25:55,740 --> 01:25:59,770 Om du har några frågor, kanske kommer prata med oss ​​här en-mot-en. 1810 01:25:59,770 --> 01:26:00,880 Häftigt. 1811 01:26:00,880 --> 01:26:01,630 Tack så mycket. 1812 01:26:01,630 --> 01:26:02,880 >> MARIA ZLATKOVA: Tack så mycket, killar. 1813 01:26:02,880 --> 01:26:03,480 >> PUBLIK: Yay. 1814 01:26:03,480 --> 01:26:05,930 >> [APPLÅDER] 1815 01:26:05,930 --> 01:26:07,530