1 00:00:00,000 --> 00:00:02,270 >> [Recenzo: Kvizo 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Universitato Harvard] 3 00:00:04,620 --> 00:00:07,660 [Ĉi tiu estas CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Bonvenon ĉiuj. Tiu estas ekzameno por kvizo 1. 5 00:00:11,610 --> 00:00:15,040 Ĝuste kiel malgarantiilon, ĉi tio - mi volas diri, ni tuj provi kovri 6 00:00:15,040 --> 00:00:17,770 tiel materialon kiel eblas, sed tio ne signifas, ke 7 00:00:17,770 --> 00:00:20,780 Ni tuj kovri ĉiuj de la aferoj kiuj povas esti en kvizo 1. 8 00:00:20,780 --> 00:00:25,270 Do estu certa, ke vi ankaux rigardu prelego, sekcioj, ĉion, kion vi povas. 9 00:00:25,270 --> 00:00:28,240 Kvizo 1 tuj estos merkrede, apud merkredo. 10 00:00:28,240 --> 00:00:33,800 Do estu certa studi. Ĝi okazas al esti, preskaux, kiel la unua kvizo 11 00:00:33,800 --> 00:00:36,390 koncerne lian formaton, sed ĝi estas probable tuj estos multe pli malfacila. 12 00:00:36,390 --> 00:00:39,600 Almenaŭ, lasta jaro, kiam Mi prenis 50, mi pensis ke estis multe pli malfacila. 13 00:00:39,600 --> 00:00:42,410 Do studi multe. 14 00:00:42,410 --> 00:00:45,190 >> Mi tuj kovri datumstrukturoj kaj Huffman kodigo. 15 00:00:45,190 --> 00:00:47,910 Tio estas io kion multaj homoj pensas estas kompleksa, 16 00:00:47,910 --> 00:00:51,930 sed mi tuj provos fari ĝin tiel facila kiel eble. 17 00:00:51,930 --> 00:00:56,330 Antaŭ ĉio, kion ni deziras al vi knaboj scii por kvizo 1 estas 18 00:00:56,330 --> 00:01:00,970 kompreni la koncepta priskriboj de ĉiu el la datumstrukturoj, ke mi tuj prezentos. 19 00:01:00,970 --> 00:01:03,960 Tio signifas ke vi ne devas reale 20 00:01:03,960 --> 00:01:07,020 praktikigi hash tablo en via testeto 1. 21 00:01:07,020 --> 00:01:10,250 Ni ne volas ke vi praktikigi tuta hash tablo; eble ni provos 22 00:01:10,250 --> 00:01:13,090 fari vin apliki iujn funkciojn, 23 00:01:13,090 --> 00:01:16,940 la plej komunaj operacioj, sed ni ne iras fari vin apliki ĉion. 24 00:01:16,940 --> 00:01:21,010 Do estas grave, ke vi komprenas la koncepto malantaŭ ĉiu datumstrukturo 25 00:01:21,010 --> 00:01:23,510 kaj ankaŭ, ke vi kapablas programi en C, 26 00:01:23,510 --> 00:01:27,880 nur la plej komunaj operacioj oni havos por ĉiu datumstrukturo. 27 00:01:27,880 --> 00:01:30,090 Kaj ankaŭ povos revizii pointers kaj structs, 28 00:01:30,090 --> 00:01:33,470 ĉar ili aperas multe en tiuj datumstrukturoj. 29 00:01:33,470 --> 00:01:37,380 >> Unue, ligita listoj. Ligita listoj estas fakte tre simila al sensilo, 30 00:01:37,380 --> 00:01:39,930 sed la diferenco inter ligillisto kaj tabelo, 31 00:01:39,930 --> 00:01:45,160 antaŭ ĉio, estas ke oni ligillisto havas tre fleksebla grandeco, 32 00:01:45,160 --> 00:01:50,060 dum en arrays vi devos ĉu elekti tre granda grandeco por la tabelo, 33 00:01:50,060 --> 00:01:53,710 do vi scias, ke vi tuj povos stoki tutan viajn datumojn en tiu tabelo, 34 00:01:53,710 --> 00:01:59,370 aŭ vi devos uzi malloc havi flekseblan longo de tabelo. 35 00:01:59,370 --> 00:02:03,680 En ligita lertaj ĝi estas tre facile simple akiri pli da elementoj, 36 00:02:03,680 --> 00:02:07,210 meti pli da elementoj en la ligillisto aŭ forigi elementojn. 37 00:02:07,210 --> 00:02:09,370 Kaj efektive, se vi ne volas ke la ligillisto esti ordo, 38 00:02:09,370 --> 00:02:13,950 Vi povas serĉi kaj forigi elementojn en konstanta tempo, 39 00:02:13,950 --> 00:02:16,800 tial O (1) tempo, tiel ĝi estas tre oportuna. 40 00:02:16,800 --> 00:02:20,660 Vi nur devas zorgi por ĉiam memoros malloc kaj libera la nodoj, 41 00:02:20,660 --> 00:02:25,510 nur ĉar se ne, vi devos memoro likas. 42 00:02:25,510 --> 00:02:31,480 Do ligita listoj - la difino de nodo estas ĝuste kiel kio ni havas rajton tie. 43 00:02:31,480 --> 00:02:35,110 Mi metis int n, sed oni povas stoki ajna datumoj vi deziras. 44 00:02:35,110 --> 00:02:37,280 Do se vi volas konservi ĉenon, tio estas bone. 45 00:02:37,280 --> 00:02:41,690 Se vi volas butika struct, ĝi estas bela, duobla, kion ajn vi volas. 46 00:02:41,690 --> 00:02:44,630 Mi ĵus metis int n por la ekzemplojn ĉi tie. 47 00:02:44,630 --> 00:02:46,800 Kaj vi havas montrilon al la sekva nodo. 48 00:02:46,800 --> 00:02:51,940 Do, esence, ligillisto havas iujn datumojn, kaj do ĝi notas al la sekva nodo. 49 00:02:51,940 --> 00:02:56,710 Se temas pri la lasta elemento en la ligillisto, ĝi tuj atentigi al nula. 50 00:02:56,710 --> 00:02:59,060 Do tiu estas ekzemplo de ligillisto. 51 00:02:59,250 --> 00:03:05,960 >> Bone, do nun ni vidu kion ni faru se mi volas enmeti ero en ligillisto. 52 00:03:05,960 --> 00:03:08,810 Unue, funkcio insert estos de tipo void 53 00:03:08,810 --> 00:03:11,350 ĉar mi ne volas redoni ion. 54 00:03:11,350 --> 00:03:14,200 Kaj Mi iros preni int kiel argumento, 55 00:03:14,200 --> 00:03:17,090 ĉar mi volas scii, kion mi volas enmeti. 56 00:03:17,090 --> 00:03:21,840 Do kio estas la unua aĵo kiun mi devus fari? Nu, mi devus malloc sur newnode, 57 00:03:21,840 --> 00:03:24,240 tial ke estas la unua linio. 58 00:03:24,240 --> 00:03:27,580 Mi simple kreas novan nodon meti en ligillisto. 59 00:03:27,580 --> 00:03:32,360 Do kion mi povas fari? Nu, ni scias ke en niaj realigoj de ligita listoj 60 00:03:32,360 --> 00:03:38,180 en la klaso, ni ĉiam metis la kapon kiel tutmonda variablo. 61 00:03:38,180 --> 00:03:41,800 Do kion ni povas fari estas ŝanĝi la kapo. 62 00:03:41,800 --> 00:03:44,300 Mi povas fari ĉi nova nodo estu la nova estro, 63 00:03:44,300 --> 00:03:46,670 kaj gxi tuj atentigi al la antaŭa kapo. 64 00:03:46,670 --> 00:03:50,390 Kiel ni povas fari tion? La unua afero, kiun mi devos fari 65 00:03:50,390 --> 00:03:54,770 estas ŝanĝi la 'n' en la nova vertico al valoro, 66 00:03:54,770 --> 00:03:57,530 kiu estis pasita al la funkcio. 67 00:03:57,530 --> 00:04:01,050 Tiam newnode sekvas tuj estos la kapo. 68 00:04:01,050 --> 00:04:05,800 La kapo tuj iros newnode. Do ĝi estas sufiĉe simpla. 69 00:04:05,800 --> 00:04:10,090 Por viŝi nodon, ni povas fari ĝin kiel - 70 00:04:10,090 --> 00:04:14,790 Unidirekta ni povus fari tion estas, 71 00:04:14,790 --> 00:04:18,160 bone, se mi volis forigi, ekzemple, 3, 72 00:04:18,160 --> 00:04:24,850 kion mi povus fari estas simple notas la antaŭa nodo 73 00:04:24,850 --> 00:04:27,580 al la sekva nodo de 3. 74 00:04:27,580 --> 00:04:29,400 Do mi simple fari ion tia. 75 00:04:29,400 --> 00:04:33,400 Sed kio estas la problemo pri la fari tion? 76 00:04:33,400 --> 00:04:37,400 Mi havas memoron liko, do mi ne havas aliron al la numero 3 anymore. 77 00:04:37,400 --> 00:04:42,480 La problemo kun tio estas ke mi ne tuj povos liberigi tiu nodo. 78 00:04:42,480 --> 00:04:45,360 Mi tuj havas memoron liko kaj (nekomprenebla) tuj malamas min. 79 00:04:45,360 --> 00:04:49,370 Do anstataŭ fari tion, mi devus probable havas portempan montrilo. 80 00:04:49,370 --> 00:04:53,210 Do mi metis temp. Ĝi tuj atentigi al la nodo, ke mi volas forigi. 81 00:04:53,210 --> 00:04:58,170 Kaj tiam mi povas movi la antaŭa nodoj al punkto al la sekva nodo 82 00:04:58,170 --> 00:05:00,390 de la nodo, ke mi volas forigi. 83 00:05:00,390 --> 00:05:02,730 Kaj fine, mi povas liberigi la montrilo. 84 00:05:02,730 --> 00:05:07,480 Ĉu mi devas liberigi la montrilon, ke mi kreis ĝuste tie? 85 00:05:07,480 --> 00:05:09,560 Mi ne devas, nur ĉar - 86 00:05:09,560 --> 00:05:13,430 la diferenco estas, ke tiu nodo estis kreita uzante malloc, 87 00:05:13,430 --> 00:05:17,280 tial ĝi estas en la havaĵon, dum ĉi tiu estis justa deklarita kiel NULL ŝaltilon en la stako. 88 00:05:17,280 --> 00:05:20,000 Do mi ne devas liberigi ĝin. 89 00:05:20,000 --> 00:05:22,030 >> Bone. Do nun ni parolu pri stakoj. 90 00:05:22,030 --> 00:05:24,680 Stakoj estas sufiĉe simpla. 91 00:05:24,680 --> 00:05:29,540 Ni faris stakoj kaj vostoj en klaso nur per sensilo, 92 00:05:29,540 --> 00:05:32,820 sed vi devus koni - nur konscii 93 00:05:32,820 --> 00:05:40,740 ke vi povas ankaŭ fari stakoj en la vostoj uzante ligita lertaj tiel. 94 00:05:40,740 --> 00:05:44,460 Do se vi havas tabelo, kia estus stako? 95 00:05:44,460 --> 00:05:46,810 A stako, unue, devos havi grandecon. 96 00:05:46,810 --> 00:05:49,950 Vi devas stoki, kio estas la grandeco de la pilo, ke vi havas nun. 97 00:05:49,950 --> 00:05:52,980 Kaj ankaŭ vi havus tabelon, en tiu kazo de nombroj, 98 00:05:52,980 --> 00:05:55,120 sed se vi deziras, ĝi povas esti tabelo 99 00:05:55,120 --> 00:06:00,380 de kordoj, tabelo de struct, ion ke vi volas gardi. 100 00:06:00,380 --> 00:06:03,240 Pri la stako: La diferenco inter la pilo kaj ligillisto 101 00:06:03,240 --> 00:06:08,590 estas ke en la stako vi nur havas aliron al la lasta elemento kiu estis metita en la stako. 102 00:06:08,590 --> 00:06:11,770 Ĝi nomiĝas lasta en, unua el. 103 00:06:11,770 --> 00:06:15,090 Ĝuste kiel vi havas stako de pletoj, 104 00:06:15,090 --> 00:06:17,670 se vi metas pleton sur la supron de la pilo, 105 00:06:17,670 --> 00:06:22,670 vi devas forigi ke pleto unua havi aliro al la alia pletoj. 106 00:06:22,670 --> 00:06:26,310 Ĝi estas la sama afero kun stakoj. 107 00:06:26,310 --> 00:06:31,220 Do se mi volas, ekzemple, aldoni elementon al stako, kion mi faru? 108 00:06:31,220 --> 00:06:34,070 Ĝi nomiĝas puŝo, kaj ĝi estas sufiĉe simpla. 109 00:06:34,070 --> 00:06:37,130 La unua afero, vi devas fari, estas kontroli, ĉu la grandeco de la stako 110 00:06:37,130 --> 00:06:40,150 ne estas pli granda aŭ egala al la kapablo de la pilo. 111 00:06:40,150 --> 00:06:45,810 Ĉar se vi jam estas sur plena kapablo, vi ne povas aldoni ion alian. 112 00:06:45,810 --> 00:06:51,140 Kaj tiam se ne, vi nur devas aldoni la elementon al la stako. 113 00:06:51,140 --> 00:06:54,530 Kaj fine, pliigo de la grandeco. Do ĝi estas bela simpla. 114 00:06:54,530 --> 00:06:57,140 Do mi simple aldonu la numero 2. 115 00:06:57,140 --> 00:07:00,350 Kaj se mi volas pop, kio signifas ke mi volas forigi 116 00:07:00,350 --> 00:07:03,870 la lasta elemento kiu estis aldonitaj kaj redoni la valoro de la elemento, 117 00:07:03,870 --> 00:07:09,180 la unua afero, kiun mi devos kontroli estas ke la pilo ne estas malplena. 118 00:07:09,180 --> 00:07:11,510 Ĉar se ĝi estas malplena, mi ne povas reveni nenion. 119 00:07:11,510 --> 00:07:14,820 En tiu kazo, mi redonante -1. 120 00:07:14,820 --> 00:07:18,960 Alie, mi tuj dekremento de la grandeco de la specifon, 121 00:07:18,960 --> 00:07:22,510 kaj revenu nombroj (s.size). 122 00:07:22,510 --> 00:07:27,230 Kial mi dekremento de la grandeco kaj tiam revenu s.size? 123 00:07:27,230 --> 00:07:30,930 Ĝi estas pro tio, en ĉi tiu kazo, la spec havas grandecon 4, 124 00:07:30,930 --> 00:07:33,810 kaj mi volas redoni la kvara elemento, ĉu ne? 125 00:07:33,810 --> 00:07:36,030 Sed kio estas la indekso de la kvara elemento? Tri. 126 00:07:36,030 --> 00:07:44,510 Ekde mi grandeco - ĝi tuj estu 3, mi povas simple reveni s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 ĉar ĝi estas 3. Do ĝi estas nur la indekso. 128 00:07:48,410 --> 00:07:50,380 >> Nun vostoj. Vostoj estas preskaux la samo. 129 00:07:50,380 --> 00:07:54,950 La sola diferenco estas ke anstataŭ havi lasta en, unua el, 130 00:07:54,950 --> 00:07:57,480 vi devas unue en, unua el. 131 00:07:57,480 --> 00:07:59,460 Probable se vi atendas iri al koncerto, 132 00:07:59,460 --> 00:08:04,260 vi ne estus feliĉaj se vi havis stako anstataŭ atendovico. 133 00:08:04,260 --> 00:08:07,730 Estante la lastan personon veni estus la unua persono por eniri la koncerto. 134 00:08:07,730 --> 00:08:09,760 Vi probable ne estus feliĉa. 135 00:08:09,760 --> 00:08:15,020 En la atendovico, la unua persono por ricevi en estas ankaŭ la unua persono por eliri. 136 00:08:15,020 --> 00:08:18,720 Do, en la difino de vosto, krom havi la grandeco en la tabelo, 137 00:08:18,720 --> 00:08:23,360 vi ankaŭ devas havi la kapon, tio estas en la indekso por la kapo de la stako. 138 00:08:23,360 --> 00:08:29,000 Do la unua elemento ĝuste nun. 139 00:08:29,000 --> 00:08:32,710 Enqueue estas la sama afero kiel puŝo por piloj. 140 00:08:32,710 --> 00:08:34,980 Se vi estus tre naiva, vi simple diru, 141 00:08:34,980 --> 00:08:39,289 nu, mi povas nur fari ekzakte la samon kiel mi faris por puŝo. 142 00:08:39,289 --> 00:08:44,030 Mi povas simple kontroli ĉu ĝi ne estas preter la kapablo. 143 00:08:44,030 --> 00:08:48,760 Se jes, mi revenos falsa, alie mi povas simple eksporti la nova valoro 144 00:08:48,760 --> 00:08:50,630 kaj tiam pliigo de la grandeco. 145 00:08:50,630 --> 00:08:52,750 Sed kial estas tiu erara? 146 00:08:52,750 --> 00:08:55,010 Vidu tiun ekzemplon. 147 00:08:55,010 --> 00:08:57,020 Mi provas enqueue faskon da ŝtofo, 148 00:08:57,020 --> 00:08:58,390 kaj tiam mi iros dequeue kaj enqueue. 149 00:08:58,390 --> 00:09:00,550 Estas multe da ordonoj, sed ĝi estas tre simpla. 150 00:09:00,550 --> 00:09:04,790 Mi iras al enqueue 5, do aldoni 5, kaj poste 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, kaj do mi volas dequeue ion, 152 00:09:09,310 --> 00:09:12,000 kio signifas, ke mi tuj forigu la unua ero. 153 00:09:12,000 --> 00:09:14,640 Do mi tuj forigi la numero 3, right? 154 00:09:14,640 --> 00:09:17,320 La unua ero. Okay. 155 00:09:17,320 --> 00:09:21,450 Nun, se mi provas enqueue ion alian, kio okazos? 156 00:09:21,450 --> 00:09:24,290 Laŭ mia efektivigo, 157 00:09:24,290 --> 00:09:31,040 Mi tuj metos la sekvan numeron en la indekso q.size. 158 00:09:31,040 --> 00:09:35,140 En ĉi tiu kazo, la grandeco estas 8, 159 00:09:35,140 --> 00:09:38,640 tiel la indekso 8 estos ĉi tie en la lasta pozicio. 160 00:09:38,640 --> 00:09:43,900 Se mi provas enqueue 1 ĝuste ĉi tie, mi vidus overwriting la lasta pozicio 161 00:09:43,900 --> 00:09:45,870 al la nombro 1, kio estas tute erara. 162 00:09:45,870 --> 00:09:49,870 Kion mi volas fari, estas wrap ĉirkaŭe kaj iru al la unua pozicio. 163 00:09:49,870 --> 00:09:52,870 Eble vi devus nur diru, bone, mi nur devas kontroli 164 00:09:52,870 --> 00:09:55,600 se mi povos efektive metis ion tie. 165 00:09:55,600 --> 00:09:58,560 Se ne, mi simple diru, ho, la nova plena kapablo 166 00:09:58,560 --> 00:10:02,010 Estas efektive kapablon - 1, kaj vi ne povas meti ero tie. 167 00:10:02,010 --> 00:10:06,150 Sed kio estas la problemo? La problemo estas ke se mi ĝuste dequeue ĉio ĉi tie 168 00:10:06,150 --> 00:10:08,240 kaj tiam mi provos aldoni ion alian, estus ĝuste diri, 169 00:10:08,240 --> 00:10:11,210 bone, ke vi estas ĉe plena kapablo, kiu estas 0. 170 00:10:11,210 --> 00:10:13,620 Do via vosto estas for. 171 00:10:13,620 --> 00:10:16,990 Vi devas ĉirkaŭfermi ĉirkaŭe, kaj maniero de fluigi ĉirkaŭe 172 00:10:16,990 --> 00:10:22,040 ke vi uloj lernis en vizia kaj aliaj psets uzis mod. 173 00:10:22,040 --> 00:10:29,090 Vi povas provi ĝin hejme por kompreni kial vi farus q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapablon, sed se vi kontrolu ĉi tie, 175 00:10:31,080 --> 00:10:34,760 ni povas vidi ke gxi funkcias. 176 00:10:34,760 --> 00:10:37,760 Do en la lasta ekzemplo, q.size estis 8 177 00:10:37,760 --> 00:10:47,590 kaj la kapo estis 1, ĉar estis ĉi pozicio ĉi tien el la tabelo. 178 00:10:47,590 --> 00:10:51,970 Do estos la 8 + 1, 9. Mod kapablo 9 devus esti 0. 179 00:10:51,970 --> 00:10:56,640 Estus iri al la indekso 0. Ni estos en la dekstra pozicio. 180 00:10:56,640 --> 00:10:59,750 Kaj tiam provu la atendovico hejme. 181 00:10:59,750 --> 00:11:04,950 Kelkaj gravaj aferoj: provu kompreni la diferencon inter la pilo kaj vosto. 182 00:11:04,950 --> 00:11:11,620 Hejme, provi atingi tre familiara kun efektivigo enqueue, dequeue, puŝo kaj popo. 183 00:11:11,620 --> 00:11:16,560 Kaj ankaŭ komprenas kiam vi uzus cxiun el ili. 184 00:11:16,560 --> 00:11:22,830 >> Do ni malstreĉiĝi dum 10 sekundoj kun fasko da pokémons. 185 00:11:22,830 --> 00:11:26,080 Kaj nun ni revenu al datumstrukturoj. 186 00:11:26,080 --> 00:11:29,770 Hash tabloj. Multaj homoj estis timigita de hash tabloj. 187 00:11:29,770 --> 00:11:33,650 en problemo starigis 6, Literumilo. 188 00:11:33,650 --> 00:11:35,980 Hash tabloj kaj provas, multajn homojn al timigita de ili. 189 00:11:35,980 --> 00:11:38,540 Ili kredas ke ili estas tiom malfacile kompreni. Jes? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problemo aro 5. >> Problemo agordi 5, yeah. Danke Rob. 191 00:11:41,490 --> 00:11:43,370 Jes. Ses estis Huff n 'Puff, jes. 192 00:11:43,370 --> 00:11:49,340 Problemo agordi 5 estis Literumilo, kaj vi devis uzi aŭ hash tablo aux provu. 193 00:11:49,340 --> 00:11:55,360 Multaj homoj opiniis, ke ili estis super malfacile kompreneblaj, sed ili estas efektive sufiĉe simpla. 194 00:11:55,360 --> 00:12:01,290 Kio estas hash tablo, esence? A hash tablo estas tabelo el ligita listoj. 195 00:12:01,290 --> 00:12:06,730 La sola diferenco inter tabelo kaj hash tablo 196 00:12:06,730 --> 00:12:09,730 estas ke en la hash tablo vi havas ion nomita hash funkcio. 197 00:12:09,730 --> 00:12:12,080 Kio estas hash funkcio? 198 00:12:12,080 --> 00:12:13,970 Mi ne scias se vi uloj povas legi ĉi tie. 199 00:12:13,970 --> 00:12:16,090 Ĉi tio estas ekzemplo de hash tablo. 200 00:12:16,090 --> 00:12:19,220 Do vi povas vidi, ke vi havas tabelo kun 31 eroj. 201 00:12:19,220 --> 00:12:22,440 Kaj kion ni faru en hash tablo estas havi hash funkcio 202 00:12:22,440 --> 00:12:26,660 kiu iras al traduki ŝlosilon, ĉiu int al indekso. 203 00:12:26,660 --> 00:12:31,740 Se, ekzemple, se mi volas elekti por B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Mi metus B. Harrison en mia kradaj funkcioj, 205 00:12:34,190 --> 00:12:36,960 kaj la krada funkcio revenus 24. 206 00:12:36,960 --> 00:12:40,930 Do mi scias ke mi volas konservi B. Harrison en 24. 207 00:12:40,930 --> 00:12:46,580 Do tio estas la diferenco inter nur havi tabelon kaj havante hash tablo. 208 00:12:46,580 --> 00:12:48,740 En la hash tablo vi havas funkcion kiu tuj rakontos al vi 209 00:12:48,740 --> 00:12:54,740 kie stoki la datumojn kiujn vi volas konservi. 210 00:12:54,740 --> 00:12:57,040 Por la hash funkcion, kiun vi volas serĉi hash funkcio 211 00:12:57,040 --> 00:13:00,600 ke estas determinaj kaj bone distribuita. 212 00:13:00,600 --> 00:13:07,810 Kiel vi povas vidi ĉi tie, vi vidas ke multo el la datumo, kiun mi volis vendejo estis fakte 19 213 00:13:07,810 --> 00:13:12,470 anstataŭ uzi la 31 kaj 30 kaj 29, kiuj cxiuj estis libera. 214 00:13:12,470 --> 00:13:16,920 Do la krada funkcio, kiun mi uzis, estis ne tre bone distribuita. 215 00:13:16,920 --> 00:13:20,710 Kiam ni diras bone distribuita, ĝi signifas ke ni volas havi, 216 00:13:20,710 --> 00:13:26,520 malafable, almenaŭ 1 aŭ 2 por cxiu el la - 217 00:13:26,520 --> 00:13:32,190 kiel, diferenco de 1 aŭ 2 por cxiu el la indeksoj en la sensilo. 218 00:13:32,190 --> 00:13:43,950 Vi volas havi, malglate, la sama nombro de eroj en ĉiu ligillisto en la tabelo. 219 00:13:43,950 --> 00:13:48,600 Kaj ĝi estas facila al kontroli, ĉu ĝi estas valida en la hash tablo, vidi kiel hash tabloj. 220 00:13:48,600 --> 00:13:51,770 >> Tiam arboj. Tiu estas arbo. 221 00:13:51,770 --> 00:13:56,400 Arboj en komputila scienco estas renversita pro iu kialo. 222 00:13:56,400 --> 00:14:00,150 Do ĝuste ĉi tie vi havas la radikon de la arbo kaj poste la folioj. 223 00:14:00,150 --> 00:14:05,630 Vi devus nur scii la nomenklaturo por gepatroj kaj infano. 224 00:14:05,630 --> 00:14:12,880 Ĉiu vertico havas liaj filoj, kiuj estas la nodoj kiuj estas sub la patro. 225 00:14:12,880 --> 00:14:19,660 Do, ekzemple, 2 estas tuj estos la patro por 3 kaj por la alia infano rajtas tie, 226 00:14:19,660 --> 00:14:25,290 dum 3 tuj estos la patro por la 1 kaj la aliaj infanoj kiuj estas tie. 227 00:14:25,290 --> 00:14:29,990 Kaj 1 tuj estos 3 de infano, kaj tiel plu. 228 00:14:29,990 --> 00:14:34,610 Ni havas ion multe pli interesa, nomita duuma serĉarbo, 229 00:14:34,610 --> 00:14:39,040 en kiu ĉiuj valoroj je la rajto de vertico 230 00:14:39,040 --> 00:14:41,660 tuj estos en la dekstra, rajto tien - sur la dekstra, 231 00:14:41,660 --> 00:14:46,780 tuj estos pli granda ol la elemento en la radiko. 232 00:14:46,780 --> 00:14:49,780 Do, se mi havas la numeron 5 ĝuste ĉi tie, ĉiuj elementoj sur la dekstra 233 00:14:49,780 --> 00:14:51,940 tuj estos pli granda ol 5, kaj maldekstre 234 00:14:51,940 --> 00:14:56,770 ĉiuj elementoj tuj estos malpli ol 5. 235 00:14:56,770 --> 00:14:58,780 Kial estas ĉi utila? 236 00:14:58,780 --> 00:15:01,660 Nu, se mi volas kontroli, ĉu la nombro 7 estas ĉi tie, ekzemple, 237 00:15:01,660 --> 00:15:05,960 Mi nur iri al la 5 unuaj kaj mi tuj vidas, estas 7 pli grandaj aŭ malpli ol 5? 238 00:15:05,960 --> 00:15:09,540 Ĝi estas pli granda, do mi scias gxin tuj devas esti sur la dekstra de la arbo. 239 00:15:09,540 --> 00:15:13,980 Do mi havas multe malpli uzatajxojn, por rigardi. 240 00:15:13,980 --> 00:15:19,520 En apliko de duuma serĉarbo, la nodo, mi simple tuj devos havi datumojn, 241 00:15:19,520 --> 00:15:21,750 tiel int n; vi povus havi ankaŭ kordo 242 00:15:21,750 --> 00:15:23,630 aŭ io vi volis. 243 00:15:23,630 --> 00:15:28,100 Vi nur devas esti zorgema je difinanta kio estas pli granda, kio estas malpli. 244 00:15:28,100 --> 00:15:30,390 Do, se vi havis ŝnurojn, ekzemple, vi povus difini 245 00:15:30,390 --> 00:15:34,690 ke ĉiuj tiuj aferoj sur la dekstra tuj havos pli grandan longeco 246 00:15:34,690 --> 00:15:40,940 maldekstren tuj devos malsupra longoj, do estas vere ĝis vi. 247 00:15:40,940 --> 00:15:44,930 >> Kiel mi povas apliki trovos por BST? 248 00:15:44,930 --> 00:15:47,840 La unua afero, kiun ni devos fari estas kontroli, ĉu la radiko estas nula. 249 00:15:47,840 --> 00:15:50,920 Se ĝi estas NULL, tio signifas ke la afero ne estas tie 250 00:15:50,920 --> 00:15:53,330 ĉar vi ne havas eĉ ne arbo, right? 251 00:15:53,330 --> 00:15:55,790 Do mi revenos falsaj. 252 00:15:55,790 --> 00:15:58,740 Alie, mi tuj kontroli, ĉu la nombro estas pli granda 253 00:15:58,740 --> 00:16:01,720 ol la valoro de la radiko. 254 00:16:01,720 --> 00:16:04,250 Mi tuj provos trovi la elemento sur la dekstra 255 00:16:04,250 --> 00:16:08,590 de la arbo. 256 00:16:08,590 --> 00:16:11,310 Vi vidas, ke mi uzas rekursio tie. 257 00:16:11,310 --> 00:16:14,150 Kaj tiam se ĝi estas malpli, Mi iras rigardi maldekstren. 258 00:16:14,150 --> 00:16:18,330 Kaj fine, se ne, se ĝi ne estas malpli aŭ ne estas pli granda, 259 00:16:18,330 --> 00:16:20,660 tio signifas ke ĝi estas la valoro mem. 260 00:16:20,660 --> 00:16:23,010 Do mi ĵus revenas vera. 261 00:16:23,010 --> 00:16:26,360 Vi povas vidi ĉi tie ke mi uzas se, se, se. 262 00:16:26,360 --> 00:16:30,820 Kaj memoru, en kvizo 0, ni havis problemon kiun havis se, se, se, 263 00:16:30,820 --> 00:16:32,780 kaj vi supozis trovi la ineficiencia, 264 00:16:32,780 --> 00:16:35,180 kaj la ineficiencia estis, ke vi uzis se. 265 00:16:35,180 --> 00:16:39,060 Vi devus esti uzata se, alie se, alie se, kaj alie. 266 00:16:39,060 --> 00:16:44,240 Do, mi uzu alian se kaj alie se kaj alian ĉi tie? 267 00:16:44,240 --> 00:16:46,200 Ĉu iu ajn - yeah? 268 00:16:46,200 --> 00:16:51,140 [Studenta parolanto, inaudibles] 269 00:16:51,140 --> 00:16:53,480 Tio estas perfekta. Do ŝi diris ke ne gravas, 270 00:16:53,480 --> 00:16:55,930 nur ĉar la ineficiencia ke ni havis antaŭe 271 00:16:55,930 --> 00:16:59,550 estis, ke pro tio, eble se iu kondiĉo estis kontentigita, 272 00:16:59,550 --> 00:17:03,570 do vi faris agon, sed tiam vi tuj kontroli ĉiuj el la aliaj kondiĉoj. 273 00:17:03,570 --> 00:17:06,319 Sed en tiu kazo, ĝi revenis al la momento, tial ĝi ne gravas. 274 00:17:06,319 --> 00:17:09,220 Do vi ne devos uzi alian se. 275 00:17:09,220 --> 00:17:11,740 >> Kaj fine, ni parolu pri provas, 276 00:17:11,740 --> 00:17:13,800 kio estas ĉies favorato. 277 00:17:13,800 --> 00:17:15,980 Instrukcio try estas arbo de arrays. 278 00:17:15,980 --> 00:17:20,369 Estas tre rapida por rigardi supren valoroj, sed ĝi uzas multe da memoro. 279 00:17:20,369 --> 00:17:22,530 Kaj ĝi estas kutime por filtri vortoj, do kiam vi 280 00:17:22,530 --> 00:17:27,920 volas apliki, por ekzemplo, mi ne scias, kiel telefono libro en via telefono 281 00:17:27,920 --> 00:17:30,440 kaj vi volas povi tajpi B 282 00:17:30,440 --> 00:17:32,510 kaj nur havas nomojn de popolo, kiu havas B. 283 00:17:32,510 --> 00:17:37,960 Ĝi estas tre facila por apliki ke uzante try, ekzemple. 284 00:17:37,960 --> 00:17:39,820 Kiel vi difinas nodon en try? 285 00:17:39,820 --> 00:17:43,910 Vi nur devas havi bool tiu tuj estos is_word. 286 00:17:43,910 --> 00:17:48,660 Tio reprezentas, ke uzante ĉiujn karakterojn antaŭ tiu nodo, 287 00:17:48,660 --> 00:17:51,920 vi sukcesis formi vorton, 288 00:17:51,920 --> 00:17:57,230 kaj tiam vi havos tabelo de montriloj al nodoj. 289 00:17:57,230 --> 00:18:03,120 Ĉu vi povas vidi, ke ni havas tabelo de patro nodoj, do vertico * tabelo? Jes? 290 00:18:03,120 --> 00:18:06,050 Do ni vidu kiel tio funkcios. Ĉar la sorĉo ĉekon, 291 00:18:06,050 --> 00:18:08,230 ni havos tabelo de 27 elementoj, 292 00:18:08,230 --> 00:18:12,150 ĉar ni havas ĉiujn literojn plus la apostrofo. 293 00:18:12,150 --> 00:18:17,800 Antaŭ ĉi tie mi simple tuj uzi 2 ĉar mi volas povi skribi sur la tabulo. 294 00:18:17,800 --> 00:18:20,230 Okay. Do tiu estas ekzemplo de provo. 295 00:18:20,230 --> 00:18:25,600 Se mi ĝuste difini la unuan nodon, mi devos tabelo el 2 eroj 296 00:18:25,600 --> 00:18:29,290 ke estas 2 montriloj al NULL, do mi simple metis 'a' kaj 'b'. 297 00:18:29,290 --> 00:18:32,430 Kaj mi tuj havos bool kiu diras is_word. 298 00:18:32,430 --> 00:18:34,420 Ĝi okazas al esti malvera por la unua, 299 00:18:34,420 --> 00:18:37,370 nur ĉar, antaŭ kiu vi ne havas ajnan gravuloj. 300 00:18:37,370 --> 00:18:40,900 Do malplena vorto ne estas vorto. Do estas falsa. 301 00:18:40,900 --> 00:18:46,320 Se mi volas aldoni 'a' por tiu vortaro, kio estus, mi devas fari? 302 00:18:46,320 --> 00:18:49,760 Mi farus nur devas malloc nova nodo por 'unu', 303 00:18:49,760 --> 00:18:54,630 kaj tiam aldoni lian vorton por vera. 304 00:18:54,630 --> 00:19:00,180 Do ĝuste reprezentas ke li 'a' tuj esti vera. Havas sencon? 305 00:19:00,180 --> 00:19:04,120 Tiam, se mi volas aldoni 'ba', mi devos malloc 1 por 'b', 306 00:19:04,120 --> 00:19:07,550 kaj tiam Mi tuj instalis la bulea al falsa, 307 00:19:07,550 --> 00:19:10,160 ĉar 'b' per si mem ne estas vorto. 308 00:19:10,160 --> 00:19:13,010 Tiam mi tuj malloc alia por 'oni', do 'ba', 309 00:19:13,010 --> 00:19:16,290 kaj tiam Mi tuj starigis ĝi estas vorto, por vera. 310 00:19:16,290 --> 00:19:18,950 Ĉar 'ba' estas vorto. 311 00:19:18,950 --> 00:19:21,910 Kaj tiam se mi volas vidi, ĉu 'b' estas en tiu vortaro, 312 00:19:21,910 --> 00:19:26,730 Mi povas nur iri al la unua, 'b'. Mi malsupreniros, kaj mi rigardas estas vorto, kaj gxi diras falsaj. 313 00:19:26,730 --> 00:19:30,110 Do ĝi ne estas vorto. Se mi volas kontroli 'ba', 314 00:19:30,110 --> 00:19:38,010 Mi iras al la unua, 'b', kaj tiam iru al 'a', kaj mi vidas veran, do gxi estas vorto. Havas sencon? 315 00:19:38,010 --> 00:19:41,950 Multaj homoj get konfuzitaj de provoj. Neniu? 316 00:19:41,950 --> 00:19:44,740 >> Fine, Huffman kodigo. Huffman kodigo estas tre utila 317 00:19:44,740 --> 00:19:47,550 savi memoron kaj kunpremi tekstaj dosieroj, 318 00:19:47,550 --> 00:19:52,270 nur cxar multajn fojojn vi uzas 'a' kaj 'e', ​​ekzemple, 319 00:19:52,270 --> 00:19:57,710 en viaj dokumentoj, sed mi ne scias se vi uloj uzi 'q' aŭ 'z' tiel. 320 00:19:57,710 --> 00:20:02,040 Havante nur 1 bajton por ĉiu sola karaktero, 321 00:20:02,040 --> 00:20:08,520 ĉiu unuopa - la 256 karaktrojn kiuj ni havas en la ASCII tabelo ne estas tre bonaj, 322 00:20:08,520 --> 00:20:11,410 nur ĉar tie estas kelkaj signoj ke oni uzas multe pli, 323 00:20:11,410 --> 00:20:15,180 tiel vi probable devus uzi malpli da memoro por tiuj. 324 00:20:15,180 --> 00:20:17,560 Kjel mi uzas Huffman kodigon? 325 00:20:17,560 --> 00:20:20,010 Ni devas fari Huffman arbo. 326 00:20:20,010 --> 00:20:23,370  A Huffman arbo havas nodoj 327 00:20:23,370 --> 00:20:27,760 kiuj havas simbolon kiu tuj estos kiel, 'a', 'b', 'c', la leteron, 328 00:20:27,760 --> 00:20:32,990 kion ajn leteron vi havas, ofteco kiu estas la ofteco la vorto aperas en la teksto, 329 00:20:32,990 --> 00:20:36,280 ke vi estis kreante la Huffman arbo, 330 00:20:36,280 --> 00:20:41,800 kaj tiam nodo kiu tuj indikas la maldekstro de la Huffman arbo 331 00:20:41,800 --> 00:20:47,210 kaj al alia nodo kiu tuj indikas la dekstra. Do ĝuste kiel arbon. 332 00:20:47,210 --> 00:20:49,440 Kiel vi konstruos Huffman arbo? 333 00:20:49,440 --> 00:20:54,020 Vi tuj reprenos la 2 nodojn kiuj havas la plej malaltan frekvencoj. 334 00:20:54,020 --> 00:20:56,490 Se vi havas egalecon vi tuj reprenos la 2 nodoj 335 00:20:56,490 --> 00:20:59,870 kiuj havas la plej malaltan Askio valoroj tiel. 336 00:20:59,870 --> 00:21:02,420 Tiam vi tuj krei novajn arbo el tiuj 2 nodoj 337 00:21:02,420 --> 00:21:08,030 kiu iras al havi la kombinitaj frekvenco en la gepatra nodo. 338 00:21:08,030 --> 00:21:13,240 Kaj tiam vi tuj forigu la 2 infanoj el la arbaro 339 00:21:13,240 --> 00:21:15,570 kaj anstataŭigi ilin per la patro. 340 00:21:15,570 --> 00:21:18,930 Kaj vi tuj ripeti ke ĝis vi nur havas 1 arbon en la arbaro. 341 00:21:18,930 --> 00:21:23,840 Do ni vidu kiel vi farus Huffman arbo por ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Vi povas vidi ĉi tie ke ĉiuj literoj havas frekvenco 1 krom 'A'; kiu havas frekvenco 2. 343 00:21:29,220 --> 00:21:34,090 Do mi kreis nodojn por ĉiuj literoj Mi metis en ordo de Askio valoro kaj frekvenco. 344 00:21:34,090 --> 00:21:40,090 Do se mi volas krei la unuan arbon, gxi estos kun 'L' kaj 'm'. 345 00:21:40,090 --> 00:21:43,100 Do ĝi estas ĉi tie. La frekvenco de la paro estos 2 346 00:21:43,100 --> 00:21:49,470 ĉar ĝi estas 1 + 1, tiam la sekva 2 kun la plej malalta frekvencoj estas 'Y' kaj 'Z'. 347 00:21:49,470 --> 00:21:53,180 Kaj tiam mi havas cxiujn el ili estante - havas oftecon de 2. 348 00:21:53,180 --> 00:22:00,470 Do kio ones estas kiuj havas la plej malaltan Askio valoro por la venonta unu? 349 00:22:00,470 --> 00:22:04,830 'A' kaj 'L'. Do mi kredas la nova nodo, 350 00:22:04,830 --> 00:22:09,930 kaj laste, estas 4 kaj 2, tuj kiam 2 estas tuj estos en la maldekstra. 351 00:22:09,930 --> 00:22:12,430 Kaj jen estas la Huffman arbo. 352 00:22:12,430 --> 00:22:16,060 Tiam, se mi volas skribi tekston, 353 00:22:16,060 --> 00:22:24,440 kiel en duuma por konverti al teksto, uzante la Huffman arbo estas tre facila. 354 00:22:24,440 --> 00:22:30,220 Ekzemple, se mi diras ke movanta al la maldekstra estas 0 kaj movante al dekstre estas 1, 355 00:22:30,220 --> 00:22:32,410 Kio estas tiu tuj reprezenti? 356 00:22:32,410 --> 00:22:35,530 Do kiel 1, 1, do dekstra, rajto, 357 00:22:35,530 --> 00:22:40,370 kaj do 0, tiel lasis estus L, kaj tiam 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Do 1, 0, do nur 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Kaj tiam 0, 1, do 'Z'. 360 00:22:47,540 --> 00:22:52,170 Kaj tiam 1, 0, 0 - neniu. 361 00:22:52,170 --> 00:22:56,780 0, 0 estos 'Y', tiel mallaborema. 362 00:22:56,780 --> 00:23:06,060 Do tio estas ĉio por mi, Rob tuj transpreni. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Do, semajno 7 vazaro. 364 00:23:08,400 --> 00:23:11,390 Ni havas multon por transiru vere rapida. 365 00:23:11,390 --> 00:23:13,430 Laŭbita operatoroj, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 biblioteko, tiam HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Ĉio en kiel 15 al 20 minutoj. 368 00:23:20,990 --> 00:23:24,330 Laŭbita operatoroj. Tie estas 6 el ili, ke vi bezonas scii. 369 00:23:24,330 --> 00:23:31,200 Laŭbita kaj, laŭbita aŭ, XOR, maldekstra movo, dekstra-ŝanĝo, kaj ne. 370 00:23:31,200 --> 00:23:35,420 Ĝuste Shift kaj ne vi apenaŭ vidis en prelego ĉe ĉiuj. 371 00:23:35,420 --> 00:23:40,480 Ni transiru rapide cxi tie, sed estas bone scii ke tiuj estas la 6 kiu ekzistas. 372 00:23:40,480 --> 00:23:45,070 Memoru ke laŭbita operatoroj estas kiel kiam vi faras 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Vi ne estas kontraktanta kun la duuma de 3 kaj 4. 374 00:23:49,420 --> 00:23:56,550 Kun laŭbita operatoroj vi estas vere pritraktas la individuajn bitojn de la numeroj 3 kaj 4. 375 00:23:56,550 --> 00:23:59,120 >> Do la unua kiu ni diras estas laŭbita ne, 376 00:23:59,120 --> 00:24:02,340 kaj ĉiuj faras estas klaki ĉiuj bitoj. 377 00:24:02,340 --> 00:24:05,500 Do ĉi tie, se vi skribas ĉi en C, oni ne skribas gxin 378 00:24:05,500 --> 00:24:09,380 kiel ~ 11011 aŭ kio ajn, vi skribus gxin like ~ 4, 379 00:24:09,380 --> 00:24:12,970 kaj tiam ĝi devus klaki la duuma reprezento de 4. 380 00:24:12,970 --> 00:24:24,800 Do jen, ~ de iuj duuma nombro 1101101 tuj akurate klaki ĉiuj 1-oj al 0 kaj por ĉiu 0 La 1-aj jaroj. 381 00:24:24,800 --> 00:24:27,600 Kiel mi diras tie, la ofta uzo de tiu, 382 00:24:27,600 --> 00:24:30,830 kaj ni vidos ĝin en iom, estas kiel ni volas veni kun iu nombro 383 00:24:30,830 --> 00:24:35,460 kie ĉiuj bitoj estas 1, krom unu el ili. 384 00:24:35,460 --> 00:24:38,560 Do ĝi estas kutime pli facile esprimi la nombro 385 00:24:38,560 --> 00:24:40,630 kie nur tiu sola iom uziĝas, 386 00:24:40,630 --> 00:24:44,650 kaj poste prenu la ~ de ĝi, do ĉiu alia bito estas fiksita krom tiu. 387 00:24:44,650 --> 00:24:50,300 Do, tio estas kion ni tuj uzi pli iom. 388 00:24:50,300 --> 00:24:58,220 >> Biteca aŭ. Ĉi tie estas 2 duuma ciferoj, kaj tiuj 2 nombroj 389 00:24:58,220 --> 00:25:00,780 estas sufiĉe reprezentaj, de kiam ili reprezentas ĉiun eblan 390 00:25:00,780 --> 00:25:07,290 kombino de bitoj vi povus bezoni por operacii sur. 391 00:25:07,290 --> 00:25:13,540 Ĉi tie, kiam mi or'd ĉiu bito, ni simple intencas kompari rekte malsupren. 392 00:25:13,540 --> 00:25:15,410 Do sur la maldekstra flanko ni havas 1 kaj 1. 393 00:25:15,410 --> 00:25:20,510 Kiam mi laŭbita | tiujn, kion mi povos ricevi? Unu. 394 00:25:20,510 --> 00:25:25,320 Tiam laŭbita | 0 kaj 1 estas tuj donu al mi? Unu. 395 00:25:25,320 --> 00:25:27,840 Laŭbita 1 kaj 0 tuj estos la sama afero, tiu. 396 00:25:27,840 --> 00:25:31,880 Laŭbita 0 | 0 tuj donu al mi 0. 397 00:25:31,880 --> 00:25:37,300 Do la sola kazo kie mi ricevas 0 estas en la 0 | 0 kazo. 398 00:25:37,300 --> 00:25:40,020 Kaj vi povas pensi, ke ĝuste kiel viaj logikaj Ors. 399 00:25:40,020 --> 00:25:44,830 Do, se vi pensas pri 1 kiel vera kaj 0 kiel falsa, la samo validas ĉi tie. 400 00:25:44,830 --> 00:25:50,040 Do veraj aŭ vera, estas vera; vera aŭ falsa estas vera. 401 00:25:50,040 --> 00:25:57,150 Falsa aŭ vera, estas vera; malvera aŭ falsa estas la sola afero ke fakte malvera. 402 00:25:57,150 --> 00:26:00,100 Jen la ekzemplo kiu vi devus scii 403 00:26:00,100 --> 00:26:05,160 kiel bela bona ekzemplo pri kiam laŭbita operatoroj estas uzataj. 404 00:26:05,160 --> 00:26:08,660 Jen, se ni aŭ ĉefurbo 'A' kun Ox20, 405 00:26:08,660 --> 00:26:11,830 kaj ni rigardu tiujn en la dua, ni ricevas ion. 406 00:26:11,830 --> 00:26:16,020 Kaj se ni aux minuskle 'a' kun Ox20, ni atingos ion. 407 00:26:16,020 --> 00:26:26,750 Do ni elsxiros Askio tablo. 408 00:26:26,750 --> 00:26:34,000 Okay. Jen ni vidas ke 'A' estas - 409 00:26:34,000 --> 00:26:36,920 ĉi tie ni havas 'A' estas dekuma 65. 410 00:26:36,920 --> 00:26:45,120 Sed mi iros kun deksesumaj, kiu estas Ox41. 411 00:26:45,120 --> 00:26:48,280 Bela certa ke ni vidis gxin en la klaso. Mi kredas ke ni vidis gxin en la klaso 412 00:26:48,280 --> 00:26:52,730 ke estas sufiĉe facile konverti de deksesumaj al duuma. 413 00:26:52,730 --> 00:26:55,280 Do ĉi tie, se mi volas meti 4 en duuma, 414 00:26:55,280 --> 00:26:59,550 Tio estas nur tuj estos 0100. 415 00:26:59,550 --> 00:27:03,620 Tiu estas la 1 kaj la loko, 2 kaj la loko, 4 kaj la loko, do tio estas 4. 416 00:27:03,620 --> 00:27:08,550 Tiam mi povas fendi 1 enen duuma, kiu tuj estos 0001. 417 00:27:08,550 --> 00:27:14,280 Kaj tial ĉi tiu tuj estos la reprezentado de 'A' en duuma. 418 00:27:14,280 --> 00:27:22,720 Prenante minuskla 'a', ĝi estas nun tuj estos Ox61, 419 00:27:22,720 --> 00:27:27,050 kie, dividi tiujn supren enen ĝia duuma, do 6 - 420 00:27:27,050 --> 00:27:37,830 Ni vere fari ĝin - ĉu neniu eraser? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Do disigi 6 en duuma tuj estos 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Kaj forkiĝanta 1 tuj estos 0001. 423 00:27:54,610 --> 00:27:56,520 Rigardante la diferenco inter tiuj 2, 424 00:27:56,520 --> 00:28:04,250 ni vidas, ke la sola diferenco inter minuskla kaj majuskla 'A' estas cxi tiu sola iom. 425 00:28:04,250 --> 00:28:11,810 Do revenante al tie - bonfartas. 426 00:28:11,810 --> 00:28:15,920 Revenanta al ĉi tie, se ni rigardas kion la iom Ox20 estas, 427 00:28:15,920 --> 00:28:22,210 tiel forkiĝanta Ox20 en ĝian duuma, 428 00:28:22,210 --> 00:28:27,310 Estas 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, la sola iom metitan estas jena iom ke ni okupiĝas pri: 430 00:28:33,470 --> 00:28:38,210 kun ŝanĝo inter kapitalo kaj minuskla 'a'. 431 00:28:38,210 --> 00:28:47,610 Se mi aŭ 'A', kio estas ĉi tiu: A ', 432 00:28:47,610 --> 00:28:50,580 se mi aŭ 'A' kun Ox20, 433 00:28:50,580 --> 00:28:53,490 kion mi povos ricevi? 434 00:28:53,490 --> 00:28:58,960 [Studento, inaudibles] >> Minusklaj 'a', ĉar ĝi tuj klaki ĉi iom al 1. 435 00:28:58,960 --> 00:29:04,170 Kaj se mi aŭ 'a' kun Ox20, kion mi povos ricevi? 436 00:29:04,170 --> 00:29:08,780 Minuskla a, ĉar ĝuste oring 'a' kun Ox20, 437 00:29:08,780 --> 00:29:14,580 Mi simple tuj estos oring ĉi sola iom al 1, temas jam 1, do tio ne gravas. 438 00:29:14,580 --> 00:29:17,960 Do ni ricevas 'a' kaj 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Biteca kaj. Denove, ni povas pensi pri tio kiel nia logika kaj kolego. 440 00:29:24,820 --> 00:29:28,180 Sur la maldekstra flanko ni havas veran & vera. 441 00:29:28,180 --> 00:29:31,160 Ĝi okazas al esti vera, kaj por cxiuj el la kazoj, 442 00:29:31,160 --> 00:29:36,270 falsa & veraj aŭ vera & falsa, aŭ falsaj & falsa, 443 00:29:36,270 --> 00:29:38,550 neniu el tiuj aferoj estas veraj. 444 00:29:38,550 --> 00:29:44,170 Do kion ni finu atingi estas 1000. 445 00:29:44,170 --> 00:29:48,830 Do nun, tie, tie estas kie mi uzis la fidela laŭbita ne, 446 00:29:48,830 --> 00:29:52,230 kie ni havis Ox20. 447 00:29:52,230 --> 00:29:54,350 Do tiu estas Ox20. 448 00:29:54,350 --> 00:29:59,570 Nu, kion mi volas fari, laŭbita ~ de Ox20. 449 00:29:59,570 --> 00:30:03,600 Tio tuj klaki ĉiuj bitoj. 450 00:30:03,600 --> 00:30:09,330 Do mi havas 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Kaj tia 'A' anded kun ~ Ox20 tuj donu al mi kio? 452 00:30:18,940 --> 00:30:22,430 La sola iom ni vere devas pripensi estas ĉi tiu, 453 00:30:22,430 --> 00:30:26,020 ekde, se ĉiuj el tiuj bitoj estas agordita al 1, 454 00:30:26,020 --> 00:30:29,000 tiam ni tuj ricevas ekzakte kion 'A' estis, 455 00:30:29,000 --> 00:30:31,260 krom, eble, kio estas tiu bito estas. 456 00:30:31,260 --> 00:30:34,460 Ĉar se ĝi estis 1, nun ĝi estas tuj estos agordita al 0, 457 00:30:34,460 --> 00:30:39,810 ĉar kion ajn tio estas, anded kun ĉi tiu tuj estos 0. 458 00:30:39,810 --> 00:30:43,280 Do kio estas 'A' & ~ Ox20 tuj donu al mi? 459 00:30:43,280 --> 00:30:48,200 [Studentoj respondos, inaudibles] >> Kaj kio estas 'a' kaj - ĝi estas 'A'. 460 00:30:48,200 --> 00:30:52,170 Kaj kio estas 'a' & ~ Ox20 tuj donu al mi? 461 00:30:52,170 --> 00:30:56,720 'Al' Ĉar ĉi tiu estas aktuale ĉirkaŭ 1. 462 00:30:56,720 --> 00:30:59,570 Anfing kun ĉi 0 tuj fari ĝin 0, 463 00:30:59,570 --> 00:31:02,530 kaj nun ni tuj ricevas 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Ambaŭ estas 'A', kaj laste sed ne balaste de tiu tipo, 465 00:31:06,600 --> 00:31:10,830 ni havos _XOR_. Ĝi estas tre multe kiel aŭ, 466 00:31:10,830 --> 00:31:14,400 krom tio signifas ekskluzive aŭ. 467 00:31:14,400 --> 00:31:18,420 Ĉi tio estas kiel kion vi kutime pensas pri kiel aŭ en la reala mondo. 468 00:31:18,420 --> 00:31:23,190 Do vi faras bone 'x' aŭ 'y', sed ne ambaŭ. 469 00:31:23,190 --> 00:31:28,700 Jen 1 ^ 1 tuj esti 0. 470 00:31:28,700 --> 00:31:33,650 Ĉar vera, ĉi tio estas - ĝi ne funkcias tiel kun la logika vero kaj falsaj 471 00:31:33,650 --> 00:31:37,150 kiel laŭbita & kaj aŭ fari, 472 00:31:37,150 --> 00:31:40,100 sed veraj ^ vera estas falsa. 473 00:31:40,100 --> 00:31:44,810 Ĉar ni nur volas redoni vera se nur unu el ili estas vera. 474 00:31:44,810 --> 00:31:50,950 Do 1 ^ 1 estas 0. Kio pri 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Estas 1. 1 ^ 0 estas 1, 0 ^ 0 estas 0. 476 00:31:56,010 --> 00:32:03,890 Do sub ĉiuj cirkonstancoj, 0 laŭbita ion 0 tuj esti 0. 477 00:32:03,890 --> 00:32:10,270 1 laŭbita ion 0 aŭ 0 laŭbita 1, 478 00:32:10,270 --> 00:32:14,660 se ĝi estas | aux ^, gxi devos esti 1, kaj se ĝi estas & ĝi devos esti 0. 479 00:32:14,660 --> 00:32:20,850 Kaj la sola kazo kie 1 laŭbita 1 estas ne 1, estas kun ekskluzivaj aŭ. 480 00:32:20,850 --> 00:32:24,580 Tio estas 0110. 481 00:32:24,580 --> 00:32:36,520 Do jen nun, uzante _XOR_ - tial ni estas ree en la 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ Ox20 estas tiuj 2 bitojn ni komparas. 483 00:32:43,480 --> 00:32:50,020 Do 1 ^ 0 tuj doni al mi kio? Al unu. 484 00:32:50,020 --> 00:32:58,430 'A' ^ Ox20 tuj donu al mi? Minuskla a. 485 00:32:58,430 --> 00:33:04,010 'A' ^ Ox20 tuj donu al mi? Ĉefurbo A. 486 00:33:04,010 --> 00:33:09,310 Ĉar kion ajn tio faras, tiu XORing kun Ox20 487 00:33:09,310 --> 00:33:15,380 Estas efektive klakanta ajn tiu bito estas. 488 00:33:15,380 --> 00:33:21,240 Se tio estas 0, ĝi estas nun tuj fariĝi 1. 489 00:33:21,240 --> 00:33:26,160 Ekde ĉi tiu estas 1, 1 ^ 1 estas 0. 490 00:33:26,160 --> 00:33:33,280 Do nia 'a' fariĝis 'A', kaj nian 'A' fariĝis 'a'. 491 00:33:33,280 --> 00:33:36,910 Do _XOR_ estas vere konvena maniero de simple klakanta la kazo. 492 00:33:36,910 --> 00:33:39,960 Vi nur volas persisti super sinsekvo da literoj 493 00:33:39,960 --> 00:33:44,330 kaj alterni la kazo de cxiu unuopa signo, 494 00:33:44,330 --> 00:33:50,680 vi simple _XOR_ ĉion kun Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Nun ni forlasis deĵoro. Maldekstre movo estas ĝuste tuj, esence, 496 00:33:55,220 --> 00:34:01,250 puŝi ĉiujn numerojn en aux maldekstren, kaj enmetas 0 La malantaŭ ili. 497 00:34:01,250 --> 00:34:05,550 Do ĉi tie ni havas 00001101. 498 00:34:05,550 --> 00:34:08,560 Ni iras al puŝi 3 0 s en la dekstra, 499 00:34:08,560 --> 00:34:13,580 kaj ni preni 01101000. 500 00:34:13,580 --> 00:34:16,380 En binara terminoj, 501 00:34:16,380 --> 00:34:24,699 Ni vidas, ke tio estas vere kontraktanta 13 maldekstrema moviĝis kun 3, kiu donas al ni 104. 502 00:34:24,699 --> 00:34:32,530 Do maldekstra ŝanĝiĝadas, ni vidas tie, x << y estas esence x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 estas 8, do 13 * 8 estas 104. 504 00:34:40,139 --> 00:34:45,679 Se vi nur pensas pri duuma ĝenerale, kiel ĉiu cifero, 505 00:34:45,679 --> 00:34:49,530 se ni komencos de la dekstra, ĝi estas la 1 kaj la loko, tiam la 2 kaj la loko, tiam la 4an kaj la loko. 506 00:34:49,530 --> 00:34:51,330 Do puŝante en 0 La de dekstre 507 00:34:51,330 --> 00:34:55,080 Ni nur puŝante aferoj, kiuj estis en la 4 La loko por la 8an de loko, 508 00:34:55,080 --> 00:34:57,920 kaj aferojn, kiuj estis en la 8an de loko al la 16 kaj la loko. 509 00:34:57,920 --> 00:35:01,280 Ĉiu movo simple multiplikas per 2. Jes? 510 00:35:01,280 --> 00:35:05,210 [Studenta] Kio okazas se vi moviĝis per 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Se vi moviĝis per 5 vi farus nur perdos ciferoj. 512 00:35:10,790 --> 00:35:15,410 Neeviteble, ĝi estas la sama afero. Kiel, entjeroj estas nur 32 bitoj, 513 00:35:15,410 --> 00:35:20,750 do se vi aldonas 2 vere grandaj entjeroj, gxi simple ne havas en entjero. 514 00:35:20,750 --> 00:35:23,660 Do ĝi estas la sama afero ĉi tie. Se vi ŝanĝis por 5, 515 00:35:23,660 --> 00:35:25,650 ni estus nur perdi tiu. 516 00:35:25,650 --> 00:35:28,820 Kaj tio estas speco de tio, kion mi volas diri per "malafable," 517 00:35:28,820 --> 00:35:37,470 kie se vi ŝanĝos tro multe, vi perdas bitojn. 518 00:35:37,470 --> 00:35:39,830 >> Rajto shift tuj estos la malon, 519 00:35:39,830 --> 00:35:43,090 kie ni iras al baton 0 La ekstere la fino, 520 00:35:43,090 --> 00:35:48,400 kaj por niaj celoj, plenigu 0 La de maldekstre. 521 00:35:48,400 --> 00:35:52,910 Do fari tion, ni esence dorsflankanta kion ni jam faris. 522 00:35:52,910 --> 00:35:57,780 Kaj ni vidas, ke la tri 0 La dekstre jxus falinta for, 523 00:35:57,780 --> 00:36:02,020 kaj ni pelis la 1101 la tuta vojo al la dekstra. 524 00:36:02,020 --> 00:36:08,380 Tio faras 104 >> 3, kiu estas, efektive, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Do nun, tie, ĝi estas simila ideo. 526 00:36:11,200 --> 00:36:18,720 Kial estas nur krude x / 2 ^ y, kaj ne reale x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Ĉar se mi moviĝis per 4, mi estus perdinta 1. 528 00:36:22,240 --> 00:36:25,950 Esence, kion vi pensas pri, nur pensi pri entjera divido ĝenerale. 529 00:36:25,950 --> 00:36:31,070 Do, kiel 5/2 estas 2. Ĝi ne estas 2.5. 530 00:36:31,070 --> 00:36:35,000 Ĝi estas la sama ideo tie. Kiam ni dividu per 2, 531 00:36:35,000 --> 00:36:39,910 Ni povas perdi nepara bitoj survoje. 532 00:36:39,910 --> 00:36:43,870 Do nun - tio estas por laŭbita. Tio estas ĉio kion vi bezonas scii. 533 00:36:43,870 --> 00:36:46,340 Memoru pri la uzo kazoj ni vidis en la klaso, 534 00:36:46,340 --> 00:36:49,340 kiel iom masko estas utila por laŭbita operatoroj, 535 00:36:49,340 --> 00:36:53,220 aŭ vi uzu ilin por iom maskoj. 536 00:36:53,220 --> 00:36:58,620 Majuskloj kaj minusklaj literoj, konvertiĝoj estas bela pratipa ekzemplo. 537 00:36:58,620 --> 00:37:01,640 >> Bone, do buffer overflow atakoj. 538 00:37:01,640 --> 00:37:05,110 Iu ajn rememoru, kio misas pri tiu funkcio? 539 00:37:05,110 --> 00:37:10,140 Notice ni deklaris tabelo de 12 bajtoj, 12 signoj, 540 00:37:10,140 --> 00:37:18,510 kaj poste ni kopias en nian bufro de 12 signoj en la tuta cxeno trinkejo. 541 00:37:18,510 --> 00:37:25,080 Do kio estas la problemo ĉi tie? 542 00:37:25,080 --> 00:37:32,270 La magia nombro 12 devus preskaux tuj pop out kiel - kial 12? 543 00:37:32,270 --> 00:37:35,050 Kio se trinkejo okazas al esti pli ol 12 signoj? 544 00:37:35,050 --> 00:37:41,200 Kio se trinkejo estas milionoj da karakteroj? 545 00:37:41,200 --> 00:37:46,010 Ĉi tie la afero estas memcpy. Se trinkejo estas sufiĉe longa, 546 00:37:46,010 --> 00:37:50,330 ĝi estos simple tute - 'c', 'c' ne gravas ke ĝi estis nur 12 signojn; 547 00:37:50,330 --> 00:37:53,280 'C' ne gravas ke ĝi ne povas persvadi ke multaj bajtoj. 548 00:37:53,280 --> 00:37:58,250 Ĝi estos nur tute anstataŭigi char, la 12 bitokoj ni destinis por ĝi, 549 00:37:58,250 --> 00:38:01,830 kaj ĉiu estinteco en memoro kiu ne vere apartenas al tiu buffer 550 00:38:01,830 --> 00:38:06,520 kun kiom la kordo trinkejo estas. 551 00:38:06,520 --> 00:38:09,780 Do tio estis la bildo kiun ni vidis en klaso 552 00:38:09,780 --> 00:38:12,220 kie ni havos niajn stako kreskis. 553 00:38:12,220 --> 00:38:16,040 Vi devus uzi tiujn bildojn aux ricevi familiara kun ili denove. 554 00:38:16,040 --> 00:38:21,260 Ni nia stako kreskis, memoro adresoj starti je 0 je la supro 555 00:38:21,260 --> 00:38:26,270 kaj kreski malsupren por like 4 miliardoj ĉe la malsupro. 556 00:38:26,270 --> 00:38:28,820 Ni havas niajn tabelo 'c' ie en la memoro, 557 00:38:28,820 --> 00:38:32,260 do ni havos niajn montrilo por bari dekstra sub ĝi, 558 00:38:32,260 --> 00:38:38,720 kaj tiam ni havas ĉi savis framo montrilon en nia reveno adreso kaj nia patro rutinon la stako. 559 00:38:38,720 --> 00:38:40,800 Memoru, kion la reveno adreso estas? 560 00:38:40,800 --> 00:38:45,360 Estas kiam ĉefa nomas funkcio foo, flamo funkcio trinkejo, 561 00:38:45,360 --> 00:38:48,100 neeviteble, bari revenas. 562 00:38:48,100 --> 00:38:52,610 Do kiam trinkejo revenas, oni devas scii ke tio okazas reen al foo kiuj nomis ĝin. 563 00:38:52,610 --> 00:39:01,360 Do la reveno adreso estas la adreso de la funkcio kiun ĝi devas reveni al kiam la funkcio redonas. 564 00:39:01,360 --> 00:39:05,830 La kialo, ke estas grava por bufro overflow atakoj estas ĉar oportune 565 00:39:05,830 --> 00:39:09,580 hackers ŝatus ŝanĝi tion reveno adreso. 566 00:39:09,580 --> 00:39:14,950 Anstataŭ iri reen al foo, mi tuj iros reen al kie ajn la hacker volas mi reiri al. 567 00:39:14,950 --> 00:39:17,760 Kaj, oportune, kie la hacker ofte volas reiri al 568 00:39:17,760 --> 00:39:22,400 Estas la komenco de la buffer ke ni origine havis. 569 00:39:22,400 --> 00:39:26,170 Do rimarki, denove, Little Indian. 570 00:39:26,170 --> 00:39:28,490 La aparato estas ekzemplo de Little Indian sistemo, 571 00:39:28,490 --> 00:39:34,140 tia entjero aŭ puntero stokas kun la bajtoj dorsflankita. 572 00:39:34,140 --> 00:39:38,980 Do ĉi tie oni vidas - Estas tio? Jes. 573 00:39:38,980 --> 00:39:45,660 Ni vidas Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Rememoru la deksesumaj ciferoj? 575 00:39:48,250 --> 00:39:50,640 Ni ne indulgos la deksesumaj ciferoj en Little Indian, 576 00:39:50,640 --> 00:39:56,110 ĉar 2 deksesumaj ciferoj konsistigas unu bajto, kaj ni retroirigi la bajtoj. 577 00:39:56,110 --> 00:40:00,300 Pro tio ni ne stokas, kiel, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Ni stokas, anstataŭe, ĉiu paro de 2 ciferoj, komencante de dekstre. 579 00:40:07,520 --> 00:40:10,880 Tio adreso aludas al la adreso de la komenco 580 00:40:10,880 --> 00:40:15,190 de nia buffer ke ni fakte volis kopii en la unua loko. 581 00:40:15,190 --> 00:40:19,230 La kialo, ke estas utile estas ĉar, kio okazos se la atakanton 582 00:40:19,230 --> 00:40:24,100 okazis, anstataŭ havi ĉenon kiu estis nur 583 00:40:24,100 --> 00:40:27,060 sendanĝera kordo de kiel, ilia nomo aŭ io, 584 00:40:27,060 --> 00:40:33,900 kio se, anstataŭe, ke kordoj estis nur iuj arbitraj kodo 585 00:40:33,900 --> 00:40:38,610 kiuj faris kion ajn oni volis ĝin fari? 586 00:40:38,610 --> 00:40:45,630 Do ili povis - mi ne povas pensi pri iu malvarmeta kodo. 587 00:40:45,630 --> 00:40:47,780 Ĝi povus esti io, kvankam. Ajna katastrofa kodo. 588 00:40:47,780 --> 00:40:51,440 Se ili volas, ili povis nur fari ion je seg kulpoj, sed tio estus sencela. 589 00:40:51,440 --> 00:40:54,950 Ili kutime faras pirati via sistemo. 590 00:40:54,950 --> 00:40:59,930 >> Bone. CS50 biblioteko. 591 00:40:59,930 --> 00:41:04,800 Tio estas, esence, getInt, getString, ĉiuj tiuj funkcioj, ni havigis por vi. 592 00:41:04,800 --> 00:41:10,630 Do ni havas char * kordo, kaj tio estas la abstraktado, ke ni forblovigxis 593 00:41:10,630 --> 00:41:12,450 en iu punkto dum la semestro. 594 00:41:12,450 --> 00:41:18,220 Memoru ke kordoj estas nur aro de karakteroj. 595 00:41:18,220 --> 00:41:23,240 Do ĉi tie oni vidas mallongigita versio de getString. 596 00:41:23,240 --> 00:41:25,920 Vi devas rerigardi al ĝi por memori kiel ĝi estas reale implementado. 597 00:41:25,920 --> 00:41:30,950 Ŝlosilo detaloj estas, rimarki ni ricevas en sola karaktero samtempe 598 00:41:30,950 --> 00:41:34,570 el norma en, kiu estas ĝuste kiel ni tajpi je la klavaro. 599 00:41:34,570 --> 00:41:37,890 Do sola karaktero samtempe, kaj se ni ricevas tro da karakteroj, 600 00:41:37,890 --> 00:41:40,580 do se n + 1 estas pli granda ol kapablo, 601 00:41:40,580 --> 00:41:44,140 tiam ni bezonas pliigi la kapablon de nia bufro. 602 00:41:44,140 --> 00:41:47,780 Do jen ni duobligante la grandeco de nia bufro. 603 00:41:47,780 --> 00:41:51,840 Kaj kiu gardas irante; ni enŝovu la karaktero en nian buffer 604 00:41:51,840 --> 00:41:56,220 gxis ni ricevi novan linion aŭ fino de dosiero aŭ kio ajn, 605 00:41:56,220 --> 00:41:59,380 en kies kazo, ni faris per la ŝnuro, kaj poste la reala getString 606 00:41:59,380 --> 00:42:05,120 ŝrumpas la memoro, kiel se ni atribuas tro da memoro gxi reiros kaj hezitis iom. 607 00:42:05,120 --> 00:42:08,830 Do ni ne montras tion, sed la ĉefa ideo estas 608 00:42:08,830 --> 00:42:11,960 ĝi devas legi en sola karaktero samtempe. 609 00:42:11,960 --> 00:42:17,140 Ĝi povas ne nur legi en tuta afero samtempe, 610 00:42:17,140 --> 00:42:19,550 ĉar ilia bufro estas nur de certa grandeco. 611 00:42:19,550 --> 00:42:26,590 Do se la ŝnuro, ke gxi provas enmeti en bufro estas tro granda, tiam ĝi estus dronigos. 612 00:42:26,590 --> 00:42:28,940 Do jen ni malhelpi, ke per nur legado en sola karaktero 613 00:42:28,940 --> 00:42:33,750 samtempe kaj kreskanta, kiam ajn ni bezonas. 614 00:42:33,750 --> 00:42:40,270 Do getInt kaj la aliaj CS50 biblioteko funkcioj inklinas uzi getString 615 00:42:40,270 --> 00:42:42,310 en siaj realigoj. 616 00:42:42,310 --> 00:42:45,370 Do mi reliefigis la gravajn aferojn tie. 617 00:42:45,370 --> 00:42:49,460 Ĝi alvokas getString atingi ŝnuron. 618 00:42:49,460 --> 00:42:51,710 Se getString malsukcesis reveni memoro, 619 00:42:51,710 --> 00:42:54,270 memoru, ke getString mallocs ion, do kiam ajn vi nomas getString 620 00:42:54,270 --> 00:42:57,820 Vi devus ne (nekomprenebla) liberigi ke kordo ke vi havas. 621 00:42:57,820 --> 00:43:02,870 Do ĉi tie, se gxi malsukcesis malloc ion, ni revenos INT_MAX kiel ĝuste flagon, ke, 622 00:43:02,870 --> 00:43:05,650 hey, ni estis ne reale povas ricevi entjeron. 623 00:43:05,650 --> 00:43:10,830 Vi devus ignori kion mi revenos al vi, aŭ 624 00:43:10,830 --> 00:43:15,540 Vi ne devas trakti tion kiel valida enigo. 625 00:43:15,540 --> 00:43:21,360 Fine, supozante, ke li sukcesos, ni uzas sscanf kun tiu speciala flago, 626 00:43:21,360 --> 00:43:23,820 kio signifas, unue kongruas entjero, 627 00:43:23,820 --> 00:43:26,770 tiam kongruas ajn karakterojn post ke entjero. 628 00:43:26,770 --> 00:43:29,070 Do rimarki ni volas egali 1. 629 00:43:29,070 --> 00:43:32,940 Do sscanf revenas kiom da alumetoj se sukcese faris? 630 00:43:32,940 --> 00:43:37,010 Ĝi revenos 1 se ĝi sukcese kongruis entjero, 631 00:43:37,010 --> 00:43:40,890 revenos 0 se ĝi ne kongruas entjero, kaj gxi reiros 2 632 00:43:40,890 --> 00:43:45,920 se gxi kongruis entjero sekvita de iu gravulo. 633 00:43:45,920 --> 00:43:49,780 Do rimarki ni reprovi se ni kongruas ion sed 1. 634 00:43:49,780 --> 00:43:55,230 Do, se ni eniris 1, 2, 3, C, aŭ 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 do 1, 2, 3 devus get stokitaj en la entjero, 636 00:43:57,400 --> 00:43:59,620 X devus get stokita ĉe la karaktero, 637 00:43:59,620 --> 00:44:06,410 sscanf revenus 2, kaj ni devus reprovi, ĉar ni nur volas entjero. 638 00:44:06,410 --> 00:44:09,810 >> Rapide blovante tra HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hipertekstaj Markup Language estas la strukturo kaj semantiko de la retejo. 640 00:44:15,340 --> 00:44:19,960 Jen la ekzemplo de prelego kie ni havas HTML-etikedoj. 641 00:44:19,960 --> 00:44:22,110 Ni havas kapon etikedoj, korpo etikedoj, 642 00:44:22,110 --> 00:44:27,770 Ni havas ekzemplojn de malplenaj etikedoj kie ni fakte ne havas komencon kaj proksima etikedo, 643 00:44:27,770 --> 00:44:30,820 Ni simple devas ligilo kaj bildo. 644 00:44:30,820 --> 00:44:38,480 Ne estas fermo bildo etikedo; tie estas nur sola etikedo kiu plenumas ĉiun la etikedo devas fari. 645 00:44:38,480 --> 00:44:41,950 La ligilo estas ekzemplo, ni vidos kiel vi ligas CSS, 646 00:44:41,950 --> 00:44:45,910 La skripto estas ekzemplo de kiel vi ligas al ekstera JavaScript. 647 00:44:45,910 --> 00:44:53,100 Ĝi estas sufiĉe simpla, kaj memoru, HTML ne estas programlingvo. 648 00:44:53,100 --> 00:44:58,250 Tie, rememoru, kiel vi difinus formo aŭ almenaŭ kion tiu devus fari? 649 00:44:58,250 --> 00:45:01,740 Tia formo havas agado kaj metodo. 650 00:45:01,740 --> 00:45:06,210 La metodoj kaj vi estos nur iam vidas estas GET kaj POST. 651 00:45:06,210 --> 00:45:09,040 Do GET estas la versio kie la afero gets metis en la URL. 652 00:45:09,040 --> 00:45:11,680 POST estas kie gxi ne metas en la URL. 653 00:45:11,680 --> 00:45:18,520 Anstataŭe, neniu datumo de la formo estas enigita pli kaŝitaj en la HTTP-peton. 654 00:45:18,520 --> 00:45:22,390 Do jen, ago difinas kie la HTTP peto iras. 655 00:45:22,390 --> 00:45:27,490 Kie ĝi okazas estas google.com / serĉo. 656 00:45:27,490 --> 00:45:32,890 Metodo. Memoru pri la diferencoj inter GET kaj POST, 657 00:45:32,890 --> 00:45:37,200 kaj, nur diru kiel ekzemplo, se vi volas legosigno ion. 658 00:45:37,200 --> 00:45:40,660 Vi neniam povos bookmark a POST URL 659 00:45:40,660 --> 00:45:44,970 ĉar la datumoj ne estas inkluzivita en la URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, nun, estas hipertekstaj Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 La hipertekstaj Transfer Protocol, vi devus atendi ĝin por transporto 662 00:45:54,080 --> 00:45:57,710 Hipertekstaj Markup Language, kaj gxi faras. 663 00:45:57,710 --> 00:46:00,170 Sed ĝi ankaŭ trapasas ajn bildojn vi trovos en la retejo, 664 00:46:00,170 --> 00:46:05,400 neniu downloads vi faras komenci kiel HTTP request. 665 00:46:05,400 --> 00:46:10,350 Do HTTP estas simple la lingvo de la World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Kaj tie ĉi vi bezonas rekoni tiun specon de HTTP request. 667 00:46:15,610 --> 00:46:19,300 Jen HTTP/1.1 sur la flanko simple diras, ke estas la versio 668 00:46:19,300 --> 00:46:21,570 el la protokolo Mi uzas. 669 00:46:21,570 --> 00:46:25,770 Ĝi estas sufiĉe tre ĉiam tuj estos HTTP/1.1, kiel vi vidos ĝin. 670 00:46:25,770 --> 00:46:30,110 Poste ni vidos, ke tio GET, la alternativo esti POST, ke vi povus vidi. 671 00:46:30,110 --> 00:46:40,790 Kaj la URL kiun mi provis viziti estis www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Do memoru, ke tio, la demandosigno q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 Estas la speco de ŝtofo, kiu estas donita per formularo. 674 00:46:49,040 --> 00:46:51,830 La respondo eble revenos al mi aspektus io kiel tio. 675 00:46:51,830 --> 00:46:54,050 Denove, komencante per la protokolo, kiu tuj estos tio, 676 00:46:54,050 --> 00:46:59,190 sekvata de la statuso kodo. Jen estas la 200 OK. 677 00:46:59,190 --> 00:47:05,060 Kaj fine, la TTT-paĝo, ke mi fakte demandis cxar estos sekvis. 678 00:47:05,060 --> 00:47:08,210 La eblaj statuso kodo vi eble vidos, kaj vi devus scii plurajn el ili. 679 00:47:08,210 --> 00:47:12,770 200 OK vi verŝajne antaŭe vidis. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Ne Trovita, 500 Interna Servilo Eraro 681 00:47:17,830 --> 00:47:22,140 Kutime, se vi iros al retpaĝo kaj io estas rompita aŭ iliaj PHP kodo kraŝoj, 682 00:47:22,140 --> 00:47:24,930 dum en la aparato ni havas tiun grandan oranĝa skatolo 683 00:47:24,930 --> 00:47:27,830 kiu venas supren kaj diras, kiel, iom malpravas, tiu kodo ne funkcias 684 00:47:27,830 --> 00:47:30,380 aŭ ĉi funkcio la malbona. 685 00:47:30,380 --> 00:47:33,230 Kutime retejoj ne volas vin sciante kion funkcioj estas vere malbona, 686 00:47:33,230 --> 00:47:37,880 tial anstataŭ ili devos nur doni al vi 500 Interna Servilo Eraroj. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP estas 1 tavolo sub HTTP. 688 00:47:43,050 --> 00:47:47,550 Memoru ke ekzistas Interreto eksteren de la Tut-Tera Teksaĵo. 689 00:47:47,550 --> 00:47:52,270 Kiel se vi ludi enretan ludon, kiu ne iras tra HTTP, 690 00:47:52,270 --> 00:47:55,740 ĝi okazas tra malsamaj - ĝi estas ankoraŭ uzas la Interreton, 691 00:47:55,740 --> 00:47:58,900 sed ĝi ne uzas HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP estas nur unu ekzemplo de protokolo konstruita sur TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP laŭvorte signifas Interreto Protokolo. 694 00:48:07,820 --> 00:48:11,500 Ĉiu komputilo havas IP-adreso, ili estas tiuj 4-ciferaj aferoj 695 00:48:11,500 --> 00:48:16,510 kiel 192.168.2.1, aŭ kion ajn; kiu inklinas esti loka tiu. 696 00:48:16,510 --> 00:48:23,390 Sed kiu estas la mastro de IP-adreso. 697 00:48:23,390 --> 00:48:29,060 Do la DNS, Domain Name Servo, 698 00:48:29,060 --> 00:48:33,410 ke estas kion tradukas tion kiel google.com por reala IP-adreso. 699 00:48:33,410 --> 00:48:37,700 Do se vi tajpas tiu IP-adreso en URL: 700 00:48:37,700 --> 00:48:40,850 kiu alportus al vi al Google, sed oni kutime ne memori tiujn aferojn. 701 00:48:40,850 --> 00:48:45,470 Vi emas memori google.com anstataŭe. 702 00:48:45,470 --> 00:48:51,560 La lasta afero kiun ni havas estas havenoj, kie tio estas la TCP parto de IP. 703 00:48:51,560 --> 00:48:54,880 TCP faras pli. Pensu, kiel, vi havas vian foliumilon kurado. 704 00:48:54,880 --> 00:48:58,670 Eble vi havas iun retpoŝtan apliko kurado; 705 00:48:58,670 --> 00:49:02,150 eble vi havas iun alian programon, kiu uzas la Interreton kurado. 706 00:49:02,150 --> 00:49:05,090 Ili ĉiuj bezonas aliron al la Interreto, 707 00:49:05,090 --> 00:49:08,100 sed via komputilo nur havas 1 WiFi karto aŭ kio ajn. 708 00:49:08,100 --> 00:49:10,780 Do havenoj estas la vojo, kiun ni povis fendi supren 709 00:49:10,780 --> 00:49:13,550 kiom tiuj aplikoj kapablas uzi interreton. 710 00:49:13,550 --> 00:49:17,230 Ĉiu kandidatiĝo gets 1 specifa haveno ke ĝi povas aŭskulti plu, 711 00:49:17,230 --> 00:49:19,670 kaj implicite, HTTP uzas haveno 80. 712 00:49:19,670 --> 00:49:22,410 Kelkaj retpoŝto servoj uzas 25. 713 00:49:22,410 --> 00:49:24,490 La malalta nombro emas esti rezervita. 714 00:49:24,490 --> 00:49:29,270 Vi estas kutime suficxe bonstata alta nombro mem. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Laŭtemaj Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Ni stilo retpaĝojn kun CSS, ne per HTML. 717 00:49:36,030 --> 00:49:38,440 Tie estas 3 lokoj vi povas meti vian CSS. 718 00:49:38,440 --> 00:49:46,300 Ĝi povas esti inline, inter stilo etikedoj, aŭ en tute aparta dosiero kaj poste ligita in 719 00:49:46,300 --> 00:49:48,470 Kaj ĉi tie estas nur ekzemplo de CSS. 720 00:49:48,470 --> 00:49:50,450 Vi devus rekoni tiun ŝablono, 721 00:49:50,450 --> 00:49:54,310 kie la unua ekzemplo estas ni kongruas la korpo etikedo, 722 00:49:54,310 --> 00:49:56,680 kaj tie ni cimbra la korpo etikedo. 723 00:49:56,680 --> 00:50:00,420 La dua ekzemplo, ni kongruas la afero 724 00:50:00,420 --> 00:50:04,740 kun ID piedlinio, kaj ni apliki iun stilojn por tio. 725 00:50:04,740 --> 00:50:07,310 Rimarku ke ID piedlinio teksto-vicigas maldekstren, 726 00:50:07,310 --> 00:50:09,840 dum korpon teksto-vicigas centro. 727 00:50:09,840 --> 00:50:13,180 Footer estas ene de la korpo. 728 00:50:13,180 --> 00:50:16,470 Ĝi estos, anstataŭe, text-align lasis, kvankam la korpo diras text-align centro. 729 00:50:16,470 --> 00:50:18,880 Ĉi tio estas la tuta kaskadan parto de ĝi. 730 00:50:18,880 --> 00:50:22,110 Vi povas havi - vi povas indiki stilojn por la korpo, 731 00:50:22,110 --> 00:50:25,320 kaj tiam aĵoj en la korpo povas specifi pli specifaj stiloj, 732 00:50:25,320 --> 00:50:28,160 kaj aĵoj laboras kiel vi atendas. 733 00:50:28,160 --> 00:50:34,420 Pli specifaj CSS specifiers prioritaton. 734 00:50:34,420 --> 00:50:46,140 Mi pensas ke estas tio. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Saluton al ĉiuj. Se mi povus nur preni vian atenton. 736 00:50:49,260 --> 00:50:53,990 Mi estas Ali kaj Mi tuj iros per PHP kaj SQL vere rapida. 737 00:50:53,990 --> 00:51:00,310 Do ni povas komenci. PHP estas mallongigo de PHP: Hypertext antaŭtraktilo. 738 00:51:00,310 --> 00:51:03,730 Kaj kiel vi ĉiuj devas koni, estas servilo-flanka skriptado lingvon, 739 00:51:03,730 --> 00:51:06,800 kaj ni uzas ĝin por la dorso fino de retejoj, 740 00:51:06,800 --> 00:51:12,540 kaj kiel ĝi faras multe da ŝtonoj, la malantaŭ-scenoj parto. 741 00:51:12,540 --> 00:51:17,510 Sintakso. Ne estas kiel C, surprizo, surprizo. 742 00:51:17,510 --> 00:51:22,060 Ĝi ĉiam devas komenci kun la, se vi povas vidi, la - Mi ne povas movi antaŭen. 743 00:51:22,060 --> 00:51:31,340 Vi povas vidi vin bezonas la novaj specoj de krampoj kaj tiam vi ankaux bezonas la? Php. 744 00:51:31,340 --> 00:51:35,780 Tio estas ĉiam kiel vi devas frame via PHP-teksto, via PHP-kodo. 745 00:51:35,780 --> 00:51:39,180 Do ĝi ne povas esti simple kiel C, kie vi ia metis ĝin sur la unua. 746 00:51:39,180 --> 00:51:42,290 Vi devas ĉiam ĉirkaŭas ĝin. 747 00:51:42,290 --> 00:51:47,610 Kaj nun, la plej granda sintakso estas ke ĉiuj variabloj bezonas komenci per la $ karaktero. 748 00:51:47,610 --> 00:51:49,490 Vi devas fari tion, kiam vi estas difinanta ilin; vi bezonas fari gxin 749 00:51:49,490 --> 00:51:51,860 kiam vi raportante al ili poste. 750 00:51:51,860 --> 00:51:56,510 Vi ĉiam bezonas ke $. Estas via nova pli bona amiko, belaj multe. 751 00:51:56,510 --> 00:52:01,690 Vi ne - kontraste C, vi ne bezonas meti kia variablo tipo estas. 752 00:52:01,690 --> 00:52:04,940 Do se vi faros bezonas la $, vi ne bezonas meti, kiel, 753 00:52:04,940 --> 00:52:09,470 _int_ x aŭ kordo y, kaj tiel plu, kaj tiel plu. 754 00:52:09,470 --> 00:52:11,490 Do eta diferenco. 755 00:52:11,490 --> 00:52:15,590 Kiel rezulto de tio, ĝi signifas ke PHP estas malforte tipo. 756 00:52:15,590 --> 00:52:19,310 PHP estas malforte tipo lingvo, kaj ĝi malforte tajp variabloj. 757 00:52:19,310 --> 00:52:24,020 Alivorte, tio signifas ke vi povas ŝanĝi inter malsamaj specoj de variablo tipoj. 758 00:52:24,020 --> 00:52:27,230 Vi povas stoki vian numeron 1, kiel int, 759 00:52:27,230 --> 00:52:29,650 vi povas stoki ĝin kiel kordoj, kaj oni povas stoki ĝin kiel kaleŝego, 760 00:52:29,650 --> 00:52:33,550 kaj gxi estos ĉiuj esti tiu numero 1. 761 00:52:33,550 --> 00:52:36,080 Eĉ kvankam vi stoki ĝin en malsamaj formoj, 762 00:52:36,080 --> 00:52:39,120 ĝi estas ankoraŭ - la variablo tipojn ankoraŭ tenante en la fino. 763 00:52:39,120 --> 00:52:41,540 Do, se vi rigardas tien, se vi memoras el pset 7, 764 00:52:41,540 --> 00:52:43,500 multaj el vi probable havis problemoj kun ĉi. 765 00:52:43,500 --> 00:52:47,280 Du egalaj signoj, 3 egalaj signoj, 4 egalaj signoj. 766 00:52:47,280 --> 00:52:49,990 Okay, ne estas 4 egalaj signojn, sed tie estas 2 kaj 3. 767 00:52:49,990 --> 00:52:53,320 Vi uzas 2 egalaj signoj por kontroli la valorojn. 768 00:52:53,320 --> 00:52:55,830 Ĝi povas kontroli trans tipoj. 769 00:52:55,830 --> 00:52:58,770 Do, se vi povas vidi ĉe la unua ekzemplo, 770 00:52:58,770 --> 00:53:02,210 Mi havas num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Do via int kaj via kordo estas ambaŭ, teknike, 1, 772 00:53:06,710 --> 00:53:10,790 sed ili estas malsamaj tipoj. Sed por la duobla egaluloj, gxi devos ankoraŭ pasi. 773 00:53:10,790 --> 00:53:15,510 Tamen, por la triobla egaluloj, ĝi kontrolas valoro tiel kiel la malsamaj tipoj. 774 00:53:15,510 --> 00:53:18,760 Tio signifas, ke ĝi ne estas tuj pasas en tiu dua kazo ĉi tie, 775 00:53:18,760 --> 00:53:22,350 kie vi uzas 3 egalaj signoj anstataŭe. 776 00:53:22,350 --> 00:53:26,590 Do tio estas grava diferenco ke vi ĉiuj devas esti montrata nun. 777 00:53:26,590 --> 00:53:31,570 >> String kunmeto estas alia potenca afero vi povas uzi en PHP. 778 00:53:31,570 --> 00:53:34,080 Ĝi estas esence nur tiun oportunan dot skribmaniero, 779 00:53:34,080 --> 00:53:36,230 kaj tiel vi povas ligi ŝnurojn kune. 780 00:53:36,230 --> 00:53:40,800 Do se vi havas Kato kaj vi havas Hundon, kaj vi volas meti la 2 kordoj kune, 781 00:53:40,800 --> 00:53:44,080 vi povas uzi la periodo, kaj tio estas speco de kiel ĝi funkcias. 782 00:53:44,080 --> 00:53:46,660 Vi povas ankaŭ simple meti ilin apud la alia, 783 00:53:46,660 --> 00:53:49,030 kiel vi povas vidi tie en la malsupro ekzemplo, 784 00:53:49,030 --> 00:53:51,610 kie mi echo kordo 1, spaco kordo 2. 785 00:53:51,610 --> 00:53:56,930 PHP scios anstataŭi ilin kiel tiajn. 786 00:53:56,930 --> 00:53:59,780 Arrays. Nun, en PHP, estas 2 malsamaj specoj de matricoj. 787 00:53:59,780 --> 00:54:03,180 Vi povas havi regulajn sensilo, kaj vi povas ankaŭ havi asociajn sensilo, 788 00:54:03,180 --> 00:54:06,040 kaj ni tuj iru tra ili ĝuste nun. 789 00:54:06,040 --> 00:54:08,280 Regulaj arrays estas nur tiu en C, 790 00:54:08,280 --> 00:54:11,240 kaj tiel vi havos indeksoj, kiuj estas kalkulitaj. 791 00:54:11,240 --> 00:54:13,160 Ĝuste nun ni ĝuste tuj krei kaj meti - 792 00:54:13,160 --> 00:54:15,500 tial jen kiel ni kreas malplenan tabelo, poste ni iras al 793 00:54:15,500 --> 00:54:17,310 meti en la indekso nombro 0. 794 00:54:17,310 --> 00:54:19,200 Ni tuj metis la numero 6, la valoro 6. 795 00:54:19,200 --> 00:54:21,500 Vi povas vidi ĝin ĉe la malsupro tie. 796 00:54:21,500 --> 00:54:24,240 Where's - ĉe indeksa numero 1 ni tuj metis valoro numero 4, 797 00:54:24,240 --> 00:54:26,720 kaj tiel vi povas vidi tie estas 6, tie estas 4, 798 00:54:26,720 --> 00:54:29,160 kaj do kiel ni presado aferojn, 799 00:54:29,160 --> 00:54:33,550 kiam ni provu kaj presi la valoro stokita ĉe indekso nombro 0, 800 00:54:33,550 --> 00:54:36,900 tiam ni vidos la valoro 6 estante presita eksteren. Cool? 801 00:54:36,900 --> 00:54:40,160 Do tio estas regula arrays por vi. 802 00:54:40,160 --> 00:54:42,750 Alia maniero vi povas ankaŭ aldoni tion al regulaj arrays nun 803 00:54:42,750 --> 00:54:44,780 Estas vi povas simple append ilin cxe la fino. 804 00:54:44,780 --> 00:54:47,240 Tio signifas ke vi ne devas precizigi la specifa indekso. 805 00:54:47,240 --> 00:54:51,000 Vi povas vidi nombro, kaj tiam en la rektaj krampoj estas neniu indekso specifitaj. 806 00:54:51,000 --> 00:54:56,270 Kaj ekscios - PHP scios simple aldoni ĝin al la fino de la listo, la sekvanta liberan lokon. 807 00:54:56,270 --> 00:54:59,190 Do vi povas vidi la 1 Dekstre en tiu 0 lokon, 808 00:54:59,190 --> 00:55:02,690 la 2 iris ĝuste tie ĉe la unuan lokon. 809 00:55:02,690 --> 00:55:04,690 La 3 iras - aldonas tie ankaŭ. 810 00:55:04,690 --> 00:55:06,720 Por ke ia sencas. Vi simple senĉese aldoni ŝin, 811 00:55:06,720 --> 00:55:09,360 kaj poste kiam ni eĥado la indekso de numero 1, 812 00:55:09,360 --> 00:55:13,080 tio estos presi la valoro 2. 813 00:55:13,080 --> 00:55:16,800 >> Do ni havas arrays kiuj estas asociaj tabeloj. 814 00:55:16,800 --> 00:55:19,370 Asocia sensilo, anstataŭ havi nombra indeksoj, 815 00:55:19,370 --> 00:55:23,630 kion ili faras estas, ili havas indeksoj, kiuj estas per ŝnuro. 816 00:55:23,630 --> 00:55:25,670 Vi povas vidi, anstataŭ - Mi malfaris de ĉiuj tiuj nombro indeksoj, 817 00:55:25,670 --> 00:55:32,140 kaj nun ĝi estas key1, key2, key3, kaj ili estas en citiloj por signifi ke ili estas ĉiuj kordoj. 818 00:55:32,140 --> 00:55:34,470 Do ni povas havi ekzemplon de ĉi tio. 819 00:55:34,470 --> 00:55:38,790 La ekzemplo de tio estas ke ni havas la tf, kaj tio estas la indekso nomo. 820 00:55:38,790 --> 00:55:42,030 Ni tuj metis "Ali", kiel la nomo, en la indekso, kalorioj mangxata, 821 00:55:42,030 --> 00:55:47,640 ni povas meti int tiu tempo anstataŭ ĉenon, 822 00:55:47,640 --> 00:55:52,240 kaj tiam ĉe la indico tranĉas, ni povas meti tuta tabelo ene de ĝi. 823 00:55:52,240 --> 00:55:55,490 Do tiu estas speco de - estas simila koncepto al kiom ni devis 824 00:55:55,490 --> 00:55:58,930 indicoj kun numeroj, sed nun ni povas ŝanĝi la indeksoj ĉirkaŭe 825 00:55:58,930 --> 00:56:03,890 havi ilin kiel kordoj anstataŭe. 826 00:56:03,890 --> 00:56:06,070 Vi ankaŭ povas fari tion, krom nur faras ĝin individue, 827 00:56:06,070 --> 00:56:09,400 Vi povas fari ĉion en unu bloko. Do vi povas vidi, ke tf de tiu tabelo, 828 00:56:09,400 --> 00:56:13,350 kaj poste ni starigis ilin ĉiujn en unu giganta kvadrata krampo aro. 829 00:56:13,350 --> 00:56:15,220 Do kiu povas rapidigi aĵojn. 830 00:56:15,220 --> 00:56:19,730 Ĝi estas pli stila elekto ol ne. 831 00:56:19,730 --> 00:56:21,550 Ni ankaŭ havas maŝojn. 832 00:56:21,550 --> 00:56:26,020 En C ni havas maŝojn kiuj funkcias kiel ĉi tio. 833 00:56:26,020 --> 00:56:29,690 Ni havis nian tabelo, kaj ni iris de indekso 0 al la fino de la listo, 834 00:56:29,690 --> 00:56:31,740 kaj ni presas ĉion, right? 835 00:56:31,740 --> 00:56:33,880 Se la problemo estas, por asociaj tabeloj, tabelas, 836 00:56:33,880 --> 00:56:36,610 ni ne nepre konas tiujn nombra indeksoj 837 00:56:36,610 --> 00:56:39,610 ĉar nun ni havas la kordo indeksoj. 838 00:56:39,610 --> 00:56:44,800 Nun ni uzas foreach bukloj, kiujn, denove, vi espereble uzata en pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach masxojn simple scias ĉiun solan parton de la listo. 840 00:56:48,930 --> 00:56:52,450 Kaj tio ne devas scii ekzakte la nombra indekso kiun vi havos. 841 00:56:52,450 --> 00:56:56,490 Do vi havas la foreach sintakso, do ĝi estas foreach, vi metu la tabelo. 842 00:56:56,490 --> 00:57:00,430 Do mia tabelo nomiĝas pset, kaj poste kiel, la vorto tiel, 843 00:57:00,430 --> 00:57:04,530 kaj tiam vi povas tion loka temporal variablo kiu vi iras por uzi 844 00:57:04,530 --> 00:57:10,690 nur por la specifa afero, kiun tuj okazigi la specifa - 845 00:57:10,690 --> 00:57:14,770 petskribo aŭ unu sekcio de la tabelo. 846 00:57:14,770 --> 00:57:18,350 Pset num tenos 1, kaj tiam eble okupos la nombro 6, 847 00:57:18,350 --> 00:57:20,410 kaj tiam ĝi tenos la numero 2. 848 00:57:20,410 --> 00:57:26,630 Sed ĝi estas garantiita por iri tra ĉiu unuopa valoro kiu estas en la tabelo. 849 00:57:26,630 --> 00:57:30,530 Utilaj funkcioj, ke vi devus scii en PHP estas la postulus, 850 00:57:30,530 --> 00:57:35,880 tiel ke ĝi certigas ke vi estas inter ili iuj dosieroj, eĥo, elirejo, malplenaj. 851 00:57:35,880 --> 00:57:40,490 Mi ege rekomendas al vi rigardi pset 7 kaj rigardu tiujn funkciojn. 852 00:57:40,490 --> 00:57:42,810 Vi eble devas scii tiujn, 853 00:57:42,810 --> 00:57:47,060 tial Mi certe scias kion, ekzakte, tiuj estas ĉiuj faras. 854 00:57:47,060 --> 00:57:50,080 >> Kaj nun ni tuj iru tra medion vere rapide. 855 00:57:50,080 --> 00:57:53,490 En amplekso, PHP estas speco de funky afero, kontraste kun C, 856 00:57:53,490 --> 00:57:56,170 kaj tiel ni nur tuj iros tra gxi rapide. 857 00:57:56,170 --> 00:57:58,930 Do diru ni starti en tiu sago, ke ni havas tie. 858 00:57:58,930 --> 00:58:02,900 Kaj ni tuj komencu per $ i. Do la variablo 'i' tuj esti 0, 859 00:58:02,900 --> 00:58:06,730 kaj ni simple intencas konservi presi gxin en tiu granda blanka skatolo tie. 860 00:58:06,730 --> 00:58:09,220 Ni tuj komencu per i0, kaj poste ni iras al eĥo ĝin. 861 00:58:09,220 --> 00:58:12,670 Do tie estas la 0. 862 00:58:12,670 --> 00:58:15,210 Kaj poste ni iras al pliigo gxin per la buklo, 863 00:58:15,210 --> 00:58:17,810 kaj tiam ĝi tuj estu valoro de 1. 864 00:58:17,810 --> 00:58:20,070 Unu estas malpli ol 3, do ĝi estas tuj pasos tra tiu buklo, 865 00:58:20,070 --> 00:58:23,230 kaj tiam ni tuj vidos ĝin presita denove. 866 00:58:23,230 --> 00:58:25,520 Ni iras al pliigo denove gxin al 2, 867 00:58:25,520 --> 00:58:29,860 kaj 2 estas malpli ol 3, do gxi devos pasigi la buklo, kaj ĝi devos presi la 2. 868 00:58:29,860 --> 00:58:35,100 Tiam vi devos noti, ke 3 estas ne malpli ol 3, do ni devos rompi la buklo. 869 00:58:35,100 --> 00:58:40,050 Do nun ni ĝi eliris, kaj tiam ni tuj iru en aFunction. 870 00:58:40,050 --> 00:58:45,010 Okay. Do vi devas noti, ke tiu variablo, kiujn ni kreis, 871 00:58:45,010 --> 00:58:48,270 la 'i' varia, estas ne loke scoped. 872 00:58:48,270 --> 00:58:50,280 Tio signifas ke gxi ne estas loka al la buklo, 873 00:58:50,280 --> 00:58:58,060 kaj ke variablo povas ankoraŭ aliri kaj ŝanĝos poste, kaj ĝi ankoraŭ estos efika. 874 00:58:58,060 --> 00:59:02,160 Do, se vi iros en la funkcio nun vi vidos, ke ni ankaŭ uzas la 'i' varia, 875 00:59:02,160 --> 00:59:05,320 kaj ni iras al pliigo 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Vi pensus, unue, bazita sur C, ke tio estas kopio de la 'i' variablo. 877 00:59:09,410 --> 00:59:12,830 Ĝi estas plene malsama afero, kiu estas korekta. 878 00:59:12,830 --> 00:59:16,560 Do kiam ni presas ĝin, ni tuj presi 'i' + +, kiu tuj presi ke 4 879 00:59:16,560 --> 00:59:19,640 kaj poste ni iras al - sorry. 880 00:59:19,640 --> 00:59:22,030 Tiam ni iras por fini el tiu funkcio, 881 00:59:22,030 --> 00:59:24,820 kaj ni tuj estu tie, kie tio sago Estas ĝuste nun. 882 00:59:24,820 --> 00:59:29,190 Tio signifas, ke tiam, tamen, eĉ kvankam la funkcio ŝanĝiĝis la valoron de 'i', 883 00:59:29,190 --> 00:59:32,620 ĝi ne ŝanĝos eksteren de la funkcio, 884 00:59:32,620 --> 00:59:35,060 ĉar la funkcio havas apartan medion. 885 00:59:35,060 --> 00:59:38,960 Tio signifas ke kiam ni echo 'i', ĝi ne ŝanĝiĝis en la medio de la funkcio, 886 00:59:38,960 --> 00:59:43,660 kaj tiel poste ni iras al presi 3 denove. 887 00:59:43,660 --> 00:59:47,520 Malsamaj aferoj pri medio en PHP ol en C. 888 00:59:47,520 --> 00:59:51,130 >> Nun en PHP kaj HTML. 889 00:59:51,130 --> 00:59:53,510 PHP estas uzata por fari retpaĝojn dinamika. 890 00:59:53,510 --> 00:59:58,660 Ĝi ia faras malsamajn aĵojn. 891 00:59:58,660 --> 01:00:02,090 Ni havas ĝin malsama de HTML. 892 01:00:02,090 --> 01:00:05,230 Kun HTML, ni ĉiam ĝuste havi la sama statika afero, ekzemple kiel Rob montris, 893 01:00:05,230 --> 01:00:09,370 dum PHP, vi povas ŝanĝi tion, bazita sur kiuj la uzanto estas. 894 01:00:09,370 --> 01:00:11,830 Do, se mi havas ĉi tion, mi, "Vi estas ensalutinta kiel -" kaj tiam la nomo, 895 01:00:11,830 --> 01:00:14,420 kaj mi povas ŝanĝi la nomon. Do nun la nomo estas Jozef, 896 01:00:14,420 --> 01:00:18,880 kaj ĝi havas la "pri mi", sed tiam mi povos ankaŭ ŝanĝi la nomon al havi Tommy. 897 01:00:18,880 --> 01:00:21,700 Kaj tio estus malsama afero. 898 01:00:21,700 --> 01:00:23,840 Tial ni povas ankaŭ ŝanĝi malsamaj aĵoj pri li, 899 01:00:23,840 --> 01:00:27,070 kaj tio montros al malsama enhavo bazita je la nomo. 900 01:00:27,070 --> 01:00:31,430 Do PHP povas ia ŝanĝi kio okazas en via retejo. 901 01:00:31,430 --> 01:00:33,540 Samaj cxi tie. Ankoraŭ, rimarku ke ili havas malsamajn enhavojn, 902 01:00:33,540 --> 01:00:38,870 kvankam vi estas teknike ankoraŭ aliri tiun saman retpaĝon sur la surfaco. 903 01:00:38,870 --> 01:00:43,450 Generante HTML. Estas 2 malsamaj manieroj, kiujn vi povas fari ĉi tion. 904 01:00:43,450 --> 01:00:48,980 Do ni iru tra tiu ĝuste nun. La unua maniero estas, vi havas - yeah, pardonon. 905 01:00:48,980 --> 01:00:51,150 Do vi simple havas viajn regulajn por buklo en PHP, 906 01:00:51,150 --> 01:00:56,270 kaj tiam vi eĥon en PHP kaj vi eĥon el HTML. 907 01:00:56,270 --> 01:00:58,720 Uzanta kion Rob montris al vi de HTML skripton 908 01:00:58,720 --> 01:01:04,030 kaj tiam uzanta la PHP-print justaj presi gxin por la retpagxo. 909 01:01:04,030 --> 01:01:09,520 La alternativa maniero estas fari ĝin kvazaŭ vi apartigas la PHP kaj HTML. 910 01:01:09,520 --> 01:01:11,940 Do oni povas havi linion de PHP kiu funkciigas la buklo, 911 01:01:11,940 --> 01:01:16,020 tiam vi povas havi la linion de la HTML en apartan aferon, 912 01:01:16,020 --> 01:01:19,700 kaj tiam vi finos la buklo, denove, kun PHP. 913 01:01:19,700 --> 01:01:21,800 Do ĝi estas speco de disigante ĝin. 914 01:01:21,800 --> 01:01:24,020 Sur la maldekstra flanko, vi povas, ke vi havas ĉiujn - 915 01:01:24,020 --> 01:01:26,360 ĝi estas nur 1 pecon de PHP. 916 01:01:26,360 --> 01:01:28,510 Dekstre vi povas vidi, ke vi havas linion de PHP, 917 01:01:28,510 --> 01:01:32,540 vi havas linion de HTML, kaj vi havas linion de PHP denove. 918 01:01:32,540 --> 01:01:36,870 Do disigante ĝin en kio ili faras. 919 01:01:36,870 --> 01:01:39,330 Kaj vi rimarku ke aŭ maniero, ĉu de ili, 920 01:01:39,330 --> 01:01:41,980 Ili ankoraŭ presi la bildon, la bildo, la bildo: 921 01:01:41,980 --> 01:01:44,540 tiel ke la HTML ankoraŭ estas presita la sama maniero. 922 01:01:44,540 --> 01:01:49,870 Kaj tiam vi ankoraŭ vidas la 3 bildoj montras supren en via retejo. 923 01:01:49,870 --> 01:01:52,820 Do ĝi estas 2 malsamaj manieroj fari la samon. 924 01:01:52,820 --> 01:01:55,060 >> Nun ni havas formojn kaj petoj. Kiel Rob montris al vi, 925 01:01:55,060 --> 01:01:59,400 estas formoj de HTML, kaj ni simple brizo tra ĉi. 926 01:01:59,400 --> 01:02:02,040 Vi havas agon kaj vi havas metodon, kaj via agado 927 01:02:02,040 --> 01:02:04,350 ia montras al vi kie vi tuj sendu ĝin, kaj la metodo estas, ĉu 928 01:02:04,350 --> 01:02:06,960 ĝi tuj estu GET aŭ fosto. 929 01:02:06,960 --> 01:02:11,220 Kaj GET peton, kiel Rob diris, signifas, ke vi tuj metis ĝin en formularo 930 01:02:11,220 --> 01:02:15,760 kaj vi vidos ĝin kiel URL, dum kiu oni POST peton vi ne vidos en la URL. 931 01:02:15,760 --> 01:02:17,840 Do eta diferenco. 932 01:02:17,840 --> 01:02:19,950 Tamen, unu afero estas simila afero 933 01:02:19,950 --> 01:02:22,560 estas ke POST kaj GET estas egale necertaj. 934 01:02:22,560 --> 01:02:26,430 Do vi eble opinias, ke nur pro tio vi ne vidas ĝin en la URL, 935 01:02:26,430 --> 01:02:28,790 kiu signifas la POST estas pli sekura, 936 01:02:28,790 --> 01:02:34,420 sed vi ankoraŭ povas vidi ĝin en via kuketoj en la informo, ke vi sendas. 937 01:02:34,420 --> 01:02:38,260 Do ne pensu, ke proksimume unu aŭ la alia. 938 01:02:38,260 --> 01:02:42,160 Alia afero noti estas ke vi ankaŭ havas sekcion variabloj. 939 01:02:42,160 --> 01:02:45,850 You guys uzis ĉi tion en pset 7 akiri vian uzantidentigilon informo. 940 01:02:45,850 --> 01:02:48,550 Kio okazis, estas ke vi povas uzi tiun asocieca tabelo, 941 01:02:48,550 --> 01:02:53,310 la $ _SESSION, kaj tiam vi povos aliri malsamaj aferoj 942 01:02:53,310 --> 01:02:57,720 kaj stoki malsamaj aferoj tra la pagxoj. 943 01:02:57,720 --> 01:03:00,750 >> Lasta afero estas ke ni havas SQL, Strukturita Query Language, 944 01:03:00,750 --> 01:03:04,360 kaj ĉi tiu estas programlingvo por administri datumbazoj. 945 01:03:04,360 --> 01:03:08,220 Kion, precize, estas datumbazoj? Ili estas kolektoj de tabuloj, 946 01:03:08,220 --> 01:03:10,630 kaj ĉiu tablo povas havi similajn specojn de objektoj. 947 01:03:10,630 --> 01:03:14,990 Do ni havis tablon de uzantoj en via financoj pset. 948 01:03:14,990 --> 01:03:20,610 Kaj kial ili estas utila? Ĉar ĝi estas vojo de konstante stokante informo. 949 01:03:20,610 --> 01:03:22,840 Estas maniero de sekvado aferojn kaj mastrumado aferoj 950 01:03:22,840 --> 01:03:25,890 kaj reale vidi ĝin sur malsamaj paĝoj, kaj okupas atenti. 951 01:03:25,890 --> 01:03:29,930 Dum se vi simple konservas ĝin en tiu tuja momento 952 01:03:29,930 --> 01:03:33,720 kaj tiam uzi ĝin poste, vi ne povos aliri ion ke vi ŝparis. 953 01:03:33,720 --> 01:03:37,660 Ni havas 4 grandajn aferojn, kiujn ni uzas por SQL komandoj. 954 01:03:37,660 --> 01:03:40,190 Ni havas unuarangan, insert, forigi, kaj ĝisdatigo. 955 01:03:40,190 --> 01:03:42,880 Tiuj estas vere grava por vi uloj scii pri via testeto. 956 01:03:42,880 --> 01:03:45,990 >> Ni rapide transiru Elektu ĝuste nun. 957 01:03:45,990 --> 01:03:48,540 Esence, vi elektu vicoj de datumbazo. 958 01:03:48,540 --> 01:03:52,400 Do se vi havas, ĝuste ĉi tie - 959 01:03:52,400 --> 01:03:56,740 ni havas tiujn 2 malsamaj aferoj, kaj ni volas elekti el la klasoj tablo 960 01:03:56,740 --> 01:04:01,480 kie awesome - kie en la timinda kolumnon la valoro estas 1. 961 01:04:01,480 --> 01:04:04,460 Do vi povas vidi ĉi tie, ni havas tiujn 2 aferoj de klasa nomo, 962 01:04:04,460 --> 01:04:08,490 CS50 kaj Stat110, kaj ni havas la klaso IDs kaj la slogano. 963 01:04:08,490 --> 01:04:13,150 Do ni volas elekti ĉiuj de tiu informo. 964 01:04:13,150 --> 01:04:17,480 Do vi povas vidi ĉi tie ke ĝi estas speco de pluki el tiu timinda kolumno, 965 01:04:17,480 --> 01:04:25,170 kie cxio estas 1, kaj tiam ĝi havas la klaso ID, klaso nomon kaj sloganon, ke ĝi povas elekti. 966 01:04:25,170 --> 01:04:28,100 Kiel ekzakte vi faras tion en la kodo? Vi devas uzi PHP. 967 01:04:28,100 --> 01:04:33,830 Do tio estas speco de kiel PHP kaj SQL estas rilatanta al ĉiu alia. 968 01:04:33,830 --> 01:04:38,130 Nun ni havas niajn kodo, kaj ni tuj uzi nian informpeto funkcio 969 01:04:38,130 --> 01:04:41,370 kiel ni faris en pset 7, kaj ni tuj kuras la SQL query. 970 01:04:41,370 --> 01:04:43,870 Tiam ni iras por havi - 971 01:04:43,870 --> 01:04:46,280 Ni ĉiam devas kontroli se vico de triobla egalaj se malvera. 972 01:04:46,280 --> 01:04:49,010 Do denove, vi volas kontroli la tipon kaj la valoro, 973 01:04:49,010 --> 01:04:53,880 kaj tiam, se tio ne funkcias, tiam vi volas pardonpeti, kiel kutime, kiel ni faris en pset 7. 974 01:04:53,880 --> 01:04:55,870 Alie, vi volas buklo tra ĉio kun tiuj oportuna 975 01:04:55,870 --> 01:04:59,410 foreach loops, ke ni nur trapasis. 976 01:04:59,410 --> 01:05:01,280 Nun ke ni looping tra kaj ni faris ĝin pasinteco 977 01:05:01,280 --> 01:05:05,080 ni supozu ke nia informpeto pasis, nun ni havas niajn foreach buklo. 978 01:05:05,080 --> 01:05:11,050 Kaj la unua vico ĝi havas, do jen la vico, ĝuste ĉi tie, temas boksis. 979 01:05:11,050 --> 01:05:14,010 Ĝi tuj presi tutan informon ke ĝi estas alveninta. 980 01:05:14,010 --> 01:05:18,070 Do ĝi estas tuj presi ĉe la malsupro "Wanna Learn HTML?" 981 01:05:18,070 --> 01:05:23,370 Tiam ŝi tuj iri al la sekva vico, ĉar ĝi estas plenumita la unua por buklo, 982 01:05:23,370 --> 01:05:26,510 kaj tiel do li tuj presi la dua linio de ĝi, 983 01:05:26,510 --> 01:05:32,120 kiu iras al esti STAT110, Trovi ĉiuj momentoj. 984 01:05:32,120 --> 01:05:34,290 >> Unu lasta afero estas en SQL prospektivo. 985 01:05:34,290 --> 01:05:37,300 Mi scias, Davido ektusxis sur tiu iom en prelego. 986 01:05:37,300 --> 01:05:40,730 Vi povas legi ĉi poste. Estas vere amuza. 987 01:05:40,730 --> 01:05:45,320 SQL injekto estas speco de malfacila afero. 988 01:05:45,320 --> 01:05:49,890 Ni diru, ke vi simple algluita tiuj variabloj rekte en via informpeto, 989 01:05:49,890 --> 01:05:52,290 kiel vi povas vidi en tiu unua linio. 990 01:05:52,290 --> 01:05:54,520 Do ĝi ŝajnas bone, ĉu ne? Vi simple metante en la nomo de uzanto 991 01:05:54,520 --> 01:05:58,820 kaj pasvorton por via SQL query, kaj vi volas transporti ĝin kaj preni kion ajn, estas en viaj datumoj tablo. 992 01:05:58,820 --> 01:06:01,450 Tio ŝajnas sufiĉe simpla. Do permesas diri ke iu metas en, 993 01:06:01,450 --> 01:06:04,910 cxar la pasvorto, tio OR teksto ĝuste ĉi tie - 994 01:06:04,910 --> 01:06:06,780 devus vere esti en la ruĝan skatolon. 995 01:06:06,780 --> 01:06:11,920 Do diru ke ili metis tiun pasvorton en - tio estas kio ili eniru. 996 01:06:11,920 --> 01:06:16,520 Do oni meti OR "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Speco de stulta pasvorton havi. 998 01:06:20,880 --> 01:06:25,070 Nun ni simple anstataŭigi ĝin, kaj vi devos noti, ke en tiu SQL query nun, 999 01:06:25,070 --> 01:06:29,090 ĝi taksas ĉiam vera, ĉar vi devos noti, ke 1000 01:06:29,090 --> 01:06:32,240 vi povas SQL query elektu ĉiuj ĉi informoj 1001 01:06:32,240 --> 01:06:35,420 aux vi povas simple havas 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Por ke ĉiam tuj taksi al vera. 1003 01:06:41,030 --> 01:06:46,610 Tio ne iras por vere labori, ĉar tio signifas ke la hacker povas rompi en vian sistemon. 1004 01:06:46,610 --> 01:06:49,300 La solvo al ĉi tio estas, ke vi devas uzi la PDO sistemo, 1005 01:06:49,300 --> 01:06:51,360 kio signifas ke vi devas uzi demando markoj, 1006 01:06:51,360 --> 01:06:53,350 kio estas kion vi uloj uzata en pset 7, 1007 01:06:53,350 --> 01:06:57,620 kie vi tuj uzi demandosigno en loko de kie vi volas enmeti ion, 1008 01:06:57,620 --> 01:07:01,430 kaj tiam vi tuj havos komo, kaj tiam vi havos poste, 1009 01:07:01,430 --> 01:07:07,610 post via ĉeno, la malsamaj variabloj kiujn vi volas anstataŭigi en viajn demandosigno. 1010 01:07:07,610 --> 01:07:10,330 Do vi devos noti tie, ke nun mi havas ĉi tiujn ruĝajn demandosignojn. 1011 01:07:10,330 --> 01:07:15,420 Tiam mi metis la variablojn laux mia kordoj do mi scias anstataŭigi ilin en tiu ordo poste. 1012 01:07:15,420 --> 01:07:18,470 Tio certigas, ke se iu faras kiel tiu, 1013 01:07:18,470 --> 01:07:24,050 kaj ili havas la aŭ 1 = 1 situacio, kiu certigu, 1014 01:07:24,050 --> 01:07:30,490 en la malantaŭa fino, por certigi ke gxi ne vere rompas la SQL query. 1015 01:07:30,490 --> 01:07:33,660 Konsentite, tiel ke estas sufiĉe da ĝi, ventegoj de PHP kaj SQL. 1016 01:07:33,660 --> 01:07:41,520 Best of luck al ĉiuj el vi, kaj nun al Mena 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Okay ĉiuj. Tempo iri super iu JavaScript 1018 01:07:44,270 --> 01:07:48,840 kaj kelkaj aliaj aferoj tre rapide do ni ne tenu vin vespere. 1019 01:07:48,840 --> 01:07:56,930 Javascript. Jes. Javascript estas speco de friska aferon, supozeble. 1020 01:07:56,930 --> 01:07:59,090 La aferoj vi vere bezonas scii pri JavaScript, ĝi estas speco de kiel 1021 01:07:59,090 --> 01:08:03,810 La kliento-flanko fine de kio via retejo app tuj faros. 1022 01:08:03,810 --> 01:08:08,280 Tie estas kelkaj aferoj vi simple ne volas prizorgi la tutan tempon je la flanko de la servanto. 1023 01:08:08,280 --> 01:08:12,880 Ĉiuj iom interagoj, reliefigante unu afero, farante ion malaperas. 1024 01:08:12,880 --> 01:08:15,340 Vi vere ne volas paroli al via servilo tutan tempon por tio. 1025 01:08:15,340 --> 01:08:18,069 Kaj iuj el kiuj ne estas eĉ ebla fari en la servilo. 1026 01:08:18,069 --> 01:08:21,899 Jen kial ni bezonas iun kiel JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Cool aferojn pri JavaScript: Ĝi estas dinamike tajpita. 1028 01:08:24,359 --> 01:08:27,149 Tio signifas ke via programo ne bezonas scii 1029 01:08:27,149 --> 01:08:30,970 kion, ekzakte, la variabloj estas kiam vi skribos ĝin. 1030 01:08:30,970 --> 01:08:34,510 Ĝi havos nur ia diveni ĝin kiel ĝi estas kurante. 1031 01:08:34,510 --> 01:08:37,520 Aliaj aferoj, kiuj estas cool pri ĝi: Estas krispa streĉa lingvon, 1032 01:08:37,520 --> 01:08:41,359 kion signifas la sintakso estas simila al C kaj PHP. 1033 01:08:41,359 --> 01:08:47,050 Vi ne devas fari multe adapti kiam vi lernas JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Ĉi tie ni havas iom da JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Interesa afero ĉi tie estas ke, se vi rigardas ĝin, 1036 01:08:52,560 --> 01:08:56,330 Ni havas iom de JavaScript Dekstre en la kapo etikedo. 1037 01:08:56,330 --> 01:08:59,479 Kio estas tio estas esence nur inkluzivi JavaScript-dosiero. 1038 01:08:59,479 --> 01:09:02,260 Ĉi tio estas unu vojo vi povas inkludi JavaScript en vian programon. 1039 01:09:02,260 --> 01:09:06,910 Tiam la dua iom estas fakte iuj inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 tre simila al inline stilo kun CSS: 1041 01:09:10,790 --> 01:09:16,180 kaj vi estas nur skribi iu kodo tre rapide tie. 1042 01:09:16,180 --> 01:09:18,120 Javascript havas arrays. 1043 01:09:18,120 --> 01:09:20,850 Nur alia maniero subteni datumoj ĉirkaŭe, tre utila. 1044 01:09:20,850 --> 01:09:25,180 Tre belan kaj facilan sintakson. 1045 01:09:25,180 --> 01:09:29,870 Vi uzas kvadrataj krampoj aliri ĉio kaj konservi ĉiun kune. 1046 01:09:29,870 --> 01:09:35,020 Nenio tro kompleksa. 1047 01:09:35,020 --> 01:09:38,630 La malvarmeta afero pri JavaScript kaj skripta lingvoj ĝenerale 1048 01:09:38,630 --> 01:09:40,920 estas ke vi ne devas zorgi pri tabelo grandecoj. 1049 01:09:40,920 --> 01:09:43,880 Vi povas simple uzi array.length kaj sekvigi lin, 1050 01:09:43,880 --> 01:09:46,960 kaj ankaŭ la tabelo povas kreski aŭ ŝrumpi kiom vi bezonas ĝin. 1051 01:09:46,960 --> 01:09:49,279 Do, vi eĉ ne bezonas zorgi pri ia ajn, 1052 01:09:49,279 --> 01:09:57,050 Oh ne, mi devas atribui pli da aĵoj, aŭ io simila. 1053 01:09:57,050 --> 01:10:00,090 >> La malvarmeta afero ĉi tie estas ke JavaScript havas ion nomita celoj. 1054 01:10:00,090 --> 01:10:04,800 Ĝi estas objekto-orientita lingvo, tia kia ĝi estas, esence, 1055 01:10:04,800 --> 01:10:10,100 maniero por vi grupo datumoj kune, iom simila al struct, 1056 01:10:10,100 --> 01:10:17,280 sed vi povas aliri gxin kiel struct aŭ en asocia tabelo sintakso. 1057 01:10:17,280 --> 01:10:22,520 Ĝi estas sufiĉe simpla kaj kion vi povas fari kun ĉi tio estas grupo datumoj kune 1058 01:10:22,520 --> 01:10:24,810 se vi havas faskon da datumoj ke'S rilataj. 1059 01:10:24,810 --> 01:10:26,850 Ĉar ĝi estas cxiuj aferoj, kiujn vi bezonas por priskribi aŭton, 1060 01:10:26,850 --> 01:10:29,050 vi ne bezonas havi ĝin en faskon da malsamaj lokoj. 1061 01:10:29,050 --> 01:10:35,300 Vi povas simple meti tion en 1 objekto en JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Kiel vi probable scias, ripetanta estas unu el tiuj tedajn taskojn. 1063 01:10:39,090 --> 01:10:43,810 Vi nur faru gxin super denove. Vi devas paroli kun ĉiu objekto en la aŭto, 1064 01:10:43,810 --> 01:10:47,340 aŭ vi devas iri tra ĉiu ero en listo aŭ iel simile. 1065 01:10:47,340 --> 01:10:51,770 Do JavaScript havas, simile al PHP, a foreach sintakso. 1066 01:10:51,770 --> 01:10:54,590 En ĉi tiu kazo, ĝi estas ĉar en buklo. 1067 01:10:54,590 --> 01:10:57,300 Vi volas uzi tion nur en celoj. 1068 01:10:57,300 --> 01:11:01,030 Tie estas kelkaj problemoj kiuj okazas se vi uzas tion en arrays. 1069 01:11:01,030 --> 01:11:03,750 Ĝi ĝenerale estas unu el tiuj aferoj, kvankam, tio estas tre utila, 1070 01:11:03,750 --> 01:11:06,590 ĉar vi forigus multajn superkape 1071 01:11:06,590 --> 01:11:10,270 ĉar vi ne devas tiri supren ĉion en vian celon per vi mem. 1072 01:11:10,270 --> 01:11:12,300 Vi ne devas memori ĉiujn klavo nomoj. 1073 01:11:12,300 --> 01:11:18,270 Vi nur ia akiri ilin reen en tiu sintakso. 1074 01:11:18,270 --> 01:11:21,500 En ĉi tio, kun por vi nur volas memori 1075 01:11:21,500 --> 01:11:27,180 ke vi fariĝas reen ĉiuj klavoj, en tre simila maniero hash tablo. 1076 01:11:27,180 --> 01:11:30,880 Se vi memoras de tio, kiam vi metus en ĉeno vi povus ricevi ion el 1077 01:11:30,880 --> 01:11:33,840 kiu havus resendas valoron kun ĝi. 1078 01:11:33,840 --> 01:11:36,360 Kion vi povas fari kun tio oni povas diri, ĉiuj pravas, 1079 01:11:36,360 --> 01:11:42,120 Mi metis en aŭto, kaj mi nomis ĝin Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Do vi povas meti en la kordo Ferrari denove poste, kaj vi povas atingi tiun ekstere. 1081 01:11:45,290 --> 01:11:50,000 Kaj vi povas fari tion en buklo, kun la cxar en buklo. 1082 01:11:50,000 --> 01:11:53,320 Do nur pli pri objektoj. La ŝlosila afero de ĉi vi devas memori 1083 01:11:53,320 --> 01:12:00,340 estas ke vi povas uzi la objekton struct kiel sintakso kiam ajn vi volas kun tiujn, 1084 01:12:00,340 --> 01:12:04,590 escepte se kio via tuj uzos kiel kordo ne estas valida nomo de la variablo. 1085 01:12:04,590 --> 01:12:07,650 Do, se vi rigardas ke tie, ni havas ŝlosilon kun spacoj. 1086 01:12:07,650 --> 01:12:12,500 Nu, se vi estus meti object.key, spaco, kun, spaco, spacoj, 1087 01:12:12,500 --> 01:12:15,320 ke ĝuste ne havas sencon sintakse. 1088 01:12:15,320 --> 01:12:22,730 Do vi nur povas fari tion kun tiu speco de krampo sintakso. 1089 01:12:22,730 --> 01:12:26,520 >> Ankaŭ, JavaScript estas tre atingo-sagxe PHP. 1090 01:12:26,520 --> 01:12:29,050 Vi havas 2 manieroj trakti medion. 1091 01:12:29,050 --> 01:12:31,960 Vi ne povas havi la var en fronto de variablo, 1092 01:12:31,960 --> 01:12:34,060 kaj tio nur signifas tio estas tutmonda. 1093 01:12:34,060 --> 01:12:37,050 Vi povas vidi ĝin de ie ajn. Eĉ se vi estus meti ĉi tion en unu, se deklaro, 1094 01:12:37,050 --> 01:12:42,430 ie ajn en via kodo post tiu punkto vi povus vidi ke variablo. 1095 01:12:42,430 --> 01:12:46,730 Alia afero, tamen, estas kun la var, estas limigita al ĉiu funkcio vi in 1096 01:12:46,730 --> 01:12:48,870 Se vi ne estas en funkcio, nu, tio estas tutmonda. 1097 01:12:48,870 --> 01:12:53,900 Sed se vi estas en funkcio ĝi estas nur videbla ene de tiu funkcio. 1098 01:12:53,900 --> 01:12:56,420 Mi ne havas ekzemplon, sed, jes. Ĝi estas unu el tiuj aferoj kie 1099 01:12:56,420 --> 01:12:59,900 vi povas administri kion variablojn vi volas esti tutmonda, 1100 01:12:59,900 --> 01:13:03,810 kio variablojn vi volas esti loka, sed vi devas esti zorgema pri tio, 1101 01:13:03,810 --> 01:13:06,890 ĉar vi ne havas la tipon de delikata greno kontrolo vi faros en C, 1102 01:13:06,890 --> 01:13:15,820 kie, se io estas deklarita en buklo, ĝi tuj resti en tiu por buklo. 1103 01:13:15,820 --> 01:13:18,790 La afero, kiun ni vere zorgas pri la uzo de JavaScript por ĝi manipulanta retpaĝojn, right? 1104 01:13:18,790 --> 01:13:21,800 Mi volas diri, ke tial ni faras tion. 1105 01:13:21,800 --> 01:13:23,840 >> Por fari tion ni uzu iun nomita la DOM. 1106 01:13:23,840 --> 01:13:25,850 La Dokumento Objekto Modelo. 1107 01:13:25,850 --> 01:13:29,430 Esence, kio faras estas ĝi prenas ĉiujn viajn HTML 1108 01:13:29,430 --> 01:13:34,110 kaj modeloj gxi eliris en faskon de objektoj kiuj nestitaj ene de ĉiu alia. 1109 01:13:34,110 --> 01:13:37,080 Vi komenciĝas per io kiel tio. 1110 01:13:37,080 --> 01:13:44,770 Vi havas, sur la rajto por mi, faskon de kodo por tie jen speco de - 1111 01:13:44,770 --> 01:13:46,640 Vi pensus ke estus tre malfacile manipuli, 1112 01:13:46,640 --> 01:13:48,700 ĉar vi ŝatus esti analizo tra faskon da teksto 1113 01:13:48,700 --> 01:13:52,080 kaj devante peco aparte aferojn. Kaj kio se ĝi ne estis ĝuste formatitan? 1114 01:13:52,080 --> 01:13:54,880 Malbonaj aferoj okazus. 1115 01:13:54,880 --> 01:13:58,140 Do JavaScript prizorgas tion por vi, kaj vi ricevas belan datumstrukturo, 1116 01:13:58,140 --> 01:14:01,390 kiel tiu, sur mia maldekstra, kie vi nur havas dokumento, 1117 01:14:01,390 --> 01:14:03,530 kaj ene, ke vi havas ion nomita HTML, 1118 01:14:03,530 --> 01:14:05,600 kaj ene, ke vi havas kapon kaj korpon, 1119 01:14:05,600 --> 01:14:08,420 kaj ene de tiu kapo vi havas titolon, kaj tiel plu, tiel plu, kaj tiel plu. 1120 01:14:08,420 --> 01:14:11,810 Ĉi simpligas manipulanta retpaĝo tiel ke ĝi estas nur, 1121 01:14:11,810 --> 01:14:14,190 ho, mi simple deziras rakonti al ĉi tiu celo. 1122 01:14:14,190 --> 01:14:21,340 Ordigi de tre simila maniero vi parolus al alia objekto vi faris mem. 1123 01:14:21,340 --> 01:14:25,980 Kiel mi diris, la tuta DOM estas en la dokumento objekto. 1124 01:14:25,980 --> 01:14:29,290 Aux gxi estas nur unu loko kaj tiam vi povas iri en ĝi por trovi tion, 1125 01:14:29,290 --> 01:14:33,880 kaj vi povas fari tion - tiu ĉi estas la malnova stilo de farante ĝin, ĝis tie, 1126 01:14:33,880 --> 01:14:38,130 kie vi faras document.getElementById, kaj tiam la nomo, 1127 01:14:38,130 --> 01:14:42,420 kaj kiel vi versxajne povas diri, tiu akiras tre _unwieldy_ post momento. 1128 01:14:42,420 --> 01:14:44,480 Do vi probable ne volas fari tion. Tial ni havas 1129 01:14:44,480 --> 01:14:48,760 la sekva afero, kiun ni iras por paroli pri post tio. 1130 01:14:48,760 --> 01:14:52,510 La ŝlosila afero cxi tie estas ke, ĉiuj dekstren, vi havas ĉiujn tiujn elementojn, ĉu ne? 1131 01:14:52,510 --> 01:14:56,400 Do eble mi povas ŝanĝi la koloron de io kiam la paĝo ŝarĝoj. 1132 01:14:56,400 --> 01:14:58,380 Do kio? Kio, se mia uzanto alklakas ion? 1133 01:14:58,380 --> 01:15:00,540 Mi volas ĝin fari ion interesa kiam oni premas ion. 1134 01:15:00,540 --> 01:15:02,600 Tial ni havas eventojn. 1135 01:15:02,600 --> 01:15:05,330 Vi povas, esence, trovi ajnan elementon en via DOM, 1136 01:15:05,330 --> 01:15:08,560 kaj tiam diras, he. Kiam ĉi ŝarĝas aŭ iu alklakas ĝin, 1137 01:15:08,560 --> 01:15:11,410 aux kiam ili muson super ĝi, faru ion kun tio. 1138 01:15:11,410 --> 01:15:15,330 Kaj kion vi havas estas, vi havas funkciojn ke manipuli tion por vi. 1139 01:15:15,330 --> 01:15:17,980 Ĉi tiuj funkcioj estas okazaĵo kodogrupo except. 1140 01:15:17,980 --> 01:15:20,440 Kio they're - ĝi estas nur imago maniero diri: 1141 01:15:20,440 --> 01:15:23,500 tiu funkcio estas nur ekzekutita kiam tiu evento okazas. 1142 01:15:23,500 --> 01:15:28,070 Do ĝi manipulas la evento kiu okazas. 1143 01:15:28,070 --> 01:15:30,810 Jen kiel vi demetos evento traktilo. 1144 01:15:30,810 --> 01:15:34,750 Mi havas kelkajn butonon, kaj kiam vi klakos ĝin, ĝi eksplodas. 1145 01:15:34,750 --> 01:15:40,560 Do ne klaku al la butono. 1146 01:15:40,560 --> 01:15:42,910 Tiu estas unu formo de alproksimigi ĝin, ĉu ne? 1147 01:15:42,910 --> 01:15:46,430 Vi havas butonon etikedon, kaj sur klako vi havas ĉenon kiu diras, 1148 01:15:46,430 --> 01:15:50,460 oh, per la vojo, mi tion faras eksplodi afero por mi. 1149 01:15:50,460 --> 01:15:53,990 Alie, ĝi estas ĵus kiel regula butono kiun vi ĵus faris. 1150 01:15:53,990 --> 01:15:56,550 Vi povas ankaŭ fari tion alian vojon, 1151 01:15:56,550 --> 01:16:02,770 per kaptante la DOM elemento, sed ni ŝparos ke post ni parolas pri jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Ĝi estas biblioteko ke estas kruco-legilo. 1153 01:16:07,580 --> 01:16:09,580 Vi povas uzi ĝin en preskaux nenion. 1154 01:16:09,580 --> 01:16:12,090 Kaj tio nur donas al vi multajn ilojn por labori. 1155 01:16:12,090 --> 01:16:15,850 Ĉar JavaScript, dum potenca, ĝi ne havas ĉiujn ilojn vi bezonas 1156 01:16:15,850 --> 01:16:20,550 el la skatolo por vere pritrakti retejo app vi eble volas fari. 1157 01:16:20,550 --> 01:16:24,650 Do ĝi simpligas multajn aferojn, donas al vi multajn funkciojn 1158 01:16:24,650 --> 01:16:28,760 el la skatolo, kiun vi estus normale devas skribi mem, super kaj denove kaj denove. 1159 01:16:28,760 --> 01:16:31,600 Kaj ĝuste faras tion, tre simpla. 1160 01:16:31,600 --> 01:16:35,780 Vi ankaŭ havas selectores, kion permesos al vi prenu el ĉiuj tiuj elementoj 1161 01:16:35,780 --> 01:16:42,800 de via DOM multe pli simple, anstataŭ devi uzi tiujn tre longa funkcio alvokoj. 1162 01:16:42,800 --> 01:16:46,630 Pli sur tiuj selectores. Vi havas, tie vi havas, ni diru 1163 01:16:46,630 --> 01:16:49,800 Mi deziras ricevi elemento kun la ID "roko". 1164 01:16:49,800 --> 01:16:56,450 Nu, en jQuery, estas nur $ kaj poste ĉeno kiu havas funto, kaj tiam "roko". 1165 01:16:56,450 --> 01:17:01,960 Ĝi estas tre simpla kaj multe pli rapide ol la tradiciaj JavaScript maniero pritrakti tiun problemon. 1166 01:17:01,960 --> 01:17:06,120 Kaj vi havas similajn aferojn por klasoj kaj elemento tipoj. 1167 01:17:06,120 --> 01:17:08,140 jQuery estas - unu el la malvarmeta trajtoj estas povos ia kunpremi 1168 01:17:08,140 --> 01:17:14,350 malsupren via pridemandojn sur via DOM tre, tre rapide. 1169 01:17:14,350 --> 01:17:18,980 Nun ni estas reen al okazaĵo uzado, kaj estas tiel kiel vi devus trakti unu okazaĵo en jQuery. 1170 01:17:18,980 --> 01:17:23,090 Do kion ni volas iri tien estas ni dirante, tute certe. Mi havas skripton etikedon, ĉu ne? 1171 01:17:23,090 --> 01:17:25,400 Do mi havas ĉi inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Kion ni faros estas ni tuj diru, tute certe. 1173 01:17:27,750 --> 01:17:30,860 Kiam la dokumento estas preta, kion signifas la dokumento estis ŝarĝita, 1174 01:17:30,860 --> 01:17:34,660 ni tuj iru al tiu funkcio, kaj ni tuj diru, ĉiuj pravas, 1175 01:17:34,660 --> 01:17:37,060 tiu funkcio fakte fari ion alian. 1176 01:17:37,060 --> 01:17:42,320 Ĝi estas esence dirante: Tute bone, min la elemento kun la ID "myid." 1177 01:17:42,320 --> 01:17:47,960 Kaj poste donos cxi tiun funkcion traktilo kiuj ekzekutas kiam vi klakos ĝin. 1178 01:17:47,960 --> 01:17:49,820 Esence, kio estas tiu faras estas, ĝi diras, tute certe. 1179 01:17:49,820 --> 01:17:52,630 La paĝo estas ŝarĝita, do mi tuj en, trovas tiun elementon, 1180 01:17:52,630 --> 01:17:56,420 donu lin ĉi eventa traktilo, kaj ĝi esence difinas vian paĝon por vi. 1181 01:17:56,420 --> 01:18:00,520 Kaj jen kiel vi volas pensi pri okazaĵo uzado. 1182 01:18:00,520 --> 01:18:06,310 Vi nur volas pensi, ĉiuj pravas, kiam io okazas, kion mi volas okazos? 1183 01:18:06,310 --> 01:18:10,520 Vi ne volas pensi pri, bone, mi bezonas por certigi tiun aferon parolas al tiu afero, 1184 01:18:10,520 --> 01:18:14,660 tiun aferon bla bla bla, ĉar vi nur volas paroli ion en terminoj de la okazaĵoj. 1185 01:18:14,660 --> 01:18:17,650 Kiam tio okazas, tio okazas. Kiam tio okazas, tio okazas. 1186 01:18:17,650 --> 01:18:20,240 Kaj se la aferoj pafas aliajn aferojn, tio estas granda. 1187 01:18:20,240 --> 01:18:22,150 Sed vi ne deziras provi kaj faru komplika kodo 1188 01:18:22,150 --> 01:18:24,130 kie vi deĉenigi multnombraj aferojn samtempe, 1189 01:18:24,130 --> 01:18:28,860 ĉar vi estas ĝuste tuj donos al vi kapdoloron. 1190 01:18:28,860 --> 01:18:32,340 >> Bone. Nun ni povas ricevi niajn paĝo manipuli eventojn, 1191 01:18:32,340 --> 01:18:35,640 sed ni diru ke mia uzanto alklakas butonon. 1192 01:18:35,640 --> 01:18:38,040 Kio, se mi volas sendi tiun peton reen al la servilo, 1193 01:18:38,040 --> 01:18:41,100 sed mi ne volas reŝarĝi la paĝon, ĉar havante reŝargi nova paĝo 1194 01:18:41,100 --> 01:18:44,390 ĉiun solan fojon gets speco de teda, kaj kial mi devas 1195 01:18:44,390 --> 01:18:47,430 tiri malsupren la kaplinion denove, kaj la piedlinio denove, 1196 01:18:47,430 --> 01:18:49,670 kaj ĉiujn elementojn de la paĝo denove 1197 01:18:49,670 --> 01:18:53,180 nur por refreŝigi la saluto aŭ la tempo? 1198 01:18:53,180 --> 01:18:55,290 Do jen kial ni havas iun kiel Ajax. 1199 01:18:55,290 --> 01:18:59,150 Kion ni povas fari ĉi tie kun Ajax estas ni povas diri, ĉiuj pravas, 1200 01:18:59,150 --> 01:19:01,290 Mi volas sendi kelkajn datumojn al la servilo, 1201 01:19:01,290 --> 01:19:04,010 kaj mi volas ricevas respondon reen do mi povas ĝisdatigi mian paĝon, 1202 01:19:04,010 --> 01:19:12,120 aŭ eble nur faru kelkajn algoritma kalkulo, kiu ne nepre pruvas ion al la uzanto. 1203 01:19:12,120 --> 01:19:15,500 Kion vi devas fari ĉi tion? Nu, vi bezonas URL vi bezonas paroli. 1204 01:19:15,500 --> 01:19:18,650 Via servilo ne povas simple magie aŭskulti en el nenie. 1205 01:19:18,650 --> 01:19:21,960 Vi devas havi specifan lokon vi sendas tiun datumon al. 1206 01:19:21,960 --> 01:19:26,240 Kaj vi ankaŭ bezonos iujn datumojn por sendi, aŭ eble ĝi estas dataless konsulto. 1207 01:19:26,240 --> 01:19:31,380 Vi nur volas Ping reen al la servilo, kaj diru: hey, mi estas vivanta, aŭ io simila. 1208 01:19:31,380 --> 01:19:35,150 Kaj tiam vi volas funkcio kiu esence manipulas kun sukceso. 1209 01:19:35,150 --> 01:19:38,250 Imagu ke vi reiri iuj informoj de via servilo, 1210 01:19:38,250 --> 01:19:42,960 kaj vi volas ŝanĝi la uzanto titolon en la paĝo. 1211 01:19:42,960 --> 01:19:44,930 Do vi devus ricevi la informojn reen, 1212 01:19:44,930 --> 01:19:48,860 kaj vi pelus ke al la ekrano. 1213 01:19:48,860 --> 01:19:51,170 Kio okazas estas, kiam la paĝo estas preta, 1214 01:19:51,170 --> 01:19:56,500 oni kreas en klako funkcio por tiu butono nomata greeter. 1215 01:19:56,500 --> 01:19:58,810 Kion tio do faras estas, kiam tiu butono estas pelita, 1216 01:19:58,810 --> 01:20:03,700 vi parolos al greetings.php, vi faru POST peton, 1217 01:20:03,700 --> 01:20:07,290 kaj vi diras, he, iru al mi ion de via paĝo. 1218 01:20:07,290 --> 01:20:09,890 Ni ne vere bezonas por priskribi tion, sed greetings.php, 1219 01:20:09,890 --> 01:20:12,480 ni nur diros, redonas "saluton mondo." 1220 01:20:12,480 --> 01:20:15,650 Do ni reiros tiu "Saluton mondo", kaj pri la sukceso de tiu, 1221 01:20:15,650 --> 01:20:20,730 supozante nenio funkcias malbone, do ni nur iri al tiu celo lokon 1222 01:20:20,730 --> 01:20:25,720 ke ni specifita, kaj ni simple algluita la respondon en tie. 1223 01:20:25,720 --> 01:20:31,560 Kaj tio estas tre simpla maniero la starigadon de Ajax konsulto. 1224 01:20:31,560 --> 01:20:34,340 >> Tre rapide, Rob ia menciis tion jam, 1225 01:20:34,340 --> 01:20:37,170 aĵoj povas iri malbone, malbonaj aferoj povas okazi, 1226 01:20:37,170 --> 01:20:42,660 tiel vi volas konatiĝi kun tiuj HTTP-respondo kodoj. 1227 01:20:42,660 --> 01:20:46,030 Kio jen estas justa, kiel, 200, ĉio iris bone. 1228 01:20:46,030 --> 01:20:48,670 Io alia, malbonaj aferoj okazis. 1229 01:20:48,670 --> 01:20:50,790 Ĝi estas ĝenerale la afero vi volas memori. 1230 01:20:50,790 --> 01:20:53,440 Sed estas agrable koni cxiujn el cxi tiuj. 1231 01:20:53,440 --> 01:20:55,970 Kaj fine, unu fojon ni trapasis cxiujn pri tio, 1232 01:20:55,970 --> 01:20:58,680 Ni bezonas paroli tre rapide pri dezajno, 1233 01:20:58,680 --> 01:21:00,620 kaj tiam ni povas lasi vin ĉiujn eliri. 1234 01:21:00,620 --> 01:21:03,410 Dezajno. Aĵoj vi volas memori. 1235 01:21:03,410 --> 01:21:06,950 Demandu vin mem tiujn demandojn: Kiu uzos ĉi? 1236 01:21:06,950 --> 01:21:09,580 Kion ili povas uzi ĝin por? Kion mia uzantoj zorgas pri? 1237 01:21:09,580 --> 01:21:11,750 Kion ili ne zorgas pri? 1238 01:21:11,750 --> 01:21:14,500 Vi simple ne volas fari app kaj lasu ĝin ĝuste kreski 1239 01:21:14,500 --> 01:21:18,270 kaj fariĝis tiu giganto, devoradora afero, kiun vi ecx ne povas fini. 1240 01:21:18,270 --> 01:21:23,900 Vi volas havi diskreta celojn kaj planojn kaj aferojn vi volas alparoli. 1241 01:21:23,900 --> 01:21:29,000 Make it penado. Ĉio ĉi diras, esence, 1242 01:21:29,000 --> 01:21:34,950 faciligi al la uzanto uzi gxin, ne faras gxin giganta blob de teksto kiel ĉi glito estas, fakte. 1243 01:21:34,950 --> 01:21:38,020 Vi nur volas gxin esti io, kie ĝi estas tre facila por ke iu venu 1244 01:21:38,020 --> 01:21:40,800 kaj faru tion, kion ili volas fari. 1245 01:21:40,800 --> 01:21:42,920 Vi ne volas ke ili havas por navigi 5 paĝoj 1246 01:21:42,920 --> 01:21:45,460 por atingi viajn primo funkcio de via retejo. 1247 01:21:45,460 --> 01:21:49,290 Se Google havis 5 paĝojn antaŭ vi povus eĉ serĉi ion, 1248 01:21:49,290 --> 01:21:53,080 neniu uzus gxin. 1249 01:21:53,080 --> 01:21:55,890 Kaj laste, papero prototipo, fokuso grupo. 1250 01:21:55,890 --> 01:21:59,220 Havu bonan dezajno kaj provoj praktikoj. 1251 01:21:59,220 --> 01:22:00,730 Nur ĉar vi opinias, ĝi funkcias por vi, 1252 01:22:00,730 --> 01:22:04,860 ne signifas iu ajn pensas funkcias. 1253 01:22:04,860 --> 01:22:14,490 Sed jes, tio estas ĝi. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]