1 00:00:00,000 --> 00:00:05,616 2 00:00:05,616 --> 00:00:07,030 >> HANNAH BLUMBERG: Ciao a tutti. 3 00:00:07,030 --> 00:00:09,530 Stiamo per iniziare solo un paio di minuti di anticipo 4 00:00:09,530 --> 00:00:11,738 dal momento che abbiamo un bel po ' di materiale per farlo passare. 5 00:00:11,738 --> 00:00:12,790 Sono Hannah. 6 00:00:12,790 --> 00:00:13,865 Sono un TF. 7 00:00:13,865 --> 00:00:16,239 Maria sta per entrare a far parte noi in appena un paio di minuti. 8 00:00:16,239 --> 00:00:17,560 Insegna sezione a destra prima. 9 00:00:17,560 --> 00:00:19,351 Io insegno sezione giusta dopo, quindi stiamo andando 10 00:00:19,351 --> 00:00:21,200 tenerlo per un'ora e mezza. 11 00:00:21,200 --> 00:00:25,490 >> Quindi, come si vedrà qui, abbiamo abbastanza alcuni argomenti che abbiamo bisogno di ottenere attraverso, 12 00:00:25,490 --> 00:00:27,200 così noi andremo un po 'veloce. 13 00:00:27,200 --> 00:00:31,140 Ma se in un qualsiasi punto diciamo qualcosa troppo in fretta o non si capisce, 14 00:00:31,140 --> 00:00:33,170 sentitevi liberi di interrompere con le domande. 15 00:00:33,170 --> 00:00:36,610 Vogliamo essere in grado di rendere questo un rivedere sessione come utile a tutti voi 16 00:00:36,610 --> 00:00:37,973 possibile. 17 00:00:37,973 --> 00:00:38,920 Eccezionale. 18 00:00:38,920 --> 00:00:41,650 >> Quindi cerchiamo di saltare a destra con alcuni argomenti che in realtà 19 00:00:41,650 --> 00:00:46,980 molto, molto brevemente coperto per la quiz 0 al quiz 0 recensione sessione. 20 00:00:46,980 --> 00:00:48,840 Quindi, a partire con liste collegate. 21 00:00:48,840 --> 00:00:52,090 Quindi, solo assicurarsi di avere un po ' conoscenze di base sulle liste collegate 22 00:00:52,090 --> 00:00:55,110 e sono comodo fare alcune delle operazioni di base. 23 00:00:55,110 --> 00:00:58,560 >> Quindi, solo per rivedere, collegato le liste sono meglio di array 24 00:00:58,560 --> 00:01:01,020 perché possono crescere in modo dinamico. 25 00:01:01,020 --> 00:01:03,300 Così abbiamo che enorme vantaggio. 26 00:01:03,300 --> 00:01:06,031 Abbiamo visto li ha usati in tabelle hash quando 27 00:01:06,031 --> 00:01:08,280 Non so esattamente quante cose che stanno andando a voler 28 00:01:08,280 --> 00:01:10,900 inserire nella nostra struttura dati. 29 00:01:10,900 --> 00:01:15,700 Purtroppo, non abbiamo pezzi di la lista collegata in tutta la memoria, 30 00:01:15,700 --> 00:01:20,820 quindi non ci sarà necessariamente in grado di fare l'accesso costante di tempo 31 00:01:20,820 --> 00:01:22,502 ad ogni elemento della lista collegata. 32 00:01:22,502 --> 00:01:24,210 Al fine di trovare un particolare elemento, abbiamo 33 00:01:24,210 --> 00:01:26,510 deve scorrere tutto il modo fin dall'inizio. 34 00:01:26,510 --> 00:01:30,610 Quindi, tenere a mente che la maggior parte le operazioni di base sono omega di 1. 35 00:01:30,610 --> 00:01:32,130 Quindi inserto è solo andare a prendere uno. 36 00:01:32,130 --> 00:01:37,520 Elimina sta andando a prendere n da quando abbiamo andare a trovarlo dalla lista. 37 00:01:37,520 --> 00:01:39,260 E di ricerca potrebbe portare, nel peggiore dei casi, n. 38 00:01:39,260 --> 00:01:42,330 Non possiamo fare qualcosa di simile ricerca binaria su una lista concatenata 39 00:01:42,330 --> 00:01:45,101 dal momento che non possiamo solo saltate in modo casuale a metà. 40 00:01:45,101 --> 00:01:45,600 Raffreddare. 41 00:01:45,600 --> 00:01:48,160 42 00:01:48,160 --> 00:01:48,960 Eccezionale. 43 00:01:48,960 --> 00:01:50,270 >> Un po 'di pile. 44 00:01:50,270 --> 00:01:53,980 Questo, ancora una volta, si avvicinò a quiz 0, in modo da dovrebbe essere super confortevole con esso. 45 00:01:53,980 --> 00:01:57,210 Ma per gli stack, vi chiediamo ricordare una pila di vassoi. 46 00:01:57,210 --> 00:01:59,940 E sta andando essere il primo a, dura fuori. 47 00:01:59,940 --> 00:02:02,272 Quindi noi sovrapponiamo le cose nella pila, e poi 48 00:02:02,272 --> 00:02:04,980 se stiamo cercando di prendere qualcosa off-- che noi chiamiamo popping off 49 00:02:04,980 --> 00:02:06,581 il stack-- veniamo fuori dalla parte superiore. 50 00:02:06,581 --> 00:02:09,289 E se vogliamo mettere qualcosa nella pila, si parla di spingere. 51 00:02:09,289 --> 00:02:13,170 Così sta andando sempre essere in crescita su dal basso come una pila di vassoi. 52 00:02:13,170 --> 00:02:14,540 Eccezionale. 53 00:02:14,540 --> 00:02:17,607 >> Abbiamo visto pile implementato con entrambe le liste e array collegate. 54 00:02:17,607 --> 00:02:19,440 Se si sta implementando con gli array, vuoi 55 00:02:19,440 --> 00:02:22,350 fare in modo di tenere traccia di sia la dimensione e la capacità. 56 00:02:22,350 --> 00:02:27,540 Così dimensioni sta per essere l'attuale numero di cose nel vostro stack, 57 00:02:27,540 --> 00:02:32,900 considerando che la capacità è il numero totale di cose che si possono memorizzare nel vostro stack. 58 00:02:32,900 --> 00:02:34,220 Raffreddare. 59 00:02:34,220 --> 00:02:35,767 >> In modo molto simile, abbiamo code. 60 00:02:35,767 --> 00:02:38,850 In questo caso, invece di pensare una pila di vassoi, pensare di una linea. 61 00:02:38,850 --> 00:02:40,697 Questo sta per essere il primo in, first out. 62 00:02:40,697 --> 00:02:42,780 Quindi, se siete in fila per qualcosa al negozio, 63 00:02:42,780 --> 00:02:46,920 ci auguriamo che la persona prima di la linea sta per essere aiutato prima. 64 00:02:46,920 --> 00:02:49,350 >> Invece di dire spinta e pop come facciamo noi per lo stack, 65 00:02:49,350 --> 00:02:52,000 diciamo solo enqueue e dequeue. 66 00:02:52,000 --> 00:02:54,970 E ancora, se attuazione del presente con una matrice, 67 00:02:54,970 --> 00:02:56,720 abbiamo bisogno di tenere traccia non solo la dimensione 68 00:02:56,720 --> 00:03:02,390 e capacità, ma anche la testa, che sta per essere parte anteriore della nostra coda. 69 00:03:02,390 --> 00:03:03,010 Raffreddare. 70 00:03:03,010 --> 00:03:05,770 Tutte le domande di nulla di tutto ciò? 71 00:03:05,770 --> 00:03:06,320 Eccezionale. 72 00:03:06,320 --> 00:03:07,640 Spostare a destra lungo. 73 00:03:07,640 --> 00:03:08,564 >> OK, tabelle hash. 74 00:03:08,564 --> 00:03:10,605 Qui è dove inizia a diventare davvero interessante. 75 00:03:10,605 --> 00:03:14,150 Quindi una tabella di hash è una implementazione di un array associativo. 76 00:03:14,150 --> 00:03:16,700 Quindi, in pratica ciò che è accaduto è che abbiamo tutto questo ingresso, 77 00:03:16,700 --> 00:03:18,750 e diamo a un hash funzione che dice: 78 00:03:18,750 --> 00:03:21,840 OK, questo è dove la tabella di hash essa appartiene. 79 00:03:21,840 --> 00:03:24,860 >> Così la funzione hash più semplice che abbiamo visto è solo dicendo, 80 00:03:24,860 --> 00:03:28,170 OK, supponiamo di voler mettere stringhe nella nostra tabella di hash. 81 00:03:28,170 --> 00:03:30,870 E davvero una semplice idea potrebbe essere quella di dire, OK, 82 00:03:30,870 --> 00:03:34,350 facciamo solo ordinare dal prima lettera della parola. 83 00:03:34,350 --> 00:03:37,570 Così si può vedere qui, prendiamo banana, abbiamo messo attraverso una funzione di hash, 84 00:03:37,570 --> 00:03:40,190 e si dice, hey, che dovrebbe andare a indice 1. 85 00:03:40,190 --> 00:03:45,120 >> Così possiamo essenzialmente pensare ad un hash tavolo come un mazzo di diversi secchi. 86 00:03:45,120 --> 00:03:49,880 E ciascuno di quelli secchi sta andando tenere la testa di una lista collegata. 87 00:03:49,880 --> 00:03:55,030 E in quella lista collegata è dove possiamo effettivamente messo diversi pezzi di dati. 88 00:03:55,030 --> 00:03:57,820 >> Così immersione un po 'di più in una funzione di hash, ecco 89 00:03:57,820 --> 00:03:59,870 l'esempio che ho appena descritto dove abbiamo solo dire, 90 00:03:59,870 --> 00:04:02,460 OK, prendere la prima lettera della parola e siamo 91 00:04:02,460 --> 00:04:03,990 andando a ordinare in secchi. 92 00:04:03,990 --> 00:04:08,490 Quindi, presumibilmente, ci saranno 26 secchi, uno per ogni lettera dell'alfabeto. 93 00:04:08,490 --> 00:04:10,090 Perché non si tratta di una grande funzione di hash? 94 00:04:10,090 --> 00:04:13,461 Ciò che rende questo non ideale? 95 00:04:13,461 --> 00:04:13,960 Già. 96 00:04:13,960 --> 00:04:15,790 >> PUBBLICO: Si sta andando di avere collisioni. 97 00:04:15,790 --> 00:04:16,390 >> HANNAH BLUMBERG: Sì, esattamente. 98 00:04:16,390 --> 00:04:18,000 Si sta andando ad avere collisioni. 99 00:04:18,000 --> 00:04:18,954 Ecco, questo è una cosa. 100 00:04:18,954 --> 00:04:21,620 E parleremo di come possiamo risolvere le collisioni in appena un secondo. 101 00:04:21,620 --> 00:04:23,980 Un altro problema con questo particolare funzione hash 102 00:04:23,980 --> 00:04:25,980 è che il nostro diverso benne stanno per essere 103 00:04:25,980 --> 00:04:28,960 di piuttosto drasticamente diverse dimensioni. 104 00:04:28,960 --> 00:04:33,840 >> Sappiamo che c'è un bel po ' più parole che iniziano con A di X, 105 00:04:33,840 --> 00:04:38,980 così noi avremo molto benne sbilanciati nella nostra tabella di hash. 106 00:04:38,980 --> 00:04:40,050 Raffreddare. 107 00:04:40,050 --> 00:04:41,340 Quindi sì, torniamo a il punto di collisioni. 108 00:04:41,340 --> 00:04:42,900 Che cosa facciamo se c'è una collisione? 109 00:04:42,900 --> 00:04:44,490 >> Abbiamo un paio di diverse opzioni. 110 00:04:44,490 --> 00:04:47,600 Così uno, quindi supponiamo che stiamo cercando di mettere bacca nella nostra tabella di hash. 111 00:04:47,600 --> 00:04:50,370 E vediamo, oh, vogliamo per dirla in indice 1, 112 00:04:50,370 --> 00:04:52,070 ma banane già vi abita. 113 00:04:52,070 --> 00:04:53,110 Cosa stiamo andando a fare? 114 00:04:53,110 --> 00:04:54,560 Abbiamo due opzioni principali. 115 00:04:54,560 --> 00:04:58,050 >> Il numero uno è che possiamo dire, OK, non c'è spazio a indice 1, 116 00:04:58,050 --> 00:05:03,210 ma facciamo solo continuare a cercare attraverso fino a quando siamo in grado di trovare un altro posto aperto. 117 00:05:03,210 --> 00:05:08,490 Così diremo, OK, mettiamola in posto 3. 118 00:05:08,490 --> 00:05:09,240 Questa è una opzione. 119 00:05:09,240 --> 00:05:11,470 Questo si chiama scansione lineare. 120 00:05:11,470 --> 00:05:15,500 >> E una seconda opzione che dice, OK, bene, facciamo solo fare ciascuno di questi secchi 121 00:05:15,500 --> 00:05:17,470 essere responsabili delle liste collegate. 122 00:05:17,470 --> 00:05:21,910 E va bene, se non c'è più di una cosa in un secchio. 123 00:05:21,910 --> 00:05:23,820 Stiamo solo andando a aggiungerlo sulla parte anteriore. 124 00:05:23,820 --> 00:05:26,032 Così qui si può vedere, OK, quando abbiamo inserito bacca, ci 125 00:05:26,032 --> 00:05:28,240 appena ha preso la banana, tipo di spinto sopra un po ' 126 00:05:28,240 --> 00:05:29,842 e gettò una bacca in là. 127 00:05:29,842 --> 00:05:31,050 E questo è anche tutto bene. 128 00:05:31,050 --> 00:05:32,830 Questo è chiamato concatenazioni separate. 129 00:05:32,830 --> 00:05:38,100 Si può pensare a questo come un po 'come una serie di teste di liste concatenate. 130 00:05:38,100 --> 00:05:41,950 Tutte le domande di hash tabelle, funzioni hash? 131 00:05:41,950 --> 00:05:44,290 Eccezionale. 132 00:05:44,290 --> 00:05:45,470 >> Alberi e tentativi. 133 00:05:45,470 --> 00:05:47,287 Così un albero è un qualsiasi tipo della struttura dati 134 00:05:47,287 --> 00:05:49,453 in cui c'è una sorta di gerarchia o una sorta 135 00:05:49,453 --> 00:05:51,247 di classifica ai vostri diversi oggetti. 136 00:05:51,247 --> 00:05:53,580 E questo diventerà super- chiaro quando vediamo un esempio. 137 00:05:53,580 --> 00:05:56,960 E abbiamo visto tentativi, lungo con tabelle hash, in pset5-- 138 00:05:56,960 --> 00:06:00,700 che, di nuovo, gioco completamente fiera per questo quiz-- come un altro dei dati 139 00:06:00,700 --> 00:06:03,110 strutture che possiamo memorizzare le cose diverse. 140 00:06:03,110 --> 00:06:06,782 Nel caso di dizionario, abbiamo memorizzato un mucchio di parole. 141 00:06:06,782 --> 00:06:08,240 Quindi, diamo uno sguardo ad alcuni alberi. 142 00:06:08,240 --> 00:06:10,190 Quindi questo è un esempio di un albero. 143 00:06:10,190 --> 00:06:13,105 Ha un tipo di struttura, tale struttura gerarchica, 144 00:06:13,105 --> 00:06:15,920 dove si può vedere che 1 nodo in cima 145 00:06:15,920 --> 00:06:20,750 ha una sorta di rango superiore al 2 e 3, che sono sopra 4, 5 e 6 e 7, 146 00:06:20,750 --> 00:06:22,860 che sono sopra 8 e 9. 147 00:06:22,860 --> 00:06:25,210 Ecco, questo è tutto quello che intendiamo per albero, così si può solo tipo 148 00:06:25,210 --> 00:06:26,660 di immaginare questo nella tua testa. 149 00:06:26,660 --> 00:06:29,050 >> Ora, abbiamo un paio di alberi più specializzati. 150 00:06:29,050 --> 00:06:31,070 Così un esempio è un albero binario. 151 00:06:31,070 --> 00:06:33,290 E un albero binario è, ancora una volta, solo andando a essere 152 00:06:33,290 --> 00:06:37,040 una struttura di dati con una sorta di gerarchia, ma ciascuno dei nodi 153 00:06:37,040 --> 00:06:38,650 può avere al massimo due bambini. 154 00:06:38,650 --> 00:06:41,530 Ecco dove la parola binaria proviene. 155 00:06:41,530 --> 00:06:43,410 Quindi questo è un esempio di un albero binario. 156 00:06:43,410 --> 00:06:45,720 Ecco, questo è una categoria più piccola di alberi. 157 00:06:45,720 --> 00:06:48,960 >> Ora andiamo ancora più specifico e parlare di binario trees-- ricerca binaria 158 00:06:48,960 --> 00:06:51,310 alberi, piuttosto. 159 00:06:51,310 --> 00:06:56,430 Quindi, ecco l'idea è non solo ogni nodo ha al massimo due figli, 160 00:06:56,430 --> 00:07:00,300 ma tutti i bambini al sinistra stanno per essere più piccoli 161 00:07:00,300 --> 00:07:03,450 e tutti i bambini al destra stanno per essere più grande. 162 00:07:03,450 --> 00:07:05,890 Quindi notare a solo il nostro albero binario, non c'è 163 00:07:05,890 --> 00:07:08,650 alcuna relazione tra i numeri. 164 00:07:08,650 --> 00:07:12,990 Ma nella nostra ricerca binaria albero, vediamo, OK, qui è 44. 165 00:07:12,990 --> 00:07:17,080 E ogni numero a sinistra di 44 è più piccolo e tutto a destra 166 00:07:17,080 --> 00:07:17,920 è più grande. 167 00:07:17,920 --> 00:07:20,130 >> E questo vale in ogni livello dell'albero. 168 00:07:20,130 --> 00:07:24,810 Ecco, questo è più piccolo 22 e questo è maggiore di 22. 169 00:07:24,810 --> 00:07:26,390 E questo è albero binario di ricerca. 170 00:07:26,390 --> 00:07:28,900 Perché pensiamo che si chiama un albero binario di ricerca? 171 00:07:28,900 --> 00:07:30,651 Che algoritmo fa vi ricorda? 172 00:07:30,651 --> 00:07:31,650 PUBBLICO: La ricerca binaria. 173 00:07:31,650 --> 00:07:32,480 HANNAH BLUMBERG: ricerca binaria. 174 00:07:32,480 --> 00:07:35,150 Perché se siete alla ricerca di un particolare numero in questo albero, 175 00:07:35,150 --> 00:07:38,800 in ogni punto, si può solo battere metà fuori della struttura, che è grande. 176 00:07:38,800 --> 00:07:43,800 E così che sta andando a darci qualcosa che sembra un po 'come ricerca binaria. 177 00:07:43,800 --> 00:07:45,870 Qualsiasi domanda? 178 00:07:45,870 --> 00:07:47,570 Va bene, fresco. 179 00:07:47,570 --> 00:07:48,560 >> Va bene, ci prova. 180 00:07:48,560 --> 00:07:49,657 Preferito da tutti. 181 00:07:49,657 --> 00:07:51,990 Quindi questo è l'esempio che abbiamo visto un gruppo in classe. 182 00:07:51,990 --> 00:07:54,710 E ancora una volta, questo è solo un altro modo in cui siamo in grado di memorizzare i dati. 183 00:07:54,710 --> 00:07:57,530 Nel caso del dizionario, di nuovo, questo è solo andare a essere stringhe. 184 00:07:57,530 --> 00:08:00,870 Quindi cerchiamo di vedere che cosa questo realmente assomiglia a un livello leggermente inferiore. 185 00:08:00,870 --> 00:08:03,690 >> Quindi, diamo uno sguardo in un nodo in un trie. 186 00:08:03,690 --> 00:08:07,532 E vediamo, OK, ci sta andando essere un booleano e un nodo, 187 00:08:07,532 --> 00:08:09,170 un puntatore a un nodo. 188 00:08:09,170 --> 00:08:11,400 E vediamo che la Booleana si chiama is_word. 189 00:08:11,400 --> 00:08:13,490 Quindi, in sostanza, che è andare a corrispondere 190 00:08:13,490 --> 00:08:16,750 a questi piccoli triangoli che dice, se hai ottenuto qui, 191 00:08:16,750 --> 00:08:19,100 avete trovato una parola completa. 192 00:08:19,100 --> 00:08:23,670 >> Sappiamo che "Turing" over qui è una parola completa, 193 00:08:23,670 --> 00:08:28,030 considerando solo T-U-R non è una parola perché non vediamo quel piccolo triangolo. 194 00:08:28,030 --> 00:08:31,440 E quel piccolo delta, ancora una volta, corrisponde a questo is_word, 195 00:08:31,440 --> 00:08:34,480 questo is_word booleano. 196 00:08:34,480 --> 00:08:36,320 E poi abbiamo una serie di bambini. 197 00:08:36,320 --> 00:08:39,860 Quindi, a ogni livello, si avere un particolare nodo, 198 00:08:39,860 --> 00:08:42,470 e che i punti di nodo a un matrice dell'intero alfabeto. 199 00:08:42,470 --> 00:08:44,346 >> Così si può vedere, ancora una volta, in questo un'Immagine-- sono 200 00:08:44,346 --> 00:08:48,170 intenzione di continuare a saltare indietro e forth-- che tale matrice in cima 201 00:08:48,170 --> 00:08:51,640 ha un sacco di diverso nodi che vengono fuori di esso. 202 00:08:51,640 --> 00:08:57,140 Ha 26, o 27 se si desidera per includere un carattere aggiuntivo. 203 00:08:57,140 --> 00:09:01,320 E questo ci dà un modo per memorizzare i nostri dati 204 00:09:01,320 --> 00:09:04,450 in un modo che può essere guardato su che si può guardare in alto super veloce. 205 00:09:04,450 --> 00:09:06,650 Qual è il tempo di ricerca per un trie? 206 00:09:06,650 --> 00:09:07,970 >> PUBBLICO: [incomprensibile]. 207 00:09:07,970 --> 00:09:08,300 >> HANNAH BLUMBERG: Sì. 208 00:09:08,300 --> 00:09:09,550 In teoria, è tempo costante. 209 00:09:09,550 --> 00:09:13,230 E 'solo sarà la dimensione del la parola che si desidera cercare. 210 00:09:13,230 --> 00:09:15,950 Anche se si aggiunge un zillion più parole per la nostra trie, 211 00:09:15,950 --> 00:09:18,160 non sta andando a prendere noi più per determinare 212 00:09:18,160 --> 00:09:19,690 se una determinata parola è nel trie. 213 00:09:19,690 --> 00:09:21,412 Ecco, questo è veramente bello. 214 00:09:21,412 --> 00:09:23,697 >> PUBBLICO: Ti è appena inizializzare tale matrice? 215 00:09:23,697 --> 00:09:24,780 Ti sei perso un punto o due. 216 00:09:24,780 --> 00:09:26,130 Si può solo parlare che per un secondo? 217 00:09:26,130 --> 00:09:26,680 >> HANNAH BLUMBERG: Certo, assolutamente. 218 00:09:26,680 --> 00:09:27,590 Bella domanda. 219 00:09:27,590 --> 00:09:31,140 La domanda era, abbiamo hanno una matrice che è 220 00:09:31,140 --> 00:09:34,180 andando ad avere nodo stella come rispetto a solo nodo, giusto? 221 00:09:34,180 --> 00:09:35,180 Raffreddare. 222 00:09:35,180 --> 00:09:37,990 Ecco quello che stiamo dicendo è il nostro array è solo 223 00:09:37,990 --> 00:09:40,035 sta per essere puntatori ad altri array. 224 00:09:40,035 --> 00:09:42,910 Quindi è essentially-- che tipo di si sente come una lista collegata in questo modo 225 00:09:42,910 --> 00:09:46,620 dove ognuno di questi bambini basta puntare al nodo successivo. 226 00:09:46,620 --> 00:09:49,030 >> E il modo in cui in realtà determinare, ehi, OK, 227 00:09:49,030 --> 00:09:52,320 abbiamo iterato attraverso un intero parola, è questa parola nel dizionario, 228 00:09:52,320 --> 00:09:54,476 abbiamo appena controlliamo questo is_word. 229 00:09:54,476 --> 00:09:55,100 Grande domanda. 230 00:09:55,100 --> 00:09:55,675 Già. 231 00:09:55,675 --> 00:09:56,216 PUBBLICO: OK. 232 00:09:56,216 --> 00:09:57,470 Allora, qual è stato il tempo di esecuzione per il trie? 233 00:09:57,470 --> 00:09:58,386 >> HANNAH BLUMBERG: Certo. 234 00:09:58,386 --> 00:10:01,852 Così il runtime per un trie per ricerca sarà tempo costante. 235 00:10:01,852 --> 00:10:04,310 Quindi è solo andare a essere il numero di lettere nella parola. 236 00:10:04,310 --> 00:10:06,310 Non è dipendente dalla dimensione del dizionario 237 00:10:06,310 --> 00:10:09,510 o la dimensione della struttura di dati. 238 00:10:09,510 --> 00:10:12,170 Quindi, ecco un esempio un po 'più semplice. 239 00:10:12,170 --> 00:10:15,430 >> In questo caso, si può vedere che la parola pipistrello è nel dizionario 240 00:10:15,430 --> 00:10:18,900 e si dispone di zoom, ma voi non hanno qualcosa di simile a zoo. 241 00:10:18,900 --> 00:10:20,050 Come potremmo fare zoo? 242 00:10:20,050 --> 00:10:24,276 Come possiamo aggiungere al nostro zoo dizionario, al nostro trie? 243 00:10:24,276 --> 00:10:24,776 Già. 244 00:10:24,776 --> 00:10:27,014 >> PUBBLICO: Fai is_word vale per il [incomprensibile]. 245 00:10:27,014 --> 00:10:27,930 HANNAH BLUMBERG: Good. 246 00:10:27,930 --> 00:10:31,731 Quindi diremmo Z-O-O, e allora avremmo vogliono spuntare quella scatola pure. 247 00:10:31,731 --> 00:10:32,230 Grande. 248 00:10:32,230 --> 00:10:35,160 249 00:10:35,160 --> 00:10:37,930 Mettiamo a confronto molto brevemente cerca contro tabelle hash. 250 00:10:37,930 --> 00:10:39,770 Tentativi sono davvero grande perché, come abbiamo detto, 251 00:10:39,770 --> 00:10:41,610 forniscono a tempo costante ricerca. 252 00:10:41,610 --> 00:10:44,285 Ma l'enorme svantaggio è che sono humongous. 253 00:10:44,285 --> 00:10:46,160 È possibile ottenere il senso, anche cercando in esso, 254 00:10:46,160 --> 00:10:48,454 che sta andando a prendere una grande quantità di memoria. 255 00:10:48,454 --> 00:10:50,620 Così sta andando ad essere molto più grande di tabelle hash, 256 00:10:50,620 --> 00:10:52,270 ma che stanno andando a dare noi tempi di ricerca molto più veloce. 257 00:10:52,270 --> 00:10:54,478 Ecco, questo è il vostro tipo di compromesso, che cosa vi preoccupate, 258 00:10:54,478 --> 00:10:57,350 che si tratti di velocità o la memoria. 259 00:10:57,350 --> 00:11:02,251 Tutte le domande di nulla di tutto ciò, tutte le strutture di dati C. 260 00:11:02,251 --> 00:11:02,750 Bellissimo. 261 00:11:02,750 --> 00:11:03,250 OK. 262 00:11:03,250 --> 00:11:07,322 Stiamo andando a passare per un po ' po 'di sviluppo web con Maria. 263 00:11:07,322 --> 00:11:08,280 MARIA ZLATKOVA: Lovely. 264 00:11:08,280 --> 00:11:09,036 OK. 265 00:11:09,036 --> 00:11:10,380 >> HANNAH BLUMBERG: È possibile utilizzare il mio computer portatile. 266 00:11:10,380 --> 00:11:11,255 >> MARIA ZLATKOVA: Nizza. 267 00:11:11,255 --> 00:11:13,320 268 00:11:13,320 --> 00:11:14,912 Ok bello. 269 00:11:14,912 --> 00:11:17,120 Come ci muoviamo ora al web sviluppo, abbiamo parlato un po ' 270 00:11:17,120 --> 00:11:20,680 sulla modifica delle autorizzazioni di file e directory 271 00:11:20,680 --> 00:11:24,190 in modo che possa essere accessibile ad altri utenti, al mondo, 272 00:11:24,190 --> 00:11:28,640 e in modo che possiamo vedere come fondamentalmente possiamo trasmettere 273 00:11:28,640 --> 00:11:32,600 quando sviluppiamo le cose come siti web che abbiamo fatto per lo più. 274 00:11:32,600 --> 00:11:36,400 >> Così abbiamo visto il comando chmod, che è modalità di modifica, in fondo. 275 00:11:36,400 --> 00:11:39,300 Questo è un comando di Linux e cambia i permessi di accesso 276 00:11:39,300 --> 00:11:40,410 di oggetti del file system. 277 00:11:40,410 --> 00:11:43,370 E un oggetto del file system è solo una cartella, un file, 278 00:11:43,370 --> 00:11:46,810 tutto ciò che è possibile cambiare i permessi. 279 00:11:46,810 --> 00:11:53,750 >> Quindi, per vedere i permessi dei file, digitiamo il comando ls, lista, -l. 280 00:11:53,750 --> 00:11:56,500 E quando si digita questo, abbiamo di solito vedere alcune autorizzazioni 281 00:11:56,500 --> 00:11:59,660 quello sguardo un po 'come questo davanti ad un nome di directory. 282 00:11:59,660 --> 00:12:01,260 Così d si riferisce alla directory. 283 00:12:01,260 --> 00:12:05,930 E poi abbiamo tre triadi che in fondo 284 00:12:05,930 --> 00:12:11,675 fare riferimento alle autorizzazioni di entrambi un utente, un gruppo, o il mondo. 285 00:12:11,675 --> 00:12:16,490 >> I tipi di autorizzazioni che possiamo hanno per tali tre gruppi di persone 286 00:12:16,490 --> 00:12:20,830 sono o R per la lettura, w per scrittura ed x da eseguire. 287 00:12:20,830 --> 00:12:23,650 E possiamo avere quelli per il gruppo e mondo pure. 288 00:12:23,650 --> 00:12:26,940 La cosa difficile è che a volte quando si digita il comando chmod, 289 00:12:26,940 --> 00:12:32,960 dovremmo inserire qualche numero che consisteva di tre bit. 290 00:12:32,960 --> 00:12:36,990 Così abbiamo potuto fare come 777 e che fondamentalmente 291 00:12:36,990 --> 00:12:40,450 riferita al valore aggiunto di ciascuna di queste triadi 292 00:12:40,450 --> 00:12:45,060 perché r rimanda alle 4, w sarebbe riferiscono a 2, e x si riferirebbe a 1, 293 00:12:45,060 --> 00:12:50,020 così quando sommati, ciascuno dei numeri sarebbe venuto fino a un numero cumulativo 294 00:12:50,020 --> 00:12:52,750 ad un valore cumulativo tra 0 e 7. 295 00:12:52,750 --> 00:12:55,150 Così potremmo anche avere 0 per nessuna autorizzazione a tutti. 296 00:12:55,150 --> 00:12:58,200 E che sarebbe fondamentalmente ci darà le autorizzazioni per l'utente, sia 297 00:12:58,200 --> 00:13:00,450 il gruppo o il mondo. 298 00:13:00,450 --> 00:13:02,620 Tutte le domande su questo fino ad ora? 299 00:13:02,620 --> 00:13:05,331 >> PUBBLICO: Lei ha detto letto era 4? 300 00:13:05,331 --> 00:13:06,164 MARIA ZLATKOVA: Sì. 301 00:13:06,164 --> 00:13:07,568 PUBBLICO: [incomprensibile]. 302 00:13:07,568 --> 00:13:08,504 HANNAH BLUMBERG: Yup. 303 00:13:08,504 --> 00:13:11,790 PUBBLICO: E poi con l'aggiunta di tutti coloro altri avrebbero indicare il proprio numero. 304 00:13:11,790 --> 00:13:12,665 MARIA ZLATKOVA: Sì. 305 00:13:12,665 --> 00:13:14,970 Già. 306 00:13:14,970 --> 00:13:17,810 Queste sono grandi questioni. 307 00:13:17,810 --> 00:13:20,490 Bello. 308 00:13:20,490 --> 00:13:25,340 Successivamente, ci siamo buttati in HTML e un po 'di più circa web development. 309 00:13:25,340 --> 00:13:27,990 Quindi HTML significa solo Hyper Text Markup Language. 310 00:13:27,990 --> 00:13:30,460 E questo è il markup linguaggio che è uno standard 311 00:13:30,460 --> 00:13:32,720 che viene utilizzato per creare pagine web. 312 00:13:32,720 --> 00:13:35,750 >> Si chiama un linguaggio di markup perché non è in realtà redatto. 313 00:13:35,750 --> 00:13:40,310 Non dire come codice dovrebbe essere eseguito o qualcosa di simile. 314 00:13:40,310 --> 00:13:44,800 Si delinea solo e descrive come un web 315 00:13:44,800 --> 00:13:46,840 pagina deve essere impostata con ciascuno dei suoi elementi 316 00:13:46,840 --> 00:13:48,460 e come dovrebbero guardare per l'utente. 317 00:13:48,460 --> 00:13:53,090 318 00:13:53,090 --> 00:13:57,110 >> Alcuni dei tag HTML che abbiamo è andato sopra sono i seguenti. 319 00:13:57,110 --> 00:14:00,500 Tutti i nostri documenti HTML iniziato con il codice HTML DOCTYPE. 320 00:14:00,500 --> 00:14:02,550 Poi abbiamo sempre il tag html. 321 00:14:02,550 --> 00:14:03,930 Abbiamo una testa e un corpo. 322 00:14:03,930 --> 00:14:07,890 Ed è importante che HTML ha questo tipo di struttura nidificata 323 00:14:07,890 --> 00:14:09,280 perché è molto chiaro. 324 00:14:09,280 --> 00:14:13,200 E allora diventa molto chiaro quando ci bisogno di aprire e chiudere i tag realmente. 325 00:14:13,200 --> 00:14:18,400 E abbiamo sempre bisogno di chiudere tag che abbiamo aperto. 326 00:14:18,400 --> 00:14:23,170 >> E qui abbiamo alcuni dei tipi di cose a venire che vogliamo avere. 327 00:14:23,170 --> 00:14:26,580 Così abbiamo, per esempio, il titolo di CS50. 328 00:14:26,580 --> 00:14:31,980 E poi abbiamo effettivamente può collegare un foglio di stile 329 00:14:31,980 --> 00:14:34,030 che definisce il modo in cui lo stile il nostro sito web. 330 00:14:34,030 --> 00:14:35,650 Questo è il CSS. 331 00:14:35,650 --> 00:14:39,320 Stiamo per andare su di esso in un paio di scivoli pure. 332 00:14:39,320 --> 00:14:42,580 >> All'interno del corpo, abbiamo impostato alcune classi e ID. 333 00:14:42,580 --> 00:14:45,860 E come ricordo, ancora una volta, Gli ID sono unici e le classi 334 00:14:45,860 --> 00:14:47,390 può essere assegnato a più elementi. 335 00:14:47,390 --> 00:14:52,110 E questo significa solo che possiamo usare le classi e gli ID 336 00:14:52,110 --> 00:14:55,860 all'interno di altri structures-- così, per ad esempio, all'interno di file CSS o stile 337 00:14:55,860 --> 00:15:00,940 sheets-- per fare riferimento a elementi specifici e fondamentalmente diciamo che vogliamo per lo stile 338 00:15:00,940 --> 00:15:03,280 o disegnare qualche elemento in qualche modo particolare. 339 00:15:03,280 --> 00:15:06,440 E ci riferiamo a loro da loro ID e classi. 340 00:15:06,440 --> 00:15:09,870 E possiamo anche fare riferimento a cose diverse da tag così, 341 00:15:09,870 --> 00:15:13,830 ma gli ID e le classi solo ci danno un po ' versatilità e che cosa specificamente noi 342 00:15:13,830 --> 00:15:15,850 voglia di fare riferimento. 343 00:15:15,850 --> 00:15:19,620 >> Quindi, solo un esempio. 344 00:15:19,620 --> 00:15:22,730 Possiamo, di nuovo, entro un file CSS dove siamo 345 00:15:22,730 --> 00:15:25,770 vuole definire alcuni style-- così colori, i font, 346 00:15:25,770 --> 00:15:30,340 e cose del genere che-- possiamo definire lo stile per un corpo. 347 00:15:30,340 --> 00:15:32,640 In modo che definirei per tutto il tag body. 348 00:15:32,640 --> 00:15:36,160 Ma allora possiamo anche definire uno stile per una #title. 349 00:15:36,160 --> 00:15:40,390 E ancora, l'hashtag riferisce alla nostra ID e il punto si riferisce alla nostra classe. 350 00:15:40,390 --> 00:15:44,760 >> E poi per i .info, abbiamo possono anche impostare alcuni attributi. 351 00:15:44,760 --> 00:15:49,750 E ancora, quando torneremo, abbiamo avuto la nostra classe chiamata informazioni e il nostro titolo ID. 352 00:15:49,750 --> 00:15:53,422 E possiamo vedere che ci riferiamo a loro da #title e .info. 353 00:15:53,422 --> 00:15:55,380 PUBBLICO: Vuoi dire hashtag [? Adottami? ?] 354 00:15:55,380 --> 00:15:55,725 MARIA ZLATKOVA: Siamo spiacenti? 355 00:15:55,725 --> 00:15:58,120 PUBBLICO: Vuoi dire hashtag [? Adottami? ?] 356 00:15:58,120 --> 00:16:01,400 MARIA ZLATKOVA: hashtag significa ID, così #title 357 00:16:01,400 --> 00:16:07,890 si riferisce a qualunque elementi avere questo ID chiamata titolo. 358 00:16:07,890 --> 00:16:10,735 E poi il punto si riferisce ad una classe. 359 00:16:10,735 --> 00:16:14,590 Quindi, .info si riferisce a questo elemento perché ha la classe di informazioni. 360 00:16:14,590 --> 00:16:15,090 Sì. 361 00:16:15,090 --> 00:16:17,905 >> PUBBLICO: Perché ti distinguerle nel codice HTML? 362 00:16:17,905 --> 00:16:20,985 Perché dici certe cose sono ID e certe cose sono di classe? 363 00:16:20,985 --> 00:16:22,610 MARIA ZLATKOVA: Questo è solo fino a you-- 364 00:16:22,610 --> 00:16:24,151 HANNAH BLUMBERG: ripetere la domanda. 365 00:16:24,151 --> 00:16:25,370 MARIA ZLATKOVA: Oh, mi dispiace. 366 00:16:25,370 --> 00:16:29,480 Perché si distinguono alcuni elementi come ID e altri elementi come le classi? 367 00:16:29,480 --> 00:16:34,760 Questo è solo perché è davvero spesso una scelta progettuale. 368 00:16:34,760 --> 00:16:38,520 Ti dà un sacco di versatilità nell'essere 369 00:16:38,520 --> 00:16:43,250 in grado di dire che voglio questa specifica voce per avere questo ID perché vogliono 370 00:16:43,250 --> 00:16:45,300 a fare un sacco di cose con essa, e solo 371 00:16:45,300 --> 00:16:50,010 vuole definire uno stile, certo stile o il colore qualunque cosa per tale voce. 372 00:16:50,010 --> 00:16:52,630 E il modo per farlo è solo dandogli un ID. 373 00:16:52,630 --> 00:16:55,060 >> E poi se voglio avere un paio di elementi diversi 374 00:16:55,060 --> 00:16:58,940 avendo che, invece di andare e impostazione their-- 375 00:16:58,940 --> 00:17:03,840 invece di farlo da etichetta perché il tag sarebbe 376 00:17:03,840 --> 00:17:07,369 impostare la cella per tutta tag per ogni volta che viene utilizzata tale tag, 377 00:17:07,369 --> 00:17:09,740 è possibile impostare una classe a più elementi. 378 00:17:09,740 --> 00:17:15,109 E poi basta accedere a tale classe e dire Voglio per lo stile di questa classe in quel modo. 379 00:17:15,109 --> 00:17:17,579 >> E ancora, la classe può essere più elementi diversi 380 00:17:17,579 --> 00:17:21,150 e l'ID deve essere univoco. 381 00:17:21,150 --> 00:17:21,849 Grandi domande. 382 00:17:21,849 --> 00:17:25,339 Qualsiasi altra domanda? 383 00:17:25,339 --> 00:17:26,220 OK, impressionante. 384 00:17:26,220 --> 00:17:30,680 385 00:17:30,680 --> 00:17:35,330 Ancora una volta, questo è come questi selettori si fa riferimento in CSS, con hashtag, 386 00:17:35,330 --> 00:17:40,031 con il puntino, o senza nulla per assegnare lo stile di qualche modifica, 387 00:17:40,031 --> 00:17:40,530 come il corpo. 388 00:17:40,530 --> 00:17:43,500 389 00:17:43,500 --> 00:17:47,860 E qui abbiamo il generale sintassi come questo è fatto. 390 00:17:47,860 --> 00:17:52,830 391 00:17:52,830 --> 00:17:55,680 >> Per ripetere alcuni meglio pratiche per HTML e CSS, 392 00:17:55,680 --> 00:17:59,170 dobbiamo, ancora una volta, chiudere tutte le i tag HTML che abbiamo aperto. 393 00:17:59,170 --> 00:18:03,950 E quello che hai consigliato fare per i vostri progetti finali, 394 00:18:03,950 --> 00:18:10,560 così come per CS50 Finance, è quello di rendere Assicurarsi che tutto il codice HTML convalida. 395 00:18:10,560 --> 00:18:12,920 E questo è fatto con il W3 Validator. 396 00:18:12,920 --> 00:18:16,940 >> E poi quello che abbiamo fatto e quello che vi consigliamo di fare 397 00:18:16,940 --> 00:18:19,790 è separare stile, in modo CSS da codice HTML. 398 00:18:19,790 --> 00:18:24,210 Quindi tutto ciò che si riferisce a come la tua pagina è andare a guardare visivamente 399 00:18:24,210 --> 00:18:27,330 e come sta andando essere modificato dovrebbe andare in un documento CSS. 400 00:18:27,330 --> 00:18:33,880 E poi il tuo markup dire come le cose sono in relazione tra loro è HTML, 401 00:18:33,880 --> 00:18:37,550 e che dovrebbe andare dentro dei vostri documenti HTML. 402 00:18:37,550 --> 00:18:38,590 Qualsiasi domanda? 403 00:18:38,590 --> 00:18:39,226 Mhm. 404 00:18:39,226 --> 00:18:42,628 >> PUBBLICO: Che cosa sta succedendo con la convalida pagina 405 00:18:42,628 --> 00:18:47,945 quando stiamo convalidando la HTML che [incomprensibile] ha creato? 406 00:18:47,945 --> 00:18:49,850 >> MARIA ZLATKOVA: Così cosa-- pensi. 407 00:18:49,850 --> 00:18:53,020 Così che cosa esattamente sta succedendo sulla pagina con la convalida 408 00:18:53,020 --> 00:18:55,570 e perché abbiamo bisogno di farlo? 409 00:18:55,570 --> 00:18:59,180 Fondamentalmente, abbiamo bisogno di farlo perché un sacco di volte, il tuo browser, 410 00:18:59,180 --> 00:19:01,390 se non si chiude un tag o qualcosa di simile, 411 00:19:01,390 --> 00:19:05,680 il browser è ancora in corso di rendering di una pagina e potrebbe ancora funzionare, 412 00:19:05,680 --> 00:19:10,840 ma è buona norma assicurarsi che hai, ancora una volta, ha chiuso tutti i tag, 413 00:19:10,840 --> 00:19:13,190 che tutti gli elementi siano il modo in cui dovrebbero essere, 414 00:19:13,190 --> 00:19:18,470 e fondamentalmente che è dal convenzioni che sono preimpostati. 415 00:19:18,470 --> 00:19:21,970 >> È, di nuovo, solo cosa che si dovrebbe 416 00:19:21,970 --> 00:19:24,040 essere imparare a fare, al contrario di avere 417 00:19:24,040 --> 00:19:25,696 codice sloppier e cose del genere. 418 00:19:25,696 --> 00:19:26,688 Già. 419 00:19:26,688 --> 00:19:27,680 Oh scusa. 420 00:19:27,680 --> 00:19:29,221 Credevo che alzando la mano. 421 00:19:29,221 --> 00:19:31,240 PUBBLICO: No, ero solo [incomprensibile]. 422 00:19:31,240 --> 00:19:33,800 >> MARIA ZLATKOVA: OK. 423 00:19:33,800 --> 00:19:34,640 >> PUBBLICO: Grazie. 424 00:19:34,640 --> 00:19:36,181 >> MARIA ZLATKOVA: Certo, grazie. 425 00:19:36,181 --> 00:19:41,680 Quindi, di nuovo, in corso in quanto informazione è trasferita 426 00:19:41,680 --> 00:19:44,630 e modelli di comunicazione per trasferire informazioni. 427 00:19:44,630 --> 00:19:45,730 TCP / IP. 428 00:19:45,730 --> 00:19:48,600 TCP significa solo trasmissione Control Protocol e IP 429 00:19:48,600 --> 00:19:51,260 si riferisce a Internet Protocol. 430 00:19:51,260 --> 00:19:54,275 E che si riferisce solo a il dato modo in cui viene consegnato. 431 00:19:54,275 --> 00:19:59,470 432 00:19:59,470 --> 00:20:02,710 >> Se abbiamo alcuni dati che ha bisogno di consegnare a you-- così 433 00:20:02,710 --> 00:20:06,770 si effettua una richiesta per un determinato server. 434 00:20:06,770 --> 00:20:09,800 Ad esempio, quando provare ad accedere cs50.net, 435 00:20:09,800 --> 00:20:12,420 facciamo una richiesta di il server CS50 e noi 436 00:20:12,420 --> 00:20:14,720 vediamo che vogliamo ottenere questo tipo di informazioni. 437 00:20:14,720 --> 00:20:19,294 E poi si basano su questo protocollo per come viene fornito queste informazioni, 438 00:20:19,294 --> 00:20:21,460 il server fornisce informazioni di nuovo a noi, il cliente. 439 00:20:21,460 --> 00:20:25,590 E poi siamo in grado di visualizzare le informazioni per la pagina 440 00:20:25,590 --> 00:20:26,390 e quindi utilizzarlo. 441 00:20:26,390 --> 00:20:29,300 442 00:20:29,300 --> 00:20:33,050 >> Allora Hypertext Transfer Protocol è solo un altro protocollo o set 443 00:20:33,050 --> 00:20:37,470 di convenzioni che definisce come il browser web e il web server 444 00:20:37,470 --> 00:20:38,890 dovrebbe comunicare. 445 00:20:38,890 --> 00:20:43,730 E mettendo tutto questo insieme, HTTP, di nuovo, 446 00:20:43,730 --> 00:20:50,960 solo definisce come questo ipertesto definito per il codice HTML che abbiamo lavorato esso, 447 00:20:50,960 --> 00:20:59,500 come dovrebbe essere consegnato a voi e come che i dati che viene consegnato a voi 448 00:20:59,500 --> 00:21:00,540 arriva a voi. 449 00:21:00,540 --> 00:21:05,990 >> Ed è per questo che, se voi ragazzi ricordate da una classe, abbiamo avuto un sacco di richieste 450 00:21:05,990 --> 00:21:08,970 e abbiamo avuto un sacco di sintassi per queste richieste che siamo 451 00:21:08,970 --> 00:21:10,250 intenzione di andare oltre in questo momento. 452 00:21:10,250 --> 00:21:13,270 Quindi, di nuovo, quando inviamo una richiesta a un server, 453 00:21:13,270 --> 00:21:15,920 dobbiamo definire un paio di cose. 454 00:21:15,920 --> 00:21:18,520 Quindi abbiamo bisogno di trovare il tipo di richiesta che stiamo impostando. 455 00:21:18,520 --> 00:21:22,180 E ancora, abbiamo, per esempio, GET è un tipo di metodo 456 00:21:22,180 --> 00:21:25,290 che abbiamo nel nostro richiesta. 457 00:21:25,290 --> 00:21:31,710 >> E poi HTTP / 1.1 è solo la protocollo che stiamo usando al momento. 458 00:21:31,710 --> 00:21:34,224 459 00:21:34,224 --> 00:21:36,890 La maggior parte del tempo, che sta andando il protocollo che stiamo usando. 460 00:21:36,890 --> 00:21:40,290 Quindi, se avete una domanda come quella sul vostro quiz. 461 00:21:40,290 --> 00:21:43,120 Ecco le convenzioni che abbiamo finora. 462 00:21:43,120 --> 00:21:46,580 >> Backslash si riferisce a quale tipo di cose che stiamo chiedendo. 463 00:21:46,580 --> 00:21:52,810 Poi, il nostro ospite è, per esempio, in questo caso, stiamo cercando di andare a google.com. 464 00:21:52,810 --> 00:21:57,070 Quindi questo è il valore di un host. 465 00:21:57,070 --> 00:21:59,330 Questo è un tipo di richiesta che potrebbe essere inviato. 466 00:21:59,330 --> 00:22:02,890 >> E poi un tipo di risposta che potrebbe inviare, ancora, sulla base di questo protocollo, 467 00:22:02,890 --> 00:22:05,190 è di nuovo, HTTP / 1.1. 468 00:22:05,190 --> 00:22:07,150 Ecco, questo è ancora una volta la versione HTTP. 469 00:22:07,150 --> 00:22:09,730 200 OK è solo il codice di stato. 470 00:22:09,730 --> 00:22:12,860 E che OK è solo una frase in base a tale codice di stato. 471 00:22:12,860 --> 00:22:15,520 >> E poi il Content-Type si riferisce al tipo 472 00:22:15,520 --> 00:22:20,295 che vengono restituiti a voi che è per quella pagina web che si riceve 473 00:22:20,295 --> 00:22:22,570 e che il browser può rendere in seguito. 474 00:22:22,570 --> 00:22:24,401 E questo è text / html. 475 00:22:24,401 --> 00:22:26,660 >> PUBBLICO: Che cosa vuol dire 1.1? 476 00:22:26,660 --> 00:22:29,910 >> MARIA ZLATKOVA: Questo è solo il versione di-- oh, cosa vuol 1.1 significa? 477 00:22:29,910 --> 00:22:37,075 Questa è solo la versione, il HTTP versione di un protocollo che stiamo usando. 478 00:22:37,075 --> 00:22:37,700 Grande domanda. 479 00:22:37,700 --> 00:22:38,366 Altre domande? 480 00:22:38,366 --> 00:22:41,222 481 00:22:41,222 --> 00:22:45,080 >> PUBBLICO: Potresti riassumere Content-Type reale veloce? 482 00:22:45,080 --> 00:22:48,150 >> MARIA ZLATKOVA: In modo che ciò è il server. 483 00:22:48,150 --> 00:22:51,020 il tipo di informazioni inclusi ciò è tipo di contenuto era le domande. 484 00:22:51,020 --> 00:22:53,400 Così che era il tipo di informazioni che si ottiene indietro 485 00:22:53,400 --> 00:22:58,200 dal server, il tipo di i dati che il browser può quindi 486 00:22:58,200 --> 00:23:00,604 rendering che si sta utilizzando. 487 00:23:00,604 --> 00:23:03,020 PUBBLICO: E 'di questo che si protocollo che si sta dicendo di fare? 488 00:23:03,020 --> 00:23:03,390 MARIA ZLATKOVA: Siamo spiacenti? 489 00:23:03,390 --> 00:23:05,380 PUBBLICO: È questo che dicono il protocollo? 490 00:23:05,380 --> 00:23:05,915 MARIA ZLATKOVA: Il protocol-- 491 00:23:05,915 --> 00:23:07,940 AUDIENCE: --che il Content-Type è o cosa-- 492 00:23:07,940 --> 00:23:12,040 MARIA ZLATKOVA: Il protocollo si basa on-- qual è il protocollo che si dice? 493 00:23:12,040 --> 00:23:16,070 Questo è solo il modo in cui che questa informazione 494 00:23:16,070 --> 00:23:18,610 è stato consegnato a voi sulla base dal tipo di protocollo 495 00:23:18,610 --> 00:23:21,830 Queste informazioni sono state ottenuto consegnato a te. 496 00:23:21,830 --> 00:23:23,500 Questo fa senso sorta di? 497 00:23:23,500 --> 00:23:28,320 498 00:23:28,320 --> 00:23:30,070 HANNAH BLUMBERG: Si può pensare di protocollo 499 00:23:30,070 --> 00:23:33,300 come a-- Penso che il professor Malan descrisse 500 00:23:33,300 --> 00:23:36,910 in classe come un po 'come a-- è come l'equivalente di handshaking umana. 501 00:23:36,910 --> 00:23:44,930 Dire, come, hey, io sono una richiesta e io saper gestire HTTP versione 1.1. 502 00:23:44,930 --> 00:23:48,770 E poi il server dice, oh, OK, io-- ed entrambi esistono. 503 00:23:48,770 --> 00:23:51,337 So anche come trattare con HTTP / 1.1. 504 00:23:51,337 --> 00:23:53,170 E ho intenzione di dare si esegue il backup alcuni contenuti. 505 00:23:53,170 --> 00:23:56,230 In questo caso, sta andando essere di tipo text / html. 506 00:23:56,230 --> 00:23:58,480 Quindi è una specie di solo un modo di loro per communicating-- 507 00:23:58,480 --> 00:24:00,480 >> MARIA ZLATKOVA: E 'solo confermando che sei 508 00:24:00,480 --> 00:24:03,290 sia seguendo la stessa protocollo e che sia 509 00:24:03,290 --> 00:24:06,620 il client e il server-- così il browser e il server-- 510 00:24:06,620 --> 00:24:09,280 tipo di sapere cosa si sta parlando e hanno 511 00:24:09,280 --> 00:24:12,557 la convenzione per il passaggio nei dati. 512 00:24:12,557 --> 00:24:17,022 >> AUDIENCE: Così il Content-Type part-- il testo Content-Type / html-- che è 513 00:24:17,022 --> 00:24:18,521 una parte separata dello stesso messaggio? 514 00:24:18,521 --> 00:24:20,509 O è parte di, diciamo, 200? 515 00:24:20,509 --> 00:24:22,010 Vuol dire loro che 200 o è-- 516 00:24:22,010 --> 00:24:23,770 >> MARIA ZLATKOVA: 200 dice che tutto è andato bene. 517 00:24:23,770 --> 00:24:27,900 E poi tipo di contenuto è una sorta di parte separata dello stesso messaggio, 518 00:24:27,900 --> 00:24:34,274 e dire la cosa che mi restituito ha questo tipo di text / html. 519 00:24:34,274 --> 00:24:35,690 E 'solo dare più informazioni. 520 00:24:35,690 --> 00:24:38,700 521 00:24:38,700 --> 00:24:39,995 Hanno qualcosa da aggiungere? 522 00:24:39,995 --> 00:24:40,495 OK. 523 00:24:40,495 --> 00:24:43,590 524 00:24:43,590 --> 00:24:46,530 >> Altre domande su questo? 525 00:24:46,530 --> 00:24:48,370 Eccezionale. 526 00:24:48,370 --> 00:24:54,070 Così alcuni altri stati HTTP che potremmo ottenere in aggiunta a 200 OK, 527 00:24:54,070 --> 00:24:59,500 quelli che abbiamo visto forse forse molti sono 403 e 404. 528 00:24:59,500 --> 00:25:05,190 Così 404, se si stava tentando di accesso qualcosa che non esiste. 529 00:25:05,190 --> 00:25:10,460 Così, per esempio, in Pset CS50 Finanza, 530 00:25:10,460 --> 00:25:15,640 se tu fossi stato renderizzando quote.html e non avevate quel file, 531 00:25:15,640 --> 00:25:19,740 ma invece hai avuto quote.php, che si tradurrebbe in un 404 Not Found 532 00:25:19,740 --> 00:25:21,600 perché il file potrebbe non esistere. 533 00:25:21,600 --> 00:25:25,690 >> Per un 403 proibito, che si riferisce alle autorizzazioni. 534 00:25:25,690 --> 00:25:31,150 Quindi, se alcuni file non è leggibile dal mondo, si potrebbe ottenere un 403 restituito. 535 00:25:31,150 --> 00:25:34,510 536 00:25:34,510 --> 00:25:37,810 Alcuni altri che si potrebbe get-- 301, Spostato in modo permanente; 537 00:25:37,810 --> 00:25:41,300 302, Trovato; 304, modificata; 400, Bad Request; 538 00:25:41,300 --> 00:25:47,330 e poi Errore interno del server per 500 e 503, Servizio non disponibile. 539 00:25:47,330 --> 00:25:48,140 Sì. 540 00:25:48,140 --> 00:25:51,490 >> PUBBLICO: Will ci aspettavamo di memorizzare tutti questi stati? 541 00:25:51,490 --> 00:25:53,739 MARIA ZLATKOVA: Avrei sul vostro foglietto. 542 00:25:53,739 --> 00:25:55,146 [Risata] 543 00:25:55,146 --> 00:25:59,954 PUBBLICO: Are ci aspettavamo sapere che cosa fa scattare ognuno? 544 00:25:59,954 --> 00:26:00,995 MARIA ZLATKOVA: Sono? 545 00:26:00,995 --> 00:26:03,870 HANNAH BLUMBERG: Per quelli che abbiamo eseguire into-- quindi la domanda era-- 546 00:26:03,870 --> 00:26:08,010 MARIA ZLATKOVA: Sono tenuti a sapere che cosa ognuno di questi di stato 547 00:26:08,010 --> 00:26:09,330 codici potrebbe essere innescato da? 548 00:26:09,330 --> 00:26:13,240 Così per quelli che abbiamo usato e corse in, direi, sì. 549 00:26:13,240 --> 00:26:16,610 Così abbiamo sicuramente visto 200 OK e tenuto conferenze in pset. 550 00:26:16,610 --> 00:26:19,071 Abbiamo visto 403, 404. 551 00:26:19,071 --> 00:26:20,550 Per altri? 552 00:26:20,550 --> 00:26:22,690 >> HANNAH BLUMBERG: vorrei dicono 500 sembra giusto gioco. 553 00:26:22,690 --> 00:26:23,330 >> MARIA ZLATKOVA: 500, sì. 554 00:26:23,330 --> 00:26:24,246 >> HANNAH BLUMBERG: Sì. 555 00:26:24,246 --> 00:26:27,006 Basta avere un senso generale di ciò che li provoca. 556 00:26:27,006 --> 00:26:28,880 E anche solo da questi nomi, è possibile tipo di 557 00:26:28,880 --> 00:26:32,890 come fare un'ipotesi come a ciò che effettivamente loro causato. 558 00:26:32,890 --> 00:26:36,919 Ad esempio, spostare in modo permanente, probabilmente il file è stato spostato in modo permanente. 559 00:26:36,919 --> 00:26:39,328 >> PUBBLICO: Ma su un precedente esame, c'era una così 560 00:26:39,328 --> 00:26:41,050 Come ci si aspetta di rispondere? 561 00:26:41,050 --> 00:26:42,883 >> HANNAH BLUMBERG: Che valeva zero punti. 562 00:26:42,883 --> 00:26:45,870 La domanda sulla 418 sulla teiera è tecnicamente un stato HTTP, 563 00:26:45,870 --> 00:26:47,090 ma ne valeva la pena zero punti. 564 00:26:47,090 --> 00:26:48,320 Ovviamente, non si è dovrebbe conoscerli. 565 00:26:48,320 --> 00:26:49,670 >> PUBBLICO: E 'una vera e propria? 566 00:26:49,670 --> 00:26:51,970 >> HANNAH BLUMBERG: E 'un vero uno, ma non significa nulla. 567 00:26:51,970 --> 00:26:52,700 È solo uno scherzo. 568 00:26:52,700 --> 00:26:55,480 569 00:26:55,480 --> 00:26:57,010 Popolo di Internet sono divertenti. 570 00:26:57,010 --> 00:26:59,680 >> MARIA ZLATKOVA: Grandi domande, ragazzi. 571 00:26:59,680 --> 00:27:01,452 Qualsiasi altra domanda? 572 00:27:01,452 --> 00:27:04,891 >> PUBBLICO: Che cosa è l'errore interno del server? 573 00:27:04,891 --> 00:27:06,640 MARIA ZLATKOVA: Interno Errore del server solo 574 00:27:06,640 --> 00:27:10,050 significa che sei stato incapaci di comunicare 575 00:27:10,050 --> 00:27:13,400 con il server per qualche motivo. 576 00:27:13,400 --> 00:27:15,400 Quindi non è necessariamente qualcosa che ha a che fare 577 00:27:15,400 --> 00:27:19,170 con il cliente o qualcosa del genere. 578 00:27:19,170 --> 00:27:22,170 Io non conosco nessun esempio specifico che siamo andati oltre a spiegare, 579 00:27:22,170 --> 00:27:23,000 ma sì. 580 00:27:23,000 --> 00:27:23,250 >> HANNAH BLUMBERG: Certo. 581 00:27:23,250 --> 00:27:25,625 Così, per esempio, come facciamo dici si stava lavorando mashup 582 00:27:25,625 --> 00:27:30,440 e un server di Google è andato giù per un po ' ragione, un'interruzione di corrente, diciamo. 583 00:27:30,440 --> 00:27:33,400 Sarebbe un server interno errore o una sorta di-- come te 584 00:27:33,400 --> 00:27:34,630 non sarebbe ottenere una risposta indietro. 585 00:27:34,630 --> 00:27:35,260 >> MARIA ZLATKOVA: Sì. 586 00:27:35,260 --> 00:27:37,050 E 'solo quando si è incapaci di comunicare 587 00:27:37,050 --> 00:27:40,299 con il server per qualche motivo perché di farlo andare verso il basso o qualche altra ragione. 588 00:27:40,299 --> 00:27:44,430 589 00:27:44,430 --> 00:27:47,690 Così saltare in PHP. 590 00:27:47,690 --> 00:27:49,930 PHP, a differenza di HTML, è un linguaggio di programmazione. 591 00:27:49,930 --> 00:27:54,820 E abbiamo iniziato ad usare perché è molto utile per lo sviluppo web. 592 00:27:54,820 --> 00:27:56,940 >> In primo luogo abbiamo usato in CS50 Finanza. 593 00:27:56,940 --> 00:28:02,240 E aiuta fondamentalmente ci portano insieme questo markup, la progettazione, 594 00:28:02,240 --> 00:28:07,460 e il modo in cui utilizziamo le informazioni realmente per visualizzare le cose su una pagina web. 595 00:28:07,460 --> 00:28:11,870 Così lo stesso PHP significa PHP Hypertext Preprocessor, 596 00:28:11,870 --> 00:28:15,360 quindi è un backnorym ricorsivo di per sé. 597 00:28:15,360 --> 00:28:22,330 E l'apertura di tag per PHP che la sinistra e le frecce giuste con i punti interrogativi 598 00:28:22,330 --> 00:28:23,060 e php. 599 00:28:23,060 --> 00:28:25,890 >> Quindi abbiamo già visto un sacco di esso. 600 00:28:25,890 --> 00:28:29,150 Ora, stiamo solo andando ad andare oltre alcune delle cose di base su di esso. 601 00:28:29,150 --> 00:28:32,280 Quindi, con PHP, la variabile nomi iniziano con il simbolo del dollaro. 602 00:28:32,280 --> 00:28:35,660 Noi non specifichiamo, ancora una volta, una variabile di tipo più. 603 00:28:35,660 --> 00:28:38,450 Proprio come abbiamo fatto con C, non abbiamo bisogno di farlo. 604 00:28:38,450 --> 00:28:41,670 605 00:28:41,670 --> 00:28:44,490 >> Possiamo fare un mucchio di diverso roba con le variabili. 606 00:28:44,490 --> 00:28:47,750 Possiamo mettere insieme da loro concatenando 607 00:28:47,750 --> 00:28:52,900 con la notazione punto, che non siamo riusciti a fare in C di nuovo. 608 00:28:52,900 --> 00:28:57,490 Ancora una volta, abbiamo un po 'più versatilità con PHP in termini di variabili. 609 00:28:57,490 --> 00:29:00,080 Ancora una volta, non abbiamo una funzione principale. 610 00:29:00,080 --> 00:29:03,370 >> E PHP è interpretato al contrario di compilazione, 611 00:29:03,370 --> 00:29:09,970 Quindi, solo come abbiamo fatto per i file C, non dobbiamo farlo per PHP. 612 00:29:09,970 --> 00:29:15,440 Ma piuttosto, il modo in cui la lingua è gestito da sé, viene interpretato. 613 00:29:15,440 --> 00:29:18,550 E poi debolmente tipizzato significa solo che noi 614 00:29:18,550 --> 00:29:22,490 non c'è bisogno di specificare una variabile tipo e i tipi di variabili 615 00:29:22,490 --> 00:29:25,415 si intendono in fase di esecuzione. 616 00:29:25,415 --> 00:29:29,185 >> PUBBLICO: Ma che cosa hai fatto dire con la concatenazione di punti? 617 00:29:29,185 --> 00:29:30,060 MARIA ZLATKOVA: Certo. 618 00:29:30,060 --> 00:29:37,660 Quando vogliamo mettere le cose together-- quindi se abbiamo avuto qualche variabile 619 00:29:37,660 --> 00:29:41,500 aveva il valore di 3 e abbiamo avuto un'altra variabile che aveva il valore di stringa 620 00:29:41,500 --> 00:29:45,920 potremmo mettere insieme le variabili mettendo un punto tra loro 621 00:29:45,920 --> 00:29:46,970 e loro concatenazione. 622 00:29:46,970 --> 00:29:52,670 O potremmo creare un chiamato nome della variabile 623 00:29:52,670 --> 00:29:56,900 e mettere insieme da concatenare due stringhe. 624 00:29:56,900 --> 00:30:00,680 >> Quindi, se avessimo una stringa in doppio citazioni e abbiamo messo un punto dopo che, 625 00:30:00,680 --> 00:30:03,660 e poi abbiamo avuto un'altra stringa, che creerebbe una stringa del tutto. 626 00:30:03,660 --> 00:30:05,242 >> PUBBLICO: OK. 627 00:30:05,242 --> 00:30:06,450 MARIA LETTONIA: Was chiaro? 628 00:30:06,450 --> 00:30:07,099 PUBBLICO: Sì. 629 00:30:07,099 --> 00:30:07,890 MARIA ZLATKOVA: OK. 630 00:30:07,890 --> 00:30:08,766 Sì. 631 00:30:08,766 --> 00:30:11,146 >> PUBBLICO: Quando si dice interpretato piuttosto che compilato, 632 00:30:11,146 --> 00:30:14,160 stai parlando non fare hanno bisogno di essere il più specifico quando 633 00:30:14,160 --> 00:30:15,906 si tratta di PHP vs C? 634 00:30:15,906 --> 00:30:18,085 635 00:30:18,085 --> 00:30:20,710 MARIA ZLATKOVA: Quando si dice interpretato in contrasto compilato, 636 00:30:20,710 --> 00:30:21,850 cosa intendiamo? 637 00:30:21,850 --> 00:30:26,220 Quindi questo significa che non abbiamo bisogno di file eseguibili per eseguire PHP. 638 00:30:26,220 --> 00:30:29,870 Vuol dire che funziona come va. 639 00:30:29,870 --> 00:30:31,650 Questo fa senso? 640 00:30:31,650 --> 00:30:32,495 Un po 'di più. 641 00:30:32,495 --> 00:30:34,620 HANNAH BLUMBERG: Così si può pensare di un interprete 642 00:30:34,620 --> 00:30:38,980 come un altro programma che è responsabile per andare riga per riga con PHP 643 00:30:38,980 --> 00:30:42,745 ed effettivamente eseguito, a differenza per compilarlo tutta una questione di binario. 644 00:30:42,745 --> 00:30:46,050 In realtà non significa nulla su how specifico abbiamo bisogno di essere. 645 00:30:46,050 --> 00:30:49,470 Abbiamo ancora bisogno di essere precisi, e non lo facciamo dimenticare la virgola, e assicurarsi che 646 00:30:49,470 --> 00:30:51,470 avete il vostro segno di dollaro, e cose del genere. 647 00:30:51,470 --> 00:30:52,240 Bella domanda. 648 00:30:52,240 --> 00:30:53,115 >> MARIA ZLATKOVA: Sì. 649 00:30:53,115 --> 00:30:55,590 Quindi, linea per linea, come invece di con file C, 650 00:30:55,590 --> 00:30:59,100 dobbiamo fare tutto il finale prima di poter effettivamente eseguirlo. 651 00:30:59,100 --> 00:31:00,360 Questa è la differenza principale. 652 00:31:00,360 --> 00:31:02,655 Ma ancora una volta, non possiamo davvero essere meno specifici. 653 00:31:02,655 --> 00:31:08,760 654 00:31:08,760 --> 00:31:13,950 Così gli array in PHP rappresentano in realtà una mappa ordinata. 655 00:31:13,950 --> 00:31:17,550 >> Quindi i valori array associati ai tasti. 656 00:31:17,550 --> 00:31:23,350 I due modi per dichiarare un array, basato su questa sintassi, 657 00:31:23,350 --> 00:31:26,380 possiamo essere più esplicito nel dire che abbiamo un array 658 00:31:26,380 --> 00:31:31,010 e abbiamo questa key1 che mappa questo valore1, chiave2 che mappa valore2. 659 00:31:31,010 --> 00:31:34,660 Oppure possiamo semplicemente creare un array che contiene i valori si 660 00:31:34,660 --> 00:31:38,360 e quindi le chiavi sono inteso in modo. 661 00:31:38,360 --> 00:31:40,000 Tutte le domande su questo? 662 00:31:40,000 --> 00:31:42,500 >> Pubblico: Quale sarebbe il chiavi essere nel secondo esempio? 663 00:31:42,500 --> 00:31:47,100 664 00:31:47,100 --> 00:31:47,920 0, 1, 2, 3? 665 00:31:47,920 --> 00:31:50,650 666 00:31:50,650 --> 00:31:55,780 >> MARIA ZLATKOVA: ad esempio, è solo le chiavi di questo non lo fanno necessariamente 667 00:31:55,780 --> 00:31:56,550 fare la differenza. 668 00:31:56,550 --> 00:32:01,720 Hanno appena definire come si può utilizzare i valori all'interno di esso. 669 00:32:01,720 --> 00:32:08,660 Quindi, se avessimo un foreach ciclo in PHP che avrebbe 670 00:32:08,660 --> 00:32:14,760 ci permettono di passare attraverso tutti i valori, possiamo passare attraverso tutti i valori, 671 00:32:14,760 --> 00:32:19,570 anche se avessimo o non avevamo definito una chiave specifica all'interno del sito del 672 00:32:19,570 --> 00:32:20,820 sintassi precedente. 673 00:32:20,820 --> 00:32:23,460 >> Quindi, anche con questo tipo di array, abbiamo potuto ancora 674 00:32:23,460 --> 00:32:26,260 hanno un ciclo foreach che attraversa ogni 675 00:32:26,260 --> 00:32:31,240 dei valori nella chiave nell'array. 676 00:32:31,240 --> 00:32:36,180 Così la sintassi di un foreach cappio, iniziamo con una serie. 677 00:32:36,180 --> 00:32:38,720 678 00:32:38,720 --> 00:32:43,900 Questa variabile $ arr è la nostra gamma attuale che abbiamo definito nella diapositiva precedente 679 00:32:43,900 --> 00:32:47,550 come valore che va letteralmente attraverso ciascuno dei valori, 680 00:32:47,550 --> 00:32:50,122 indipendentemente dal fatto che abbiamo avuto una chiave o meno. 681 00:32:50,122 --> 00:32:53,080 E allora possiamo fare qualcosa con il valore all'interno del ciclo foreach. 682 00:32:53,080 --> 00:32:57,730 Così ancora una volta, se avessimo un array come questo qui created-- 683 00:32:57,730 --> 00:33:03,270 così abbiamo la chiave di foo e il valore di bar, la chiave di baz e il valore di qux-- 684 00:33:03,270 --> 00:33:09,730 possiamo avere un ciclo foreach che passa attraverso matrice come valore della chiave 685 00:33:09,730 --> 00:33:11,900 e poi fare qualcosa con la chiave e / o il valore. 686 00:33:11,900 --> 00:33:15,980 Ma non lo facciamo necessariamente sempre avere un foreach loop che 687 00:33:15,980 --> 00:33:19,410 passa attraverso matrice come mappa chiave per il valore. 688 00:33:19,410 --> 00:33:26,060 Siamo in grado di passare attraverso la matrice ciclo foreach come valore. 689 00:33:26,060 --> 00:33:28,990 >> HANNAH BLUMBERG: E penso che a-- era la tua domanda, cosa 690 00:33:28,990 --> 00:33:31,229 è l'indice implicito? 691 00:33:31,229 --> 00:33:31,895 PUBBLICO: Kinda. 692 00:33:31,895 --> 00:33:32,240 MARIA ZLATKOVA: Oh. 693 00:33:32,240 --> 00:33:33,406 HANNAH BLUMBERG: Sì, sì. 694 00:33:33,406 --> 00:33:36,150 Quindi, fondamentalmente, se non si specifica una chiave, che sta per essere 01. 695 00:33:36,150 --> 00:33:37,140 >> MARIA ZLATKOVA: Sì. 696 00:33:37,140 --> 00:33:41,718 Proprio come con C, è pari a zero indicizzati se non si specifica una chiave. 697 00:33:41,718 --> 00:33:42,384 PUBBLICO: Siamo spiacenti. 698 00:33:42,384 --> 00:33:43,827 Potresti provare a parlare un po 'più forte? 699 00:33:43,827 --> 00:33:45,270 Sto avendo un po 'di problemi nel sentire tutto. 700 00:33:45,270 --> 00:33:46,478 >> MARIA ZLATKOVA: mi dispiace. 701 00:33:46,478 --> 00:33:48,439 Si, certo. 702 00:33:48,439 --> 00:33:50,230 Quindi vuoi me per andare oltre questo di nuovo? 703 00:33:50,230 --> 00:33:51,680 O è questo-- 704 00:33:51,680 --> 00:33:54,930 PUBBLICO: Così il slide-- precedente se si può solo tornare indietro per un secondo. 705 00:33:54,930 --> 00:33:57,313 MARIA ZLATKOVA: Certo, mi dispiace. 706 00:33:57,313 --> 00:33:59,237 AUDIENCE: Così il secondo matrice qui non lo fa 707 00:33:59,237 --> 00:34:04,135 sembrano avere un valore a chiave, una specie di [? causalità. ?] 708 00:34:04,135 --> 00:34:05,343 MARIA ZLATKOVA: Giusto, giusto. 709 00:34:05,343 --> 00:34:07,608 PUBBLICO: Quindi, come funziona quando si dice che è tutto o niente. 710 00:34:07,608 --> 00:34:08,969 Per me, che sembra un [? pippo?] già. 711 00:34:08,969 --> 00:34:10,093 >> MARIA ZLATKOVA: Sì, sì. 712 00:34:10,093 --> 00:34:12,969 Quindi, di nuovo, questo è un mappa ordinata in questo senso 713 00:34:12,969 --> 00:34:15,639 che non vi sono compresi, per esempio, gli indici 714 00:34:15,639 --> 00:34:20,159 qui può essere inteso come 0, 1, 2, 3. 715 00:34:20,159 --> 00:34:25,929 Ancora una volta, questo è avendo quelli indici è il nostro equivalente 716 00:34:25,929 --> 00:34:28,980 di avere tasti mappati sui valori. 717 00:34:28,980 --> 00:34:34,710 Quindi, se la nostra chiave era 0-- dispiaciuto. 718 00:34:34,710 --> 00:34:36,524 >> HANNAH BLUMBERG: No, C'è gesso qui. 719 00:34:36,524 --> 00:34:36,929 In realtà è davvero bello. 720 00:34:36,929 --> 00:34:37,460 >> MARIA ZLATKOVA: E 'fantastico. 721 00:34:37,460 --> 00:34:38,260 OK. 722 00:34:38,260 --> 00:34:49,489 Quindi, di nuovo, $ arr 0 sarebbe la chiave per il valore 1. 723 00:34:49,489 --> 00:34:51,138 0 sarebbe la chiave per il valore 1. 724 00:34:51,138 --> 00:34:51,971 PUBBLICO: Mi dispiace. 725 00:34:51,971 --> 00:34:53,190 E 'invisibile. 726 00:34:53,190 --> 00:34:53,659 >> HANNAH BLUMBERG: Va bene, non importa. 727 00:34:53,659 --> 00:34:54,980 Gesso era una cattiva idea. 728 00:34:54,980 --> 00:34:58,030 Lo porto indietro. 729 00:34:58,030 --> 00:35:01,425 Si può pensare di chiavi come 0 viene mappato sul valore 1. 730 00:35:01,425 --> 00:35:02,300 MARIA ZLATKOVA: Sì. 731 00:35:02,300 --> 00:35:04,630 Quindi questo è 0, questo è 1, 2, 3. 732 00:35:04,630 --> 00:35:05,760 Questi possono essere le chiavi. 733 00:35:05,760 --> 00:35:10,020 Si può pensare a loro as-- sì. 734 00:35:10,020 --> 00:35:12,740 Così, invece di avere chiavi esplicite, sono 735 00:35:12,740 --> 00:35:17,180 sorta di intesa come gli indici a partire da 0. 736 00:35:17,180 --> 00:35:21,630 737 00:35:21,630 --> 00:35:24,820 Il gesso non ha aiutato. 738 00:35:24,820 --> 00:35:25,722 Già. 739 00:35:25,722 --> 00:35:30,914 >> Destinatari: per il ciclo foreach, se volessimo visualizzare il valore di come, 740 00:35:30,914 --> 00:35:33,245 sarebbe solo indice automaticamente a 0? 741 00:35:33,245 --> 00:35:34,120 MARIA ZLATKOVA: Sì. 742 00:35:34,120 --> 00:35:35,745 Andrebbe attraverso ciascuno dei valori. 743 00:35:35,745 --> 00:35:39,130 PUBBLICO: [incomprensibile] come 0 o vorrei che semplicemente fare 0? 744 00:35:39,130 --> 00:35:43,710 >> MARIA ZLATKOVA: Avresti dire come simbolo del dollaro e quindi 745 00:35:43,710 --> 00:35:46,266 qualche nome variabile, un valore. 746 00:35:46,266 --> 00:35:47,182 PUBBLICO: [incomprensibile]. 747 00:35:47,182 --> 00:35:50,048 748 00:35:50,048 --> 00:35:50,964 MARIA ZLATKOVA: Siamo spiacenti? 749 00:35:50,964 --> 00:35:52,839 PUBBLICO: Scusa, sono solo cercando di ricordare. 750 00:35:52,839 --> 00:35:57,190 Come l'hai fatto, se si può fare automaticamente l'indicizzazione è solo 0 di? 751 00:35:57,190 --> 00:36:00,780 >> MARIA ZLATKOVA: Così come l'hai fatto se non aveste nomi delle chiavi specifiche? 752 00:36:00,780 --> 00:36:01,710 >> PUBBLICO: Sì. 753 00:36:01,710 --> 00:36:07,820 >> MARIA ZLATKOVA: Si sarebbe solo define-- solo dire voi stessi come un nome. 754 00:36:07,820 --> 00:36:17,950 Quindi nel tuo pset, ragazzi potrebbero ricordare $ row foreach da $ righe, 755 00:36:17,950 --> 00:36:24,610 abbiamo creato noi stessi questo $ riga dicendo vogliamo andare attraverso la fila come $ righe. 756 00:36:24,610 --> 00:36:28,360 Anche se non abbiamo avuto questo $ esplicito righe definiti, 757 00:36:28,360 --> 00:36:31,990 possiamo solo andare a dicono che questo può essere la nostra chiave, 758 00:36:31,990 --> 00:36:33,615 e solo passare attraverso ognuno dei valori. 759 00:36:33,615 --> 00:36:37,295 760 00:36:37,295 --> 00:36:41,660 >> PUBBLICO: Quindi è il valore di una nuova variabile stiamo creando per memorizzare [incomprensibile]? 761 00:36:41,660 --> 00:36:46,820 762 00:36:46,820 --> 00:36:49,990 >> MARIA ZLATKOVA: Quindi non è intrinsecamente una nuova variabile. 763 00:36:49,990 --> 00:37:00,310 È una variabile che fa riferimento alla all'interno della matrice a ciascuno di essi. 764 00:37:00,310 --> 00:37:02,060 HANNAH BLUMBERG: E ' un nuovo nome di variabile. 765 00:37:02,060 --> 00:37:04,018 MARIA ZLATKOVA: Sì, si tratta di un nuovo nome di variabile, 766 00:37:04,018 --> 00:37:06,680 ma non è inherently-- sì. 767 00:37:06,680 --> 00:37:08,950 E 'solo una nuova variabile che si può fare. 768 00:37:08,950 --> 00:37:12,680 Così appena come abbiamo fatto noi $ remare da $ righe, righe 769 00:37:12,680 --> 00:37:17,980 era un nuovo nome di variabile che abbiamo potrebbe creare nel nostro ciclo foreach. 770 00:37:17,980 --> 00:37:22,065 Essa non deve preesiste prima. 771 00:37:22,065 --> 00:37:25,777 >> PUBBLICO: Potrebbe passare attraverso la logica per ciascuno, usando l'esempio ci? 772 00:37:25,777 --> 00:37:26,610 MARIA ZLATKOVA: Mhm. 773 00:37:26,610 --> 00:37:31,240 774 00:37:31,240 --> 00:37:32,080 Oh scusa. 775 00:37:32,080 --> 00:37:33,780 Ecco l'esempio. 776 00:37:33,780 --> 00:37:34,280 Certo. 777 00:37:34,280 --> 00:37:38,950 Quindi per ogni array-- così questo significa andare a questo array 778 00:37:38,950 --> 00:37:43,930 come chiave value-- che sta andando passare attraverso questo array 779 00:37:43,930 --> 00:37:49,480 e prima andare a prendere foo, il foo chiave e la barra di valore. 780 00:37:49,480 --> 00:37:51,570 E poi sulla seconda iterazione del ciclo for, 781 00:37:51,570 --> 00:37:55,090 che sta per passare attraverso e prendere il baz chiave e il valore qux. 782 00:37:55,090 --> 00:38:00,512 E poi si può fare qualcosa con uno di essi o entrambi. 783 00:38:00,512 --> 00:38:03,488 >> AUDIENCE: Così l'idea che sta dietro avente un punto chiave per il valore, 784 00:38:03,488 --> 00:38:07,470 che cosa si finisce per l'accesso? 785 00:38:07,470 --> 00:38:10,680 >> MARIA ZLATKOVA: Qual è l'idea di avere una punta chiave per valorizzare? 786 00:38:10,680 --> 00:38:16,400 E 'solo un'altra convenzione, un altro modo di passare attraverso la matrice 787 00:38:16,400 --> 00:38:22,600 ed essere in grado di accedere sia alla chiave o il valore o di entrambi e li usa. 788 00:38:22,600 --> 00:38:27,100 >> PUBBLICO: Qual è il ruolo per il ordinare che il foreach viene eseguito in? 789 00:38:27,100 --> 00:38:29,250 Quindi, se dovessimo aggiungere elementi all'array tardi, 790 00:38:29,250 --> 00:38:32,140 sarebbero quelli essere i primi chiamato nella matrice foreach, 791 00:38:32,140 --> 00:38:33,750 o sarebbe più tardi? 792 00:38:33,750 --> 00:38:37,770 >> MARIA ZLATKOVA: Allora, qual è l'ordine che il foreach 793 00:38:37,770 --> 00:38:39,210 ciclo passa attraverso un array in? 794 00:38:39,210 --> 00:38:42,220 Si passa attraverso il primo elemento all'ultimo elemento, 795 00:38:42,220 --> 00:38:43,400 all'ultimo elemento aggiunto. 796 00:38:43,400 --> 00:38:48,020 Se si aggiungono gli elementi in seguito, avrebbero essere accessed-- i primi elementi sarebbero 797 00:38:48,020 --> 00:38:51,410 accedere come prima elementi dell'array, 798 00:38:51,410 --> 00:38:57,620 e poi devi andare attraverso ciascuno dei gli elementi come una sorta di ordered-- 799 00:38:57,620 --> 00:39:02,930 non un ordinata, ma il modo in cui essi sono stati messi in matrice. 800 00:39:02,930 --> 00:39:06,855 >> PUBBLICO: così nuovi elementi sono aggiunti più tardi? 801 00:39:06,855 --> 00:39:10,680 Così stanno added-- essi saranno il ultimi in [? iterazione. ?] 802 00:39:10,680 --> 00:39:14,280 >> MARIA ZLATKOVA: Nuovi elementi can-- fondamentalmente, quando vengono aggiunti nuovi elementi, 803 00:39:14,280 --> 00:39:16,520 essi vengono aggiunti alla fine della matrice? 804 00:39:16,520 --> 00:39:17,632 >> PUBBLICO: Sì. 805 00:39:17,632 --> 00:39:18,840 MARIA ZLATKOVA: Credo di sì. 806 00:39:18,840 --> 00:39:20,850 Sì. 807 00:39:20,850 --> 00:39:24,330 E poi con il ciclo foreach, dopo aver aggiunto nuovi elementi 808 00:39:24,330 --> 00:39:26,790 e si passa attraverso di loro, i nuovi elementi sarebbero 809 00:39:26,790 --> 00:39:30,930 essere accessed-- il nuovo elemento, se è aggiunto scorso, sarebbe accessibile scorso. 810 00:39:30,930 --> 00:39:34,416 >> PUBBLICO: Si può solo dare un esempio di qualcosa che [incomprensibile] 811 00:39:34,416 --> 00:39:37,404 con qualcosa di valore come [incomprensibile] o valore, 812 00:39:37,404 --> 00:39:38,910 Come come si sarebbe formato? 813 00:39:38,910 --> 00:39:39,785 >> MARIA ZLATKOVA: Certo. 814 00:39:39,785 --> 00:39:42,340 815 00:39:42,340 --> 00:39:46,410 Posso dare un esempio di ciò che vorremmo fare con il valore? 816 00:39:46,410 --> 00:39:52,440 Così che cosa voi ragazzi potrebbe avere familiarità con è che siamo passati attraverso una serie 817 00:39:52,440 --> 00:39:55,380 e fondamentalmente stampato ciascuno degli elementi, 818 00:39:55,380 --> 00:40:00,910 per esempio, come parte di un elenco ordinato o qualcosa che. 819 00:40:00,910 --> 00:40:02,674 Questo fa senso o vogliamo a-- 820 00:40:02,674 --> 00:40:04,340 PUBBLICO: Possiamo stampare questi valori fuori? 821 00:40:04,340 --> 00:40:13,220 MARIA ZLATKOVA: Sì, potremmo stampare e poi fondamentalmente $ valore perché in 822 00:40:13,220 --> 00:40:16,570 tale valore specifico, ci sarebbe stampare il valore all'interno di esso. 823 00:40:16,570 --> 00:40:20,150 Quindi, se fossimo alla nostra prima iterazione di esso e abbiamo stampato $ value, 824 00:40:20,150 --> 00:40:23,775 saremmo stampiamo bar. 825 00:40:23,775 --> 00:40:27,020 >> PUBBLICO: sono ci sono anche per loop in PHP o solo loop foreach? 826 00:40:27,020 --> 00:40:30,430 >> MARIA ZLATKOVA: Non c'è anche per i cicli in PHP. 827 00:40:30,430 --> 00:40:33,399 E la loro logica è per lo più il stesso di quello che siete stati abituati. 828 00:40:33,399 --> 00:40:34,690 PUBBLICO: Quindi il suo valore è nullo. 829 00:40:34,690 --> 00:40:35,090 MARIA ZLATKOVA: E 'come la stessa. 830 00:40:35,090 --> 00:40:35,590 Già. 831 00:40:35,590 --> 00:40:37,747 PUBBLICO: Sto solo andando a chiedere. 832 00:40:37,747 --> 00:40:39,695 Quindi, quando si dichiara un array, non è necessario 833 00:40:39,695 --> 00:40:42,617 per dire che dimensione sta andando essere, il che significa che si può solo 834 00:40:42,617 --> 00:40:44,417 aggiungere e togliere elementi [incomprensibile]. 835 00:40:44,417 --> 00:40:45,250 MARIA ZLATKOVA: Yup. 836 00:40:45,250 --> 00:40:45,750 Sì. 837 00:40:45,750 --> 00:40:46,251 Di preciso. 838 00:40:46,251 --> 00:40:48,875 Quando si dichiara un array, abbiamo non c'è bisogno di dire che cosa dimensioni, è, 839 00:40:48,875 --> 00:40:51,022 in modo che possiamo solo aggiungere elementi su di esso in seguito pure. 840 00:40:51,022 --> 00:40:55,075 841 00:40:55,075 --> 00:40:55,700 Altre domande? 842 00:40:55,700 --> 00:40:59,870 843 00:40:59,870 --> 00:41:05,950 Così portando PHP e HTML insieme, ciò che abbiamo seen-- bene, 844 00:41:05,950 --> 00:41:15,130 per esempio, in questo esempio, abbiamo un modulo HTML che dispone di un campo di input. 845 00:41:15,130 --> 00:41:18,830 >> E il campo di input è solo nome e poi ha un pulsante Invia. 846 00:41:18,830 --> 00:41:26,040 E quando si preme il Submit Pulsante, nel nostro file hello.php, 847 00:41:26,040 --> 00:41:32,130 perché il metodo per la forma è ottenere, si può accedere a tutto ciò che è nome 848 00:41:32,130 --> 00:41:40,360 da questo ottenere variabile globale che è-- la sintassi perché è $ _GET. 849 00:41:40,360 --> 00:41:44,520 E poi siamo in grado di accedere in qualsiasi input dell'utente all'interno di quella forma per nome 850 00:41:44,520 --> 00:41:47,410 specificando il nome di quel campo. 851 00:41:47,410 --> 00:41:51,480 852 00:41:51,480 --> 00:41:55,060 >> Tutte le altre domande o qualunque domande su questo esempio specifico? 853 00:41:55,060 --> 00:41:58,275 >> PUBBLICO: Dove si trova il PHP? 854 00:41:58,275 --> 00:41:59,150 MARIA ZLATKOVA: Qui. 855 00:41:59,150 --> 00:42:01,150 Quindi questo è il nostro tag di apertura per il PHP. 856 00:42:01,150 --> 00:42:01,530 >> PUBBLICO: Oh, giusto. 857 00:42:01,530 --> 00:42:02,363 >> MARIA ZLATKOVA: Sì. 858 00:42:02,363 --> 00:42:05,320 859 00:42:05,320 --> 00:42:09,609 >> HANNAH BLUMBERG: Il = è stenografia per questo è PHP e proprio eco. 860 00:42:09,609 --> 00:42:10,150 PUBBLICO: Oh. 861 00:42:10,150 --> 00:42:10,720 MARIA ZLATKOVA: Sì, mi dispiace. 862 00:42:10,720 --> 00:42:12,040 Avrei dovuto chiaro. 863 00:42:12,040 --> 00:42:13,759 >> HANNAH BLUMBERG: Stampa. 864 00:42:13,759 --> 00:42:16,800 MARIA ZLATKOVA: E 'solo la funzione di che ci permette di stampare qualcosa. 865 00:42:16,800 --> 00:42:19,795 866 00:42:19,795 --> 00:42:20,420 Grande domanda. 867 00:42:20,420 --> 00:42:24,140 868 00:42:24,140 --> 00:42:25,495 Così going-- sì. 869 00:42:25,495 --> 00:42:31,940 >> PUBBLICO: ci sarà abbastanza un po 'di codifica manuale di PHP e HTML 870 00:42:31,940 --> 00:42:33,450 il quiz 1? 871 00:42:33,450 --> 00:42:36,310 872 00:42:36,310 --> 00:42:38,810 MARIA ZLATKOVA: Ci può essere un buona dose di interpretazione 873 00:42:38,810 --> 00:42:43,330 PHP e HTML, non necessariamente come una quantità enorme di codifica, 874 00:42:43,330 --> 00:42:46,960 anche se potrebbe essere necessario scrivere un ciclo foreach, però, un ciclo for. 875 00:42:46,960 --> 00:42:49,790 Qualsiasi delle anse che coprire qui è un gioco equo. 876 00:42:49,790 --> 00:42:51,889 E questo è in gran parte di esso. 877 00:42:51,889 --> 00:42:53,430 HANNAH BLUMBERG: mi sarebbe disposto. 878 00:42:53,430 --> 00:42:57,010 Nello stesso modo in cui vi abbiamo chiesto di scrivere un sacco di funzioni C su quiz 0, 879 00:42:57,010 --> 00:42:59,766 Sarei disposta a fare stesso in PHP e JavaScript. 880 00:42:59,766 --> 00:43:00,640 MARIA ZLATKOVA: Sì. 881 00:43:00,640 --> 00:43:03,210 HANNAH BLUMBERG: Direi un little-- come noi non siamo 882 00:43:03,210 --> 00:43:06,251 andando a fare si scrive un enorme HTML pagina solo perché questo è un po ' 883 00:43:06,251 --> 00:43:08,240 noioso, ma si potrebbe avere parti. 884 00:43:08,240 --> 00:43:09,310 Questo è del tutto giusto gioco. 885 00:43:09,310 --> 00:43:11,082 Come piccola pagina HTML, totalmente fiera. 886 00:43:11,082 --> 00:43:11,623 PUBBLICO: OK. 887 00:43:11,623 --> 00:43:13,814 Che ne dite in JavaScript come bene? 888 00:43:13,814 --> 00:43:14,730 HANNAH BLUMBERG: Sì. 889 00:43:14,730 --> 00:43:15,250 Fair Game di JavaScript. 890 00:43:15,250 --> 00:43:15,635 >> MARIA ZLATKOVA: Sì. 891 00:43:15,635 --> 00:43:16,801 Questo è completamente gioco equo. 892 00:43:16,801 --> 00:43:19,280 HANNAH BLUMBERG: Otterremo a quello come 10 minuti. 893 00:43:19,280 --> 00:43:23,750 >> MARIA ZLATKOVA: SQL, ancora una volta, Structured Query Language. 894 00:43:23,750 --> 00:43:28,651 Esso permette in sostanza di gestire i dati in una gestione di database relazionali 895 00:43:28,651 --> 00:43:29,150 sistema. 896 00:43:29,150 --> 00:43:31,149 Ciò significa che solo in fondo che abbiamo da qualche parte 897 00:43:31,149 --> 00:43:37,980 per memorizzare alcuni dati che si potrebbe desiderare di utilizzare in un sito o in qualche altra forma. 898 00:43:37,980 --> 00:43:42,190 E poi abbiamo query per ottenere informazioni dal nostro database, 899 00:43:42,190 --> 00:43:44,320 oppure per inserire le informazioni in esse. 900 00:43:44,320 --> 00:43:47,560 Un sacco di UPDATE ones-- comuni, INSERT, SELECT e DELETE. 901 00:43:47,560 --> 00:43:50,790 >> Così per UPDATE, questo è la sintassi per l'aggiornamento di dati in un database. 902 00:43:50,790 --> 00:43:53,330 903 00:43:53,330 --> 00:43:57,340 Aggiornando questa tabella denominata tavolo dicendo SET, 904 00:43:57,340 --> 00:44:04,170 siamo in grado di impostare alcuni valori in tutto righe alla parità di qualcosa d'altro. 905 00:44:04,170 --> 00:44:09,410 Così possiamo anche specificare alcune specifiche voci che vogliamo modificare 906 00:44:09,410 --> 00:44:11,240 e che può essere utilizzando WHERE. 907 00:44:11,240 --> 00:44:16,380 E possiamo specificare che vogliamo solo modificare alcune righe in cui la casa per, 908 00:44:16,380 --> 00:44:19,830 se abbiamo avuto un tavolo di studenti e tutti gli studenti avevano casa, 909 00:44:19,830 --> 00:44:24,890 così avremmo modificare solo alcuni valori dove una casa è uguale a Currier, 910 00:44:24,890 --> 00:44:25,430 per esempio. 911 00:44:25,430 --> 00:44:29,120 912 00:44:29,120 --> 00:44:31,800 >> Per INSERT, possiamo inserire certi valori in una tabella. 913 00:44:31,800 --> 00:44:35,150 Quindi inserire dati nella tabella, e poi i valori, 914 00:44:35,150 --> 00:44:39,080 e poi tra parentesi, specifichiamo che i valori si desidera inserire. 915 00:44:39,080 --> 00:44:43,220 Così INSERT INTO tavolo, col1 e col2, il valore è val1 e val2. 916 00:44:43,220 --> 00:44:48,930 Quindi, questo inserisce in pratica una nuova riga nella una tabella contenente i valori 1 e 2 917 00:44:48,930 --> 00:44:50,850 sotto le colonne 1 e 2. 918 00:44:50,850 --> 00:44:54,760 >> E poi stiamo per andare oltre un rapido esempio di come questo aspetto 919 00:44:54,760 --> 00:44:56,310 come in un po 'nostro database. 920 00:44:56,310 --> 00:44:58,685 Ma questa domanda finale che mi che stiamo andando ad andare oltre, 921 00:44:58,685 --> 00:45:01,450 SELECT, ci permette solo per selezionare i dati da una tabella 922 00:45:01,450 --> 00:45:03,080 utilizzare eventualmente in seguito. 923 00:45:03,080 --> 00:45:05,830 E il modo in cui lo facciamo è che appena memorizzarlo in una variabile. 924 00:45:05,830 --> 00:45:07,780 E allora possiamo eventualmente utilizzare di nuovo. 925 00:45:07,780 --> 00:45:10,260 >> Così SELEZIONA stella significa selezionare tutto. 926 00:45:10,260 --> 00:45:13,280 Questo è solo una scorciatoia per la selezione di tutti. 927 00:45:13,280 --> 00:45:19,760 FROM tabella WHERE, siamo alla ricerca per alcune specifiche condizioni, 928 00:45:19,760 --> 00:45:22,290 così dove la colonna è uguale qualcosa, per esempio. 929 00:45:22,290 --> 00:45:24,410 Se volevamo solo seleziona tutto da tavolo, 930 00:45:24,410 --> 00:45:28,400 questo seleziona solo tutte le colonne e tutte le righe da una tabella. 931 00:45:28,400 --> 00:45:32,040 >> E poi DELETE FROM tabella DOVE col uguale a qualcosa, 932 00:45:32,040 --> 00:45:36,440 questo solo elimina alcuni riga dal nostro tavolo 933 00:45:36,440 --> 00:45:38,860 dove abbiamo alcune condizioni specifiche. 934 00:45:38,860 --> 00:45:41,870 In questo caso, le condizioni sono colonna uguale qualcosa. 935 00:45:41,870 --> 00:45:43,460 Quindi, solo un rapido esempio di questo. 936 00:45:43,460 --> 00:45:49,100 Se abbiamo questo tavolo qui e noi inserirlo in una tabella, questi valori, 937 00:45:49,100 --> 00:45:50,400 che sarebbe inserire una nuova riga. 938 00:45:50,400 --> 00:45:56,380 E se avessimo incremento automatico, questo sarebbe basta incrementare nostro ID da 0 a 1 per 2. 939 00:45:56,380 --> 00:46:00,010 >> Se abbiamo selezionato tutto da parte degli studenti che, semplicemente restituisce tutti i campi e tutte le righe. 940 00:46:00,010 --> 00:46:02,430 Dove anno è maggiore o uguale a 2016, 941 00:46:02,430 --> 00:46:04,390 che sarebbe solo tornare Hannah e me stesso. 942 00:46:04,390 --> 00:46:08,360 E poi se abbiamo appena selezionato id anno e l'anno da parte degli studenti 943 00:46:08,360 --> 00:46:11,710 dove la casa è Cabot House, che sarebbe, ancora una volta, tornare Hannah e me stesso. 944 00:46:11,710 --> 00:46:14,430 >> Poi se abbiamo cancellato dagli studenti dove nome è uguale a Rob, 945 00:46:14,430 --> 00:46:16,760 che sarebbe cancellare l'intera riga. 946 00:46:16,760 --> 00:46:19,696 E poi se si imposta la nome, studenti UPDATE 947 00:46:19,696 --> 00:46:21,570 Nome SET equivale a Daven DOVE casa è uguale 948 00:46:21,570 --> 00:46:27,010 Cabot House, che sta per andare a le righe e quindi aggiornare il nome. 949 00:46:27,010 --> 00:46:31,470 >> E poi un paio di tipi di dati SQL sono CHAR, VARCHAR, INT, e FLOAT. 950 00:46:31,470 --> 00:46:32,760 Si tratta di gioco equo. 951 00:46:32,760 --> 00:46:36,740 Vorrei andare di nuovo e assicurarsi di sapere 952 00:46:36,740 --> 00:46:40,930 e li hanno sul foglietto, ciò che ciascuno di quei personaggi 953 00:46:40,930 --> 00:46:44,140 sono stati utilizzati per, cosa li usato sui vostri pset, 954 00:46:44,140 --> 00:46:48,050 e assicurarsi che si ha familiarità e comodo con dover scegliere 955 00:46:48,050 --> 00:46:51,450 da diversi tipi di dati in vostro pset. 956 00:46:51,450 --> 00:46:51,950 Sì. 957 00:46:51,950 --> 00:46:54,300 >> PUBBLICO: Che cosa è stato memorizzato quel tavolo? 958 00:46:54,300 --> 00:46:57,119 Gia ', in cui è memorizzato questo tavolo? 959 00:46:57,119 --> 00:46:59,160 MARIA ZLATKOVA: Beh, in questo momento, non è memorizzato. 960 00:46:59,160 --> 00:47:00,700 In ogni caso, in cui è memorizzato questo tavolo? 961 00:47:00,700 --> 00:47:04,503 Ma può essere memorizzato in un database SQL. 962 00:47:04,503 --> 00:47:07,330 >> PUBBLICO: E dove è il database SQL? 963 00:47:07,330 --> 00:47:11,200 Nel computer, linea da qualche parte, il server? 964 00:47:11,200 --> 00:47:15,000 >> MARIA ZLATKOVA: Può essere un numero di cose diverse. 965 00:47:15,000 --> 00:47:19,690 >> HANNAH BLUMBERG: Abbiamo interfacciato con Tabelle SQL per lo più con phpMyAdmin. 966 00:47:19,690 --> 00:47:22,060 Così abbiamo potuto chiedere un server memorizzarli per noi. 967 00:47:22,060 --> 00:47:23,830 Potremmo memorizzare sul nostro computer. 968 00:47:23,830 --> 00:47:27,950 >> MARIA ZLATKOVA: Dipende solo su come vuoi farlo per te. 969 00:47:27,950 --> 00:47:30,075 Ma abbiamo conservato li, come Hannah accennato, 970 00:47:30,075 --> 00:47:31,755 su phpMyAdmin, che è in linea. 971 00:47:31,755 --> 00:47:36,550 972 00:47:36,550 --> 00:47:39,280 E poi il modo in cui usiamo PHP e SQL, noi conservarlo 973 00:47:39,280 --> 00:47:43,450 in qualche variabile quello che abbiamo interrogato per. 974 00:47:43,450 --> 00:47:48,370 >> Quindi, se Seleziona tutto dal storia dove user_id è uguale al ID di sessione, 975 00:47:48,370 --> 00:47:53,900 che avrebbe selezionare tutte le righe per la persona specifica che 976 00:47:53,900 --> 00:47:58,327 viene registrato nel dalla storia tavolo e ordinarli in righe. 977 00:47:58,327 --> 00:48:00,410 Un 'interessante da sapere è che la funzione di query di CS50 978 00:48:00,410 --> 00:48:02,180 protegge contro i tag di SQL injection. 979 00:48:02,180 --> 00:48:07,420 Questo significa solo che si assicura l'input che viene inserito è corretto 980 00:48:07,420 --> 00:48:09,920 e che la persona che sta entrando ingresso 981 00:48:09,920 --> 00:48:15,100 Non sta cercando di inserire qualche maligno codice a uno cadere nostre tavole 982 00:48:15,100 --> 00:48:17,305 o cancellare tutto all'interno del nostro database. 983 00:48:17,305 --> 00:48:20,060 984 00:48:20,060 --> 00:48:23,400 >> Una rapida panoramica della Modello Model View Controller, 985 00:48:23,400 --> 00:48:27,360 è solo un modo di organizzare e pensare a codice. 986 00:48:27,360 --> 00:48:29,100 E 'ancora una volta, un paradigma di progettazione. 987 00:48:29,100 --> 00:48:33,380 Ciò significa che noi can-- ed è buona pratica 988 00:48:33,380 --> 00:48:37,790 separare parti differenti del nostro codice e quello che 989 00:48:37,790 --> 00:48:40,530 controllare in questi tre paradigmi. 990 00:48:40,530 --> 00:48:46,700 >> Così il nostro punto di vista è il più delle volte il nostro modelli, il nostro layout, il modo in cui 991 00:48:46,700 --> 00:48:48,260 che ci siamo posti come il nostro codice è. 992 00:48:48,260 --> 00:48:55,190 Questo è per lo più i nostri file CSS e il modo che abbiamo definito il disegno del nostro codice, 993 00:48:55,190 --> 00:48:55,710 fondamentalmente. 994 00:48:55,710 --> 00:48:59,280 Il nostro controllo è in gran parte quello che abbiamo fatto con i file PHP. 995 00:48:59,280 --> 00:49:03,030 Quindi, di nuovo, lavorando con il informazioni che abbiamo 996 00:49:03,030 --> 00:49:06,700 e definire come tale informazioni sono utilizzate, 997 00:49:06,700 --> 00:49:10,660 e poi passare le informazioni sia sulla la vista o il modello. 998 00:49:10,660 --> 00:49:13,880 E il modello, il modo in cui abbiamo state utilizzando è è stata la nostra base di dati, 999 00:49:13,880 --> 00:49:17,510 così dove la nostra informazione è memorizzata quindi ha qualche parte 1000 00:49:17,510 --> 00:49:21,490 a vivere, con una delle caratteristiche codice che si riferisce al modo in cui 1001 00:49:21,490 --> 00:49:25,410 che otteniamo che le informazioni o il modo che aggiorniamo tali informazioni. 1002 00:49:25,410 --> 00:49:28,940 1003 00:49:28,940 --> 00:49:33,200 >> Così nel modello MVC, HTTP le richieste vengono inviate a un server web. 1004 00:49:33,200 --> 00:49:36,220 Poi, le interpreta regolatore la richiesta da parte dell'utente 1005 00:49:36,220 --> 00:49:38,260 e poi convalida l'input dell'utente. 1006 00:49:38,260 --> 00:49:41,580 E 'opzionale che abbiamo il controllore comunica 1007 00:49:41,580 --> 00:49:44,000 con un modello, quindi qualcosa come nostro database 1008 00:49:44,000 --> 00:49:47,500 o qualche altra funzionalità che trasmette informazioni. 1009 00:49:47,500 --> 00:49:50,340 E infine, il controllore passa informazioni sulla vista 1010 00:49:50,340 --> 00:49:52,090 in modo che possa essere resa e che si può 1011 00:49:52,090 --> 00:49:55,860 diventare visibile a qualsiasi persona l'accesso alla pagina web. 1012 00:49:55,860 --> 00:49:58,440 1013 00:49:58,440 --> 00:50:01,340 >> Qualsiasi domanda? 1014 00:50:01,340 --> 00:50:01,840 Eccezionale. 1015 00:50:01,840 --> 00:50:04,530 1016 00:50:04,530 --> 00:50:08,469 Così ancora una volta, il modello, la sua funzione, di nuovo, 1017 00:50:08,469 --> 00:50:11,260 è memoria persistente di informazioni, la gestione e l'organizzazione dei dati. 1018 00:50:11,260 --> 00:50:13,890 E quello che abbiamo visto così di gran lunga è il database MySQL 1019 00:50:13,890 --> 00:50:16,200 e tutti i file di dati che possono utilizzare. 1020 00:50:16,200 --> 00:50:20,580 >> Vista, la presentazione di informazioni per l'utente, l'interfaccia utente, o l'interfaccia utente. 1021 00:50:20,580 --> 00:50:22,350 E l'esempio di questo è HTML. 1022 00:50:22,350 --> 00:50:23,950 E allora potremmo avere minimo PHP. 1023 00:50:23,950 --> 00:50:28,360 Quindi un ciclo for che scorre sui dati che vengono stampati fuori 1024 00:50:28,360 --> 00:50:30,720 è parte della vista, come opposto al regolatore. 1025 00:50:30,720 --> 00:50:35,660 E poi un sacco di nostri file PHP rientrano nella categoria di controllo. 1026 00:50:35,660 --> 00:50:38,410 Gestisce solo le richieste degli utenti e ottiene informazioni dal modello. 1027 00:50:38,410 --> 00:50:42,880 1028 00:50:42,880 --> 00:50:45,590 >> Saltando nel Documento Object Model, questo solo 1029 00:50:45,590 --> 00:50:47,700 si riferisce al modo HTML i documenti sono organizzati. 1030 00:50:47,700 --> 00:50:51,600 E sono organizzati in un albero struttura che ha una gerarchia. 1031 00:50:51,600 --> 00:50:56,720 Quindi, se abbiamo accesso a [incomprensibile] rappresentazione del documento, 1032 00:50:56,720 --> 00:51:02,750 possiamo lavorare con il documento, come noi manipoliamo oggetti fondamentalmente. 1033 00:51:02,750 --> 00:51:06,630 >> E per rendere questo un po 'più chiaro, quando 1034 00:51:06,630 --> 00:51:10,540 abbiamo un sacco di nostra diversi tag rispondono 1035 00:51:10,540 --> 00:51:12,590 per percorsi diversi nel nostro albero. 1036 00:51:12,590 --> 00:51:17,070 E poi per questo esempio, avere il nodo documento di partenza. 1037 00:51:17,070 --> 00:51:20,010 Abbiamo, dunque, il nostro nodo HTML che si divide in testa e il corpo. 1038 00:51:20,010 --> 00:51:22,810 Head ha titolo e poi titolo contiene ciao, mondo. 1039 00:51:22,810 --> 00:51:24,860 E il nostro corpo contiene solo ciao, mondo pure. 1040 00:51:24,860 --> 00:51:28,700 1041 00:51:28,700 --> 00:51:31,900 >> Quindi tutte le domande su una delle cose che abbiamo coperto finora? 1042 00:51:31,900 --> 00:51:35,891 E se no, Hannah sarà prendere il sopravvento con JavaScript. 1043 00:51:35,891 --> 00:51:36,390 Eccezionale. 1044 00:51:36,390 --> 00:51:37,473 >> HANNAH BLUMBERG: OK, fresco. 1045 00:51:37,473 --> 00:51:40,980 Se qualcosa si presenta con PHP o HTML, o qualsiasi delle cose Maria coperto, 1046 00:51:40,980 --> 00:51:42,700 possiamo sempre mettere in pausa. 1047 00:51:42,700 --> 00:51:46,430 Stiamo facendo meglio su più volte, in modo impressionante. 1048 00:51:46,430 --> 00:51:48,770 E proprio per tornare indietro molto velocemente a questa, 1049 00:51:48,770 --> 00:51:51,010 se si guarda a ogni Esame anno passato, questo 1050 00:51:51,010 --> 00:51:54,120 esce either-- ecco alcuni HTML, fanno di questo schema. 1051 00:51:54,120 --> 00:51:58,380 Oppure ecco questo diagramma, fare un po ' HTML, quindi sicuramente pratica che. 1052 00:51:58,380 --> 00:52:01,500 E poi questa è una garantita solo domanda che si può ottenere. 1053 00:52:01,500 --> 00:52:02,000 Raffreddare. 1054 00:52:02,000 --> 00:52:04,510 Quindi parliamo di JavaScript e come è un po ' 1055 00:52:04,510 --> 00:52:09,130 diverso da linguaggi come PHP e C, le due lingue che abbiamo visto in precedenza. 1056 00:52:09,130 --> 00:52:10,780 Così il numero uno, è liberamente digitato. 1057 00:52:10,780 --> 00:52:14,630 Cioè come PHP, ma a differenza di C. 1058 00:52:14,630 --> 00:52:15,890 >> E 'un linguaggio interpretato. 1059 00:52:15,890 --> 00:52:19,870 Anche in questo caso, che è come PHP, a differenza C. E questo 1060 00:52:19,870 --> 00:52:24,630 sta per permetterci di use-- esso funziona davvero bene con le pagine web. 1061 00:52:24,630 --> 00:52:28,350 E 'intenzione di consentire di manipolare il contenuto e come appare 1062 00:52:28,350 --> 00:52:30,300 e cosa fa. 1063 00:52:30,300 --> 00:52:32,330 >> Stiamo andando a vedere un po 'di Ajax. 1064 00:52:32,330 --> 00:52:36,140 Esso ci permette di comunicare in modo asincrono con diversi server 1065 00:52:36,140 --> 00:52:37,950 e ottenere informazioni. 1066 00:52:37,950 --> 00:52:42,820 E questa è la cosa che davvero separa Javascript da PHP e C 1067 00:52:42,820 --> 00:52:45,590 è che è lato client. 1068 00:52:45,590 --> 00:52:49,860 Sia PHP e C sono tipicamente sul lato server. 1069 00:52:49,860 --> 00:52:51,960 >> Per la maggior parte, e quasi interamente quello 1070 00:52:51,960 --> 00:52:53,900 abbiamo visto, almeno in questa classe, JavaScript 1071 00:52:53,900 --> 00:52:57,040 agisce sul lato client, il che significa che il browser è in realtà 1072 00:52:57,040 --> 00:52:58,597 responsabile per la sua esecuzione. 1073 00:52:58,597 --> 00:53:01,180 E questo significa che non lo facciamo necessario interagire con il server. 1074 00:53:01,180 --> 00:53:04,380 Quindi significa che può essere molto più veloce perché in realtà è solo che è Chrome, 1075 00:53:04,380 --> 00:53:10,420 è Safari, è Firefox, qualunque cosa utilizzare effettivamente in esecuzione il tuo JavaScript. 1076 00:53:10,420 --> 00:53:12,290 >> PUBBLICO: Cosa asincrono significa? 1077 00:53:12,290 --> 00:53:13,620 >> HANNAH BLUMBERG: Ah, cosa non in modo asincrono significa? 1078 00:53:13,620 --> 00:53:14,250 Grande domanda. 1079 00:53:14,250 --> 00:53:17,890 Asincrono means-- bene, il contenuto in cui 1080 00:53:17,890 --> 00:53:22,140 usiamo lo è, OK, abbiamo stanno creando una pagina web 1081 00:53:22,140 --> 00:53:23,860 e abbiamo bisogno di ottenere alcune informazioni. 1082 00:53:23,860 --> 00:53:28,250 Quindi, con l'esempio di mashup, alcune informazioni che si potrebbe desiderare 1083 00:53:28,250 --> 00:53:30,580 è titoli degli articoli. 1084 00:53:30,580 --> 00:53:33,330 Ora, noi could-- un'opzione è quello di farlo in modo sincrono 1085 00:53:33,330 --> 00:53:37,940 e questo significa LET'S fermare, andare a prendere l'articolo, 1086 00:53:37,940 --> 00:53:41,275 ottenere la schiena articolo, e poi rendering, ma che sarebbe molto lento. 1087 00:53:41,275 --> 00:53:44,150 Questa sarebbe una brutta esperienza utente perché si sarebbe solo essere seduto 1088 00:53:44,150 --> 00:53:46,630 lì in attesa di qualcosa da rispondere. 1089 00:53:46,630 --> 00:53:50,020 >> Significa asincrono faremo continuare ad andare sulla nostra attività, 1090 00:53:50,020 --> 00:53:52,529 il rendering della pagina, e ti invieremo una richiesta via 1091 00:53:52,529 --> 00:53:54,570 Questo è il tipo di andare a accadere in background. 1092 00:53:54,570 --> 00:53:57,610 Penso che usiamo l'esempio lezione di chiamare Rob e dicendo: 1093 00:53:57,610 --> 00:53:59,980 Ehi, puoi guardare questo in su per me e tornare a me, 1094 00:53:59,980 --> 00:54:02,870 in contrasto con appena me in attesa al telefono. 1095 00:54:02,870 --> 00:54:07,020 Quindi significa asincrono succede in background lontano da noi 1096 00:54:07,020 --> 00:54:08,676 in parallelo. 1097 00:54:08,676 --> 00:54:10,400 >> Grande domanda. 1098 00:54:10,400 --> 00:54:11,830 Qualunque altra cosa? 1099 00:54:11,830 --> 00:54:12,330 Grande. 1100 00:54:12,330 --> 00:54:15,020 Faremo saltare molto più in richieste asincrone con l'Ajax. 1101 00:54:15,020 --> 00:54:18,287 >> PUBBLICO: Fa Javascript-- da dove viene cadere con il modello-View-Controller? 1102 00:54:18,287 --> 00:54:19,620 HANNAH BLUMBERG: Grande domanda. 1103 00:54:19,620 --> 00:54:23,320 Da dove viene JavaScript caduta con il modello-View-Controller? 1104 00:54:23,320 --> 00:54:23,930 Hm. 1105 00:54:23,930 --> 00:54:28,350 Immagino che possa fall-- quindi non solito fare 1106 00:54:28,350 --> 00:54:31,340 piacerebbe squish in che paradigma, ma credo che vorrei dire, 1107 00:54:31,340 --> 00:54:34,280 OK, così JavaScript in realtà sta per consentire 1108 00:54:34,280 --> 00:54:37,587 di raccogliere dati, interpretare i dati, effettivamente fare 1109 00:54:37,587 --> 00:54:38,920 cose significative con i dati. 1110 00:54:38,920 --> 00:54:41,100 In questo modo, è molto simile a controllo. 1111 00:54:41,100 --> 00:54:43,900 >> Ma è anche andando a permetterci di visualizzare le cose e le cose di stampa. 1112 00:54:43,900 --> 00:54:47,021 In questo modo, è molto simile a vista. 1113 00:54:47,021 --> 00:54:47,520 Già. 1114 00:54:47,520 --> 00:54:51,710 Quindi è un po 'come in PHP dove può essere sia di tipo. 1115 00:54:51,710 --> 00:54:53,330 Bella domanda. 1116 00:54:53,330 --> 00:54:55,209 Qualunque altra cosa? 1117 00:54:55,209 --> 00:54:56,000 Va bene, impressionante. 1118 00:54:56,000 --> 00:54:57,120 Spostare a destra lungo. 1119 00:54:57,120 --> 00:54:59,110 >> Vediamo quindi un esempio di come possiamo utilizzare 1120 00:54:59,110 --> 00:55:02,250 JavaScript in uno dei nostri programmi web. 1121 00:55:02,250 --> 00:55:05,680 Così io considero questo index.html con un mazzo di HTML. 1122 00:55:05,680 --> 00:55:08,800 E la cosa che si vuole concentrarsi su questo tag script. 1123 00:55:08,800 --> 00:55:13,280 E questo la dice, OK, voglio correre qualche JavaScript e qui è dove vive. 1124 00:55:13,280 --> 00:55:15,400 Vive in hello.js. 1125 00:55:15,400 --> 00:55:21,120 >> E molto simile a CSS, potremmo mettere JavaScript all'interno del codice HTML. 1126 00:55:21,120 --> 00:55:24,000 Perché si potrebbe desiderare di separare fuori? 1127 00:55:24,000 --> 00:55:24,500 Già. 1128 00:55:24,500 --> 00:55:25,486 >> PUBBLICO: Più facile da riscrivere? 1129 00:55:25,486 --> 00:55:26,402 >> HANNAH BLUMBERG: Sì. 1130 00:55:26,402 --> 00:55:28,450 E 'più facile da usare attraverso diverse pagine web. 1131 00:55:28,450 --> 00:55:29,980 Essa mantiene le cose più pulito. 1132 00:55:29,980 --> 00:55:32,090 E 'solo una buona pratica. 1133 00:55:32,090 --> 00:55:32,590 Eccezionale. 1134 00:55:32,590 --> 00:55:33,930 Buona risposta. 1135 00:55:33,930 --> 00:55:36,690 Così bene, quindi questo sta andando per essere il nostro index.html. 1136 00:55:36,690 --> 00:55:39,430 E poi qui è la nostra piccolo piccolo file JavaScript. 1137 00:55:39,430 --> 00:55:42,410 >> E tutto ciò che dice è vigile Ciao, mondo. 1138 00:55:42,410 --> 00:55:46,040 Che cosa accade è quando questa pagina renders-- 1139 00:55:46,040 --> 00:55:49,680 quindi se andate a qualunque sito web questo è-- tutto quello che sta per accadere 1140 00:55:49,680 --> 00:55:53,330 è che sta per dire, OK, io sono andando a eseguire questo codice JavaScript. 1141 00:55:53,330 --> 00:55:56,370 E questo codice JavaScript dice solo allarme Ciao, mondo. 1142 00:55:56,370 --> 00:55:59,090 Quindi ho intenzione di ottenere questo accogliente piccolo pop-up. 1143 00:55:59,090 --> 00:56:00,360 >> Raffreddare? 1144 00:56:00,360 --> 00:56:04,746 Questo è un po 'come il nostro molto prima JavaScript programma, il nostro Ciao, mondo. 1145 00:56:04,746 --> 00:56:07,690 1146 00:56:07,690 --> 00:56:12,190 Guardiamo un po 'di più su ciò che la sintassi di JavaScript sembra. 1147 00:56:12,190 --> 00:56:16,330 E in particolare, confrontiamo a C e PHP, che abbiamo visto prima. 1148 00:56:16,330 --> 00:56:20,610 >> In JavaScript, stiamo andando ad avere var, il nome della variabile, e quindi 1149 00:56:20,610 --> 00:56:21,690 il suo valore attuale. 1150 00:56:21,690 --> 00:56:26,170 E noi non specifichiamo un tipo, semplicemente come in PHP, ma molto diverso in C. 1151 00:56:26,170 --> 00:56:28,850 Così, per esempio, se volessimo memorizzare il valore 50, 1152 00:56:28,850 --> 00:56:32,490 in C, ci sarebbe da dire, ehi, C, io voglio un intero, 1153 00:56:32,490 --> 00:56:35,076 Io vado a chiamare i, e il suo valore è di 50. 1154 00:56:35,076 --> 00:56:36,450 In PHP, è un po 'più facile. 1155 00:56:36,450 --> 00:56:41,880 Noi diciamo, ehi, io voglio una variabile chiamato i e il suo valore è 50. 1156 00:56:41,880 --> 00:56:45,890 Molto simile, in JavaScript, abbiamo dire ehi, io voglio una variabile denominata i, 1157 00:56:45,890 --> 00:56:47,080 il suo valore è 50. 1158 00:56:47,080 --> 00:56:52,140 Ogni volta successiva che uso Io, non ho bisogno di scrivere var. 1159 00:56:52,140 --> 00:56:53,810 E 'solo che da quel punto in poi. 1160 00:56:53,810 --> 00:56:58,660 Allo stesso modo, in C, dove una volta diciamo int i, usiamo solo i. 1161 00:56:58,660 --> 00:57:00,340 Raffreddare? 1162 00:57:00,340 --> 00:57:01,800 Tutto ok. 1163 00:57:01,800 --> 00:57:03,710 >> Passando alle reti, per fortuna, questi quasi 1164 00:57:03,710 --> 00:57:06,720 Guardo exactly-- Penso che siano esattamente la stessa cosa 1165 00:57:06,720 --> 00:57:09,799 cicli stanno andando a guardare come in qualcosa come C dove il vostro ciclo for 1166 00:57:09,799 --> 00:57:11,840 sta per avere tre parts-- una inizializzazione, 1167 00:57:11,840 --> 00:57:13,640 una condizione, e un aggiornamento. 1168 00:57:13,640 --> 00:57:15,340 Un ciclo while, sembra esattamente lo stesso. 1169 00:57:15,340 --> 00:57:16,390 Abbiamo appena diamo una condizione. 1170 00:57:16,390 --> 00:57:18,264 >> E un do while, di nuovo, esattamente la stessa. 1171 00:57:18,264 --> 00:57:20,190 Diamo una condizione. 1172 00:57:20,190 --> 00:57:24,510 Diciamo che ho voluto iterare over-- Volevo fare qualcosa per cinque volte. 1173 00:57:24,510 --> 00:57:27,840 In C, potremmo scrivere per init i è uguale a 0. 1174 00:57:27,840 --> 00:57:30,480 i è inferiore a 5, i ++. 1175 00:57:30,480 --> 00:57:34,240 L'unica differenza, in JavaScript, invece di dire int i è uguale a 0, 1176 00:57:34,240 --> 00:57:36,820 diciamo var i è uguale a 0. 1177 00:57:36,820 --> 00:57:38,370 Bellissimo. 1178 00:57:38,370 --> 00:57:41,320 Questa è l'unica differenza. 1179 00:57:41,320 --> 00:57:43,200 Tutte le domande di nulla di tutto ciò? 1180 00:57:43,200 --> 00:57:44,160 Sì. 1181 00:57:44,160 --> 00:57:48,480 >> PUBBLICO: Quindi, in PHP, è la stessa cosa, tranne ma come una variabile? 1182 00:57:48,480 --> 00:57:49,564 O era un esempio var? 1183 00:57:49,564 --> 00:57:50,480 HANNAH BLUMBERG: Sì. 1184 00:57:50,480 --> 00:57:52,310 Così in PHP, sta andando per essere un segno di dollaro. 1185 00:57:52,310 --> 00:57:59,450 Così sta andando a $ i eguali 0, $ i è minore di 5, $ i ++. 1186 00:57:59,450 --> 00:58:02,490 Grande domanda. 1187 00:58:02,490 --> 00:58:04,570 >> Ora parliamo di dichiarazioni di funzione. 1188 00:58:04,570 --> 00:58:07,010 In C, quando abbiamo dichiarato un la funzione, abbiamo dato un nome 1189 00:58:07,010 --> 00:58:08,490 e abbiamo dato alcuni parametri. 1190 00:58:08,490 --> 00:58:10,670 E, all'inizio, abbiamo scritto il tipo. 1191 00:58:10,670 --> 00:58:12,440 In JavaScript, tutto quello che hanno a che fare è scrivere 1192 00:58:12,440 --> 00:58:15,080 la funzione di parola chiave che dice, hey, JavaScript, 1193 00:58:15,080 --> 00:58:16,570 Sto per definire una funzione. 1194 00:58:16,570 --> 00:58:18,520 >> In questo caso, si ha il nome somma. 1195 00:58:18,520 --> 00:58:20,820 E ci vogliono due argomenti, xe y. 1196 00:58:20,820 --> 00:58:23,280 Si noti che non ci interessa sui tipi di x ed y. 1197 00:58:23,280 --> 00:58:26,280 E proprio come C, abbiamo questo ritorno parola chiave, 1198 00:58:26,280 --> 00:58:29,140 in modo che possiamo fare qualcosa come ritorno xe y. 1199 00:58:29,140 --> 00:58:32,540 >> E ora una volta che abbiamo scritto questo primo la funzione, possiamo usare somma ovunque. 1200 00:58:32,540 --> 00:58:34,740 E questo è tutto bene. 1201 00:58:34,740 --> 00:58:37,530 Una cosa veramente interessante di JavaScript che è molto a differenza di C 1202 00:58:37,530 --> 00:58:40,770 è che le funzioni possono essere trattati come valori. 1203 00:58:40,770 --> 00:58:43,895 Così possiamo fare qualcosa di simile qui dove Suppongo copro questo up-- 1204 00:58:43,895 --> 00:58:46,400 Ho coperto la somma var part-- e abbiamo appena detto 1205 00:58:46,400 --> 00:58:49,850 funzione xy è uguale ritorno x + y. 1206 00:58:49,850 --> 00:58:52,140 >> Questo è ciò che sarebbe stato chiamato una funzione anonima. 1207 00:58:52,140 --> 00:58:53,920 Si tratta di una funzione senza un nome. 1208 00:58:53,920 --> 00:58:56,290 Considerando che tale dice funzione somma, bla, bla, bla, 1209 00:58:56,290 --> 00:58:59,340 questo sarebbe solo dire la funzione. 1210 00:58:59,340 --> 00:59:02,020 Ma ora anche se ho questa funzione anonima, 1211 00:59:02,020 --> 00:59:03,630 che la funzione è in realtà solo un valore. 1212 00:59:03,630 --> 00:59:05,160 Siamo in grado di trattarlo come un valore. 1213 00:59:05,160 --> 00:59:10,180 >> Così siamo in grado di salvare in una variabile dello stesso modo abbiamo potuto conservare il 50 in una variabile. 1214 00:59:10,180 --> 00:59:13,870 Quindi possiamo dire, va bene, voglio un variabile, si chiama somma, 1215 00:59:13,870 --> 00:59:16,011 ed è questa funzione. 1216 00:59:16,011 --> 00:59:18,760 Così queste due cose sono in realtà intenzione di fare la stessa cosa, 1217 00:59:18,760 --> 00:59:21,576 ma la sintassi è un po ' diverso tipo e di una nota di divertimento. 1218 00:59:21,576 --> 00:59:22,076 Già. 1219 00:59:22,076 --> 00:59:25,548 >> PUBBLICO: Così si potrebbe chiamare un funzione che era anonimo dicendo: 1220 00:59:25,548 --> 00:59:28,244 staffe somma 2, 5? 1221 00:59:28,244 --> 00:59:29,160 HANNAH BLUMBERG: Sì. 1222 00:59:29,160 --> 00:59:32,280 È possibile chiamare questo anonimo funzionano nello stesso modo. 1223 00:59:32,280 --> 00:59:33,350 Fareste somma (2, 5) ;. 1224 00:59:33,350 --> 00:59:36,180 1225 00:59:36,180 --> 00:59:38,200 Sarebbe del tutto bene. 1226 00:59:38,200 --> 00:59:41,575 >> Se non ho fatto var somma uguale la funzione, se ho appena cancellato 1227 00:59:41,575 --> 00:59:45,480 questo-- So che è sulla mia mano, ma finta ho cancellato questo-- poi 1228 00:59:45,480 --> 00:59:46,964 tale funzione è una specie di appena andato. 1229 00:59:46,964 --> 00:59:49,630 Non si può mai usare di nuovo perché non si dispone di un nome per questo. 1230 00:59:49,630 --> 00:59:53,497 E 'difficile per riferirsi a qualcosa non si sa come chiamarla. 1231 00:59:53,497 --> 00:59:54,080 Bella domanda. 1232 00:59:54,080 --> 00:59:54,580 Già. 1233 00:59:54,580 --> 00:59:59,580 >> PUBBLICO: Si può fare riferimento somma in altri luoghi con il valore di x più y? 1234 00:59:59,580 --> 01:00:01,940 >> HANNAH BLUMBERG: Può voi sum riferimento in altri luoghi 1235 01:00:01,940 --> 01:00:03,360 con il valore x più y? 1236 01:00:03,360 --> 01:00:05,130 Io non sono del tutto sicuro di cosa vuoi dire. 1237 01:00:05,130 --> 01:00:10,582 >> PUBBLICO: Così il vostro passato semi-anonimo funzione somma è uguale a questo 1238 01:00:10,582 --> 01:00:14,452 funzione anonima, quindi somma è ora una variabile che si can-- 1239 01:00:14,452 --> 01:00:15,410 HANNAH BLUMBERG: Giusto. 1240 01:00:15,410 --> 01:00:18,980 Così somma è la variabile, ma è actually-- 1241 01:00:18,980 --> 01:00:23,770 quindi somma è una variabile il cui valore è la funzione. 1242 01:00:23,770 --> 01:00:27,030 Quindi è una funzione, che è di tipo una cosa strana per avvolgere la testa intorno 1243 01:00:27,030 --> 01:00:29,880 da quando abbiamo giocato con C e non è possibile farlo in C. 1244 01:00:29,880 --> 01:00:32,679 Ma ora possiamo chiamare sommare il Allo stesso modo potremmo chiamare somma qui. 1245 01:00:32,679 --> 01:00:33,220 PUBBLICO: OK. 1246 01:00:33,220 --> 01:00:33,970 HANNAH BLUMBERG: Sì. 1247 01:00:33,970 --> 01:00:34,553 Bella domanda. 1248 01:00:34,553 --> 01:00:35,438 Già. 1249 01:00:35,438 --> 01:00:39,862 >> PUBBLICO: Quindi non usiamo il prototipi in PHP o JavaScript? 1250 01:00:39,862 --> 01:00:42,070 HANNAH BLUMBERG: No, non è necessario utilizzare i prototipi, 1251 01:00:42,070 --> 01:00:43,880 soprattutto in JavaScript. 1252 01:00:43,880 --> 01:00:49,380 Così una pratica cosa negativa che sto andare a dire che non si deve fare 1253 01:00:49,380 --> 01:00:52,620 è che non è necessario scrivere var i = 50. 1254 01:00:52,620 --> 01:00:54,840 Si può solo iniziare a fare i = 50. 1255 01:00:54,840 --> 01:00:57,490 E sarebbe solo fare i una variabile globale. 1256 01:00:57,490 --> 01:01:00,550 >> E 'molto cattiva pratica di mai dire esplicitamente var i, 1257 01:01:00,550 --> 01:01:01,800 ma è qualcosa che si può fare. 1258 01:01:01,800 --> 01:01:03,591 L'interprete non è andando a urlare contro di voi. 1259 01:01:03,591 --> 01:01:05,920 JavaScript è abbastanza simile, Puoi fare quello che vuoi. 1260 01:01:05,920 --> 01:01:09,301 1261 01:01:09,301 --> 01:01:09,800 Oh scusa. 1262 01:01:09,800 --> 01:01:10,300 Ce ne sono due. 1263 01:01:10,300 --> 01:01:12,150 Nei pantaloni arancioni. 1264 01:01:12,150 --> 01:01:13,190 Vai avanti. 1265 01:01:13,190 --> 01:01:14,390 >> PUBBLICO: No, si va prima. 1266 01:01:14,390 --> 01:01:16,765 >> PUBBLICO: No, stavo solo dicendo Non ho avuto la mia mano. 1267 01:01:16,765 --> 01:01:20,248 1268 01:01:20,248 --> 01:01:20,748 OK. 1269 01:01:20,748 --> 01:01:26,604 Quindi, se si dovesse chiamare quella prima volta, ora somma, 1270 01:01:26,604 --> 01:01:29,864 noi lo chiamiamo allo stesso modo, X, y, come ogni singola volta? 1271 01:01:29,864 --> 01:01:30,780 HANNAH BLUMBERG: Sì. 1272 01:01:30,780 --> 01:01:32,572 Quindi questi due essenzialmente fare la stessa cosa. 1273 01:01:32,572 --> 01:01:35,113 PUBBLICO: E qual è il vantaggio di utilizzare l'uno o l'altro? 1274 01:01:35,113 --> 01:01:37,500 HANNAH BLUMBERG: Nessun vantaggio di utilizzare uno o l'altro. 1275 01:01:37,500 --> 01:01:40,080 Volevo solo mostrarti due diversi pezzi di sintassi. 1276 01:01:40,080 --> 01:01:42,770 Un sacco di volte in cui anonimi funzioni hanno uno scopo 1277 01:01:42,770 --> 01:01:48,220 è se l'argomento ad un altro funzione dovrebbe essere una funzione. 1278 01:01:48,220 --> 01:01:50,600 E vedremo che in solo un secondo con l'Ajax. 1279 01:01:50,600 --> 01:01:53,577 >> Quindi, se questo non ha alcun senso, memorizzarlo nella parte posteriore della testa. 1280 01:01:53,577 --> 01:01:55,660 Ecco dove un anonimo funzione potrebbe essere utile 1281 01:01:55,660 --> 01:01:58,284 perché non è davvero la pena dandogli un nome dal momento che siamo solo 1282 01:01:58,284 --> 01:01:59,443 intenzione di usarlo una volta. 1283 01:01:59,443 --> 01:02:00,370 Già. 1284 01:02:00,370 --> 01:02:03,635 >> PUBBLICO: Se x e y cambiamento più tardi su, si somma cambiare così? 1285 01:02:03,635 --> 01:02:06,510 HANNAH BLUMBERG: Se x e y cambiamento in seguito, si somma cambiare così? 1286 01:02:06,510 --> 01:02:08,840 Quindi, questo è in realtà io pensare qualcosa che è, 1287 01:02:08,840 --> 01:02:12,260 ancora una volta, ci si sente proprio molto diverso da C. Questo non è un valore. 1288 01:02:12,260 --> 01:02:13,620 Non è 5. 1289 01:02:13,620 --> 01:02:15,550 E 'solo la funzione stessa. 1290 01:02:15,550 --> 01:02:19,110 Quindi, non appena si dà parametri, allora ci troveremo a calcolare un valore. 1291 01:02:19,110 --> 01:02:21,193 >> MARIA ZLATKOVA: E poi è possibile chiamare la funzione 1292 01:02:21,193 --> 01:02:23,272 e usarla per ottenere un certo valore. 1293 01:02:23,272 --> 01:02:24,230 HANNAH BLUMBERG: Giusto. 1294 01:02:24,230 --> 01:02:25,250 Di preciso. 1295 01:02:25,250 --> 01:02:25,863 Già. 1296 01:02:25,863 --> 01:02:27,946 >> PUBBLICO: Quindi, se solo memorizzarlo nella variabile, 1297 01:02:27,946 --> 01:02:31,430 come var x è uguale somma di due values-- 1298 01:02:31,430 --> 01:02:32,420 >> HANNAH BLUMBERG: Sì. 1299 01:02:32,420 --> 01:02:35,320 Quindi si può solo fare var sum uguale somma dei due valori. 1300 01:02:35,320 --> 01:02:37,670 Già. 1301 01:02:37,670 --> 01:02:38,680 Qualsiasi altra domanda? 1302 01:02:38,680 --> 01:02:39,642 Già. 1303 01:02:39,642 --> 01:02:42,047 >> Pubblico: Ma vorrei che confondere somma e la somma? 1304 01:02:42,047 --> 01:02:45,062 Come se si chiama il vostro somma variabile, vuoi chiamare la funzione sum? 1305 01:02:45,062 --> 01:02:45,895 HANNAH BLUMBERG: Mm. 1306 01:02:45,895 --> 01:02:46,395 Mm. 1307 01:02:46,395 --> 01:02:51,253 Se hai fatto qualcosa come, somma risulti somma 2, 5? 1308 01:02:51,253 --> 01:02:53,170 >> PUBBLICO: Sì. 1309 01:02:53,170 --> 01:02:56,465 >> HANNAH BLUMBERG: credo che sarebbe sovrascrivere il valore della somma. 1310 01:02:56,465 --> 01:02:59,290 Così un altro interessante cosa su JavaScript 1311 01:02:59,290 --> 01:03:02,950 è che una singola variabile può assumere su un mazzo di tipi diversi. 1312 01:03:02,950 --> 01:03:03,790 Cattiva pratica. 1313 01:03:03,790 --> 01:03:06,280 Non si dovrebbe fare qualcosa come quello che hai appena detto. 1314 01:03:06,280 --> 01:03:10,240 >> Ma in C, se i viene impostata pari ad un numero intero, 1315 01:03:10,240 --> 01:03:13,570 noi sappiamo che non è mai sta per diventare una stringa. 1316 01:03:13,570 --> 01:03:15,670 Questo non è il caso in JavaScript. 1317 01:03:15,670 --> 01:03:17,770 Sì, buona domanda. 1318 01:03:17,770 --> 01:03:20,151 Qualunque altra cosa? 1319 01:03:20,151 --> 01:03:20,650 Tutto ok. 1320 01:03:20,650 --> 01:03:21,850 Fare tutto in perfetto orario. 1321 01:03:21,850 --> 01:03:23,050 Mantenere in corso. 1322 01:03:23,050 --> 01:03:25,200 Tutto ok. 1323 01:03:25,200 --> 01:03:27,780 >> Se guardiamo un array in JavaScript, ecco 1324 01:03:27,780 --> 01:03:30,250 un rapido esempio di un array di stringhe. 1325 01:03:30,250 --> 01:03:31,967 E array possono crescere in modo dinamico. 1326 01:03:31,967 --> 01:03:33,675 Non hanno un dimensione fissa allo stesso modo 1327 01:03:33,675 --> 01:03:37,990 che fanno in C. Si può accedere al elementi con solo le parentesi quadre. 1328 01:03:37,990 --> 01:03:41,720 >> Che sembra un po 'come PHP e un sacco come il C, dove si può dire, in questo caso, 1329 01:03:41,720 --> 01:03:48,360 se volevo la parola JavaScript, vorrei non arr parentesi quadre con 0, 1, 2. 1330 01:03:48,360 --> 01:03:51,450 1331 01:03:51,450 --> 01:03:55,390 E poi se ti ricordi in C quando abbiamo voleva ottenere la lunghezza di un array, 1332 01:03:55,390 --> 01:03:56,820 è stato davvero fastidioso. 1333 01:03:56,820 --> 01:03:58,460 Ma in JavaScript, super facile. 1334 01:03:58,460 --> 01:03:59,910 Tutto quello che facciamo, .length. 1335 01:03:59,910 --> 01:04:01,120 Dà le lunghezze. 1336 01:04:01,120 --> 01:04:01,892 Questo è tutto. 1337 01:04:01,892 --> 01:04:03,140 >> PUBBLICO: Che è semplice. 1338 01:04:03,140 --> 01:04:05,306 >> HANNAH BLUMBERG: Sì, fa la vostra vita molto più facile. 1339 01:04:05,306 --> 01:04:08,950 1340 01:04:08,950 --> 01:04:11,560 OK, non object-- lì. 1341 01:04:11,560 --> 01:04:15,480 Oggetti in atmosfera JavaScript un po 'come le strutture in C 1342 01:04:15,480 --> 01:04:18,280 e array associativi in ​​PHP. 1343 01:04:18,280 --> 01:04:20,270 Quindi quello che abbiamo visto un molto è JSON, che 1344 01:04:20,270 --> 01:04:23,150 sta per JavaScript Object Notation. 1345 01:04:23,150 --> 01:04:25,550 Ed è fondamentalmente un modo di strutturare i nostri dati. 1346 01:04:25,550 --> 01:04:27,880 >> Vediamo quindi un esempio, probabilmente il più facile. 1347 01:04:27,880 --> 01:04:32,540 Quindi, ecco un esempio di un oggetto che memorizza la classe, CS50. 1348 01:04:32,540 --> 01:04:37,790 E quando dico classe, intendo ovviamente, Non like-- sì, il corso, CS50. 1349 01:04:37,790 --> 01:04:40,730 E vedrai che tutto nell'oggetto 1350 01:04:40,730 --> 01:04:43,526 sta per essere contenuta tra parentesi graffe. 1351 01:04:43,526 --> 01:04:48,260 >> E cominciamo ad associare i nomi di campo o chiavi con i diversi valori. 1352 01:04:48,260 --> 01:04:52,920 Così si può iniziare a vedere come questo tipo di si sente come un array associativo in PHP. 1353 01:04:52,920 --> 01:04:57,450 Così stiamo andando ad associare il campo o il nome della chiave, naturalmente, con la stringa, 1354 01:04:57,450 --> 01:04:58,510 CS50. 1355 01:04:58,510 --> 01:04:59,940 >> Stiamo per avere un istruttore. 1356 01:04:59,940 --> 01:05:00,940 Stiamo per avere TF. 1357 01:05:00,940 --> 01:05:05,240 Stiamo per avere il numero di pset e abbiamo intenzione di avere registrato. 1358 01:05:05,240 --> 01:05:10,720 E una cosa interessante da notare è tutto queste cose hanno diversi tipi, 1359 01:05:10,720 --> 01:05:12,020 e questo è tutto bene. 1360 01:05:12,020 --> 01:05:15,330 >> Va bene per un oggetto, infatti, è probabilmente previsto per un oggetto 1361 01:05:15,330 --> 01:05:19,620 avere una combinazione di stringhe e numeri e booleani e array 1362 01:05:19,620 --> 01:05:23,420 e qualsiasi altra cosa si potrebbe vogliono avere all'interno del vostro oggetto. 1363 01:05:23,420 --> 01:05:28,570 E notare che queste stanno per essere i nomi o le chiavi, e poi abbiamo appena 1364 01:05:28,570 --> 01:05:30,300 impostarlo parità con un po 'di punti. 1365 01:05:30,300 --> 01:05:32,015 >> PUBBLICO: Che cosa fa esattamente JSON significa? 1366 01:05:32,015 --> 01:05:33,890 HANNAH BLUMBERG: Che cosa significa esattamente JSON significa? 1367 01:05:33,890 --> 01:05:36,470 JSON solo l'acronimo di JavaScript Object Notation. 1368 01:05:36,470 --> 01:05:38,430 E 'solo un modo di formattazione. 1369 01:05:38,430 --> 01:05:40,040 Già. 1370 01:05:40,040 --> 01:05:41,800 E 'un modo di formattare i nostri dati. 1371 01:05:41,800 --> 01:05:43,620 >> In C, è struct. 1372 01:05:43,620 --> 01:05:45,800 In PHP, è array associativi. 1373 01:05:45,800 --> 01:05:47,120 In JavaScript, abbiamo oggetti. 1374 01:05:47,120 --> 01:05:48,969 >> PUBBLICO: Quindi CS50 è un oggetto? 1375 01:05:48,969 --> 01:05:51,010 HANNAH BLUMBERG: CS50 è l'oggetto in questo caso. 1376 01:05:51,010 --> 01:05:54,830 1377 01:05:54,830 --> 01:05:57,880 Ora, come si fa in realtà l'accesso quei campi o modificare questi campi. 1378 01:05:57,880 --> 01:06:03,920 Ad esempio, supponiamo abbiamo deciso che si voleva uno in meno pset questo semestre. 1379 01:06:03,920 --> 01:06:06,300 Invece di nove, siamo solo andando ad avere otto. 1380 01:06:06,300 --> 01:06:08,240 Come possiamo cambiare la situazione? 1381 01:06:08,240 --> 01:06:09,436 >> Oh, modo sbagliato. 1382 01:06:09,436 --> 01:06:11,060 Ci sono due modi che possiamo fare quello. 1383 01:06:11,060 --> 01:06:13,490 Il numero uno è con il punto notazione e numero due 1384 01:06:13,490 --> 01:06:15,750 è con la notazione parentesi quadra. 1385 01:06:15,750 --> 01:06:19,720 Così, per esempio, se ha voluto cambiare o accesso 1386 01:06:19,720 --> 01:06:26,820 il campo pset nel nostro oggetto CS50, quello che vorrei fare è CS50.psets, 1387 01:06:26,820 --> 01:06:30,770 quindi il nome del punto dell'oggetto il nome del campo o il tasto. 1388 01:06:30,770 --> 01:06:37,120 >> In modo molto simile, è esattamente equivalente a fare CS50, e poi 1389 01:06:37,120 --> 01:06:42,050 tra parentesi quadre, p-set. 1390 01:06:42,050 --> 01:06:42,837 Raffreddare? 1391 01:06:42,837 --> 01:06:44,298 Già. 1392 01:06:44,298 --> 01:06:47,707 >> PUBBLICO: Così è JSON tecnicamente JavaScript ancora, 1393 01:06:47,707 --> 01:06:51,814 anche se negli pset noi separare fuori [incomprensibile]? 1394 01:06:51,814 --> 01:06:52,730 HANNAH BLUMBERG: Certo. 1395 01:06:52,730 --> 01:06:56,290 Quindi la domanda è, sono JavaScript e JSON equivalente? 1396 01:06:56,290 --> 01:07:00,750 Così è la notazione JSON, fondamentalmente il modo in cui scriviamo fuori 1397 01:07:00,750 --> 01:07:02,700 un oggetto da JavaScript. 1398 01:07:02,700 --> 01:07:05,190 Quindi non sono esattamente la stessa cosa. 1399 01:07:05,190 --> 01:07:08,950 >> Direi JavaScript, ci sono oggetti in JavaScript. 1400 01:07:08,950 --> 01:07:12,590 JSON prende quegli oggetti e li stampa e li visualizza 1401 01:07:12,590 --> 01:07:15,160 o li memorizza in un modo carino. 1402 01:07:15,160 --> 01:07:18,110 Quindi JSON non è una programmazione il modo in cui il linguaggio JavaScript è. 1403 01:07:18,110 --> 01:07:20,900 E 'solo la notazione per i nostri oggetti in JavaScript. 1404 01:07:20,900 --> 01:07:21,400 Già. 1405 01:07:21,400 --> 01:07:24,144 >> PUBBLICO: Così che cosa esattamente [Incomprensibile] completare? 1406 01:07:24,144 --> 01:07:25,060 HANNAH BLUMBERG: Certo. 1407 01:07:25,060 --> 01:07:27,727 Quindi, questo in realtà non fa nulla. 1408 01:07:27,727 --> 01:07:28,935 Questo è solo un modo per accedere. 1409 01:07:28,935 --> 01:07:31,393 Quindi diciamo che abbiamo deciso di cambiare il numero di set di problemi 1410 01:07:31,393 --> 01:07:32,450 9-8. 1411 01:07:32,450 --> 01:07:34,383 Quello che facciamo è fare qualcosa come CS50.psets = 8 ;. 1412 01:07:34,383 --> 01:07:38,500 1413 01:07:38,500 --> 01:07:39,400 >> Sì, grande domanda. 1414 01:07:39,400 --> 01:07:40,733 Questo è solo per mostrarvi la sintassi. 1415 01:07:40,733 --> 01:07:43,620 In realtà non fare qualcosa di utile. 1416 01:07:43,620 --> 01:07:46,085 Qualsiasi domanda? 1417 01:07:46,085 --> 01:07:48,210 Spostare a destra lungo. 1418 01:07:48,210 --> 01:07:51,960 >> Quindi diamo un'occhiata a un rapido esempio di come JavaScript funziona perché ti ho detto che 1419 01:07:51,960 --> 01:07:55,170 fa tutte queste cose interessanti e ci permette di modificare le pagine web. 1420 01:07:55,170 --> 01:07:56,970 Andiamo in realtà vederlo in azione. 1421 01:07:56,970 --> 01:07:59,850 Quindi prendere, per esempio, questo file HTML. 1422 01:07:59,850 --> 01:08:04,350 >> E la cosa che voglio mettere a fuoco è questa particolare etichetta, che è un pulsante, 1423 01:08:04,350 --> 01:08:06,182 con id search_button. 1424 01:08:06,182 --> 01:08:08,670 E 'solo nella pagina. 1425 01:08:08,670 --> 01:08:10,690 Così ora vediamo cosa possiamo effettivamente fare. 1426 01:08:10,690 --> 01:08:12,560 >> Bene, supponiamo quando si fa clic su tale pulsante, 1427 01:08:12,560 --> 01:08:16,010 vogliamo fare un alert-- si è fatto clic sul pulsante. 1428 01:08:16,010 --> 01:08:17,840 Vediamo come possiamo farlo. 1429 01:08:17,840 --> 01:08:23,869 Quindi window.onload-- questo non è qualcosa che hai visto in classe, quindi, 1430 01:08:23,869 --> 01:08:26,180 Non avrà bisogno di sapere che per il quiz. 1431 01:08:26,180 --> 01:08:33,660 Ma questo in pratica dice, OK, chiamata questa funzione quando i carichi finestra. 1432 01:08:33,660 --> 01:08:35,080 >> Ecco, questo è solo tipo di codice di installazione. 1433 01:08:35,080 --> 01:08:36,390 Non preoccupatevi tanto di questo. 1434 01:08:36,390 --> 01:08:39,170 Quello che voglio mettere a fuoco è di qui. 1435 01:08:39,170 --> 01:08:44,020 Diciamo var SearchButton uguale document.getElementById search_button. 1436 01:08:44,020 --> 01:08:46,450 >> Quindi, come si può immaginare, Quello che fa è che dice, 1437 01:08:46,450 --> 01:08:50,920 OK, andare a trovare l'elemento con ID search_button. 1438 01:08:50,920 --> 01:08:52,790 E ora abbiamo che elemento reale e sono 1439 01:08:52,790 --> 01:08:56,279 andando a memorizzare in un SearchButton variabile. 1440 01:08:56,279 --> 01:09:00,651 Ed ora possiamo effettivamente utilizzare quell'elemento e modificarlo, o accedere ai suoi valori, 1441 01:09:00,651 --> 01:09:01,359 Cose così. 1442 01:09:01,359 --> 01:09:04,649 Possiamo effettivamente iniziare a impegnarsi con la pagina web. 1443 01:09:04,649 --> 01:09:10,330 >> Così qui dire, OK, ora che ho quel pulsante, quando si fa clic, 1444 01:09:10,330 --> 01:09:12,859 chiamare questa funzione anonima. 1445 01:09:12,859 --> 01:09:16,811 Quindi questo è dove anonimo funzioni diventano utili. 1446 01:09:16,811 --> 01:09:18,060 E cosa fa la funzione di fare? 1447 01:09:18,060 --> 01:09:20,529 Beh, chiama proprio questo funzione di allarme e dice, 1448 01:09:20,529 --> 01:09:22,910 si è fatto clic sul pulsante Cerca. 1449 01:09:22,910 --> 01:09:29,670 >> Quindi cosa succederà se vado ovunque vive questo HTML e ho clicca il pulsante 1450 01:09:29,670 --> 01:09:33,729 Prendo un po 'di fantasia allarme che dice si è fatto clic sul pulsante. 1451 01:09:33,729 --> 01:09:40,710 Così le cose di concentrarsi su qui-- document.getElementById 1452 01:09:40,710 --> 01:09:44,960 ottiene un particolare HTML elemento con l'ID dato. 1453 01:09:44,960 --> 01:09:48,529 E ora possiamo impostare cosa dovrebbe accadere quando 1454 01:09:48,529 --> 01:09:50,702 quel particolare elemento viene cliccato. 1455 01:09:50,702 --> 01:09:52,670 >> PUBBLICO: Dobbiamo mettere tutto questo in? 1456 01:09:52,670 --> 01:09:53,162 >> HANNAH BLUMBERG: Siamo spiacenti? 1457 01:09:53,162 --> 01:09:55,130 >> PUBBLICO: Dobbiamo codificare fisicamente tutto questo? 1458 01:09:55,130 --> 01:09:56,340 >> HANNAH BLUMBERG: Dobbiamo codificare fisicamente tutto questo? 1459 01:09:56,340 --> 01:09:56,839 Sì. 1460 01:09:56,839 --> 01:09:58,120 Non è questo tipo di fastidioso? 1461 01:09:58,120 --> 01:10:00,032 Si tratta di un sacco di codice. 1462 01:10:00,032 --> 01:10:01,574 >> PUBBLICO: Si potrebbe importare qualcosa. 1463 01:10:01,574 --> 01:10:02,532 HANNAH BLUMBERG: Giusto. 1464 01:10:02,532 --> 01:10:03,610 Potremmo usare qualcosa. 1465 01:10:03,610 --> 01:10:08,140 E in particular-- oh, è mi dice che devo insegnare a sezione. 1466 01:10:08,140 --> 01:10:11,061 In particolare, cerchiamo di utilizzare la libreria jQuery, 1467 01:10:11,061 --> 01:10:13,060 perché quella era davvero lungo e davvero fastidioso 1468 01:10:13,060 --> 01:10:16,860 e voglio essere in grado di semplificare e renderlo più breve e più facile scrivere. 1469 01:10:16,860 --> 01:10:19,810 >> Così jQuery è una libreria JavaScript. 1470 01:10:19,810 --> 01:10:24,930 Così JavaScript è programmazione lingua; jQuery è una libreria. 1471 01:10:24,930 --> 01:10:27,190 E fa un sacco di cose più facili. 1472 01:10:27,190 --> 01:10:33,230 Rende cambiando e attraversando un documento HTML molto più facile. 1473 01:10:33,230 --> 01:10:35,030 >> Rende più facile la gestione di eventi. 1474 01:10:35,030 --> 01:10:37,580 Rende l'animazione più facile e rende più facile Ajax. 1475 01:10:37,580 --> 01:10:40,140 Quindi facciamo un salto in due queste cose adesso. 1476 01:10:40,140 --> 01:10:40,900 Mi scusi. 1477 01:10:40,900 --> 01:10:42,620 Prima di farlo, qualche sintassi di base. 1478 01:10:42,620 --> 01:10:46,870 >> Questo è ciò che più chiamate a la libreria jQuery assomigliare. 1479 01:10:46,870 --> 01:10:50,520 Usiamo questo dollaro sign-- nessun segno collegamento a PHP, 1480 01:10:50,520 --> 01:10:56,030 solo inconvenient-- il nome di un selettore, dot, e quindi un'azione. 1481 01:10:56,030 --> 01:10:58,860 Vediamo quindi alcuni esempi concreti di questo. 1482 01:10:58,860 --> 01:11:02,980 >> Quindi questo è in realtà lo stesso codice dalla diapositiva evento. 1483 01:11:02,980 --> 01:11:08,740 Quindi questa lunga, brutta cosa diventa questo molto più bello, più piccola cosa. 1484 01:11:08,740 --> 01:11:10,370 Quindi cerchiamo di scomposizione. 1485 01:11:10,370 --> 01:11:17,090 Questo dice, OK, jQuery-- questo dollaro sign-- jQuery, mi trovare la finestra. 1486 01:11:17,090 --> 01:11:18,480 Ecco, questo è il selettore. 1487 01:11:18,480 --> 01:11:21,800 >> Quando viene caricato, chiamare questa funzione. 1488 01:11:21,800 --> 01:11:23,880 Ecco, questo è tutto dentro. 1489 01:11:23,880 --> 01:11:24,380 OK. 1490 01:11:24,380 --> 01:11:25,740 Fin qui tutto bene? 1491 01:11:25,740 --> 01:11:26,750 Tutto ok. 1492 01:11:26,750 --> 01:11:32,970 >> Ora, jQuery, mi trovare il cosa con ID search_button. 1493 01:11:32,970 --> 01:11:36,090 E ciò che viene cliccato, chiamare questa funzione. 1494 01:11:36,090 --> 01:11:37,900 E poi questa funzione di esattamente la stessa. 1495 01:11:37,900 --> 01:11:41,052 Basta fare un po 'di allarme, si è fatto clic sul pulsante Cerca. 1496 01:11:41,052 --> 01:11:42,650 >> Quindi è davvero bello. 1497 01:11:42,650 --> 01:11:46,260 Condensa davvero e semplifica il nostro codice. 1498 01:11:46,260 --> 01:11:49,030 Come facevo a sapere che è ID search_button 1499 01:11:49,030 --> 01:11:50,960 e non come classe search_button? 1500 01:11:50,960 --> 01:11:52,024 >> PUBBLICO: Hashtag? 1501 01:11:52,024 --> 01:11:52,940 HANNAH BLUMBERG: Sì. 1502 01:11:52,940 --> 01:11:56,450 Questo simbolo cancelletto, è proprio come CSS. 1503 01:11:56,450 --> 01:12:00,080 Quindi ricorda, con i CSS, quando ha voluto selezionare qualcosa per ID, 1504 01:12:00,080 --> 01:12:01,590 abbiamo usato il simbolo di cancelletto. 1505 01:12:01,590 --> 01:12:05,400 E quando abbiamo deciso di selezionare qualcosa per classe, si usa il punto. 1506 01:12:05,400 --> 01:12:06,870 Grande. 1507 01:12:06,870 --> 01:12:08,230 Ha senso? 1508 01:12:08,230 --> 01:12:11,500 Così jQuery dovrebbe solo rendere la nostra vita più facile. 1509 01:12:11,500 --> 01:12:12,000 Già. 1510 01:12:12,000 --> 01:12:15,660 >> PUBBLICO: Quindi sono un po 'confuso per come funziona la funzione anonima. 1511 01:12:15,660 --> 01:12:19,027 Si fa il nome questo Anonymouse la funzione, funzione? 1512 01:12:19,027 --> 01:12:20,594 Come si chiama? 1513 01:12:20,594 --> 01:12:21,510 HANNAH BLUMBERG: Certo. 1514 01:12:21,510 --> 01:12:25,812 Quindi la funzione è solo una parola chiave che dice, sto per definire una funzione. 1515 01:12:25,812 --> 01:12:26,520 PUBBLICO: Oh, OK. 1516 01:12:26,520 --> 01:12:27,353 HANNAH BLUMBERG: OK? 1517 01:12:27,353 --> 01:12:32,120 E poi si passa come un argomento a-- diamo 1518 01:12:32,120 --> 01:12:37,040 questo tra-- interiore per la funzione di clic. 1519 01:12:37,040 --> 01:12:39,420 Quindi sì, in modo che la funzione, questa funzione anonima, 1520 01:12:39,420 --> 01:12:40,910 diventa un argomento attuale. 1521 01:12:40,910 --> 01:12:43,632 Quindi ricorda in JavaScript, abbiamo può trattare le funzioni come valori. 1522 01:12:43,632 --> 01:12:44,340 PUBBLICO: Oh, OK. 1523 01:12:44,340 --> 01:12:45,256 HANNAH BLUMBERG: Sì. 1524 01:12:45,256 --> 01:12:46,035 Mi piace che "oh". 1525 01:12:46,035 --> 01:12:47,490 Bello. 1526 01:12:47,490 --> 01:12:49,915 Altre domande? 1527 01:12:49,915 --> 01:12:50,505 Orario? 1528 01:12:50,505 --> 01:12:51,380 MARIA ZLATKOVA: Good. 1529 01:12:51,380 --> 01:12:52,760 Bene. 1530 01:12:52,760 --> 01:12:54,210 >> HANNAH BLUMBERG: Awesome. 1531 01:12:54,210 --> 01:12:55,720 Alcuni jQuery utili rapido. 1532 01:12:55,720 --> 01:12:57,559 Non ho intenzione di andare attraverso tutti questi. 1533 01:12:57,559 --> 01:12:59,350 Queste diapositive saranno up on-line un po ' 1534 01:12:59,350 --> 01:13:02,040 più tardi, quindi è possibile controllare fuori un po 'più tardi. 1535 01:13:02,040 --> 01:13:07,120 Ma in fondo, il generale modello tiene dove si dice, 1536 01:13:07,120 --> 01:13:11,510 OK, ehi, jQuery, ecco la mia selettore e poi qui è un'azione. 1537 01:13:11,510 --> 01:13:15,940 E si possono fare cose come l'accesso alla il valore di un modulo, accedere ad alcuni HTML, 1538 01:13:15,940 --> 01:13:19,195 controllare ciò che accade quando l'utente invia un modulo, cose del genere. 1539 01:13:19,195 --> 01:13:20,106 Sì. 1540 01:13:20,106 --> 01:13:22,090 >> PUBBLICO: Così nel esame, stiamo andando ad avere bisogno 1541 01:13:22,090 --> 01:13:25,066 di conoscere un bel po 'da la documentazione di jQuery. 1542 01:13:25,066 --> 01:13:31,018 Quindi, dato che copiamo / incolla il jQuery documentazione al nostro foglietto, 1543 01:13:31,018 --> 01:13:32,506 dove è la linea tracciata? 1544 01:13:32,506 --> 01:13:33,957 Come quanti abbiamo bisogno di sapere? 1545 01:13:33,957 --> 01:13:35,290 HANNAH BLUMBERG: Grande domanda. 1546 01:13:35,290 --> 01:13:37,765 La domanda è in sostanza, dato che si 1547 01:13:37,765 --> 01:13:41,330 non possono accedere alla documentazione jQuery durante il test, quanto si dovrebbe 1548 01:13:41,330 --> 01:13:41,830 sapere? 1549 01:13:41,830 --> 01:13:45,540 Non ci aspetteremmo a venire con qualche funzione random 1550 01:13:45,540 --> 01:13:47,240 che ci si aspetterebbe di Google. 1551 01:13:47,240 --> 01:13:52,930 >> Le cose che sono gioco equo sono lo farei dire solo tipo di sintassi generale, 1552 01:13:52,930 --> 01:13:58,310 poter selezionare da ID e da class-- così come CSS. 1553 01:13:58,310 --> 01:14:01,876 E poi le funzioni reali themself, ci sarà probabilmente dirà. 1554 01:14:01,876 --> 01:14:02,376 Già. 1555 01:14:02,376 --> 01:14:05,591 >> PUBBLICO: Quindi, quando si seleziona per classe significherebbe punto. 1556 01:14:05,591 --> 01:14:06,840 HANNAH BLUMBERG: Sì, esattamente. 1557 01:14:06,840 --> 01:14:07,340 Bene. 1558 01:14:07,340 --> 01:14:10,461 Quando si seleziona per classe, sta andando da dot posto del cancelletto. 1559 01:14:10,461 --> 01:14:10,960 Sì. 1560 01:14:10,960 --> 01:14:12,710 >> PUBBLICO: Volete andare oltre la differenza 1561 01:14:12,710 --> 01:14:14,310 tra la selezione per ID e per classe? 1562 01:14:14,310 --> 01:14:14,560 >> HANNAH BLUMBERG: Certo. 1563 01:14:14,560 --> 01:14:17,510 La differenza tra la selezione ID e selezionando per classe. 1564 01:14:17,510 --> 01:14:20,685 Quindi, come ha detto Maria a po 'prima, ci 1565 01:14:20,685 --> 01:14:26,280 può essere solo un elemento HTML con un dato ID, che classe, 1566 01:14:26,280 --> 01:14:29,740 ci permette di raggruppare un gruppo di diversi elementi insieme, 1567 01:14:29,740 --> 01:14:34,300 quindi le cose che sono correlati, ma non esattamente la stessa. 1568 01:14:34,300 --> 01:14:35,685 Questo risponde alla domanda? 1569 01:14:35,685 --> 01:14:36,200 Eccezionale. 1570 01:14:36,200 --> 01:14:37,194 Sì. 1571 01:14:37,194 --> 01:14:40,680 >> PUBBLICO: Che cosa succede se si dispone di più cose che sono nella stessa classe? 1572 01:14:40,680 --> 01:14:42,150 >> HANNAH BLUMBERG: Cosa succede se si dispone di più le cose che 1573 01:14:42,150 --> 01:14:43,280 sono la stessa classe? 1574 01:14:43,280 --> 01:14:45,829 Così, per esempio, se siamo usando solo puro JavaScript, 1575 01:14:45,829 --> 01:14:48,120 vorremmo fare qualcosa di simile document.getElementsByClass. 1576 01:14:48,120 --> 01:14:52,280 1577 01:14:52,280 --> 01:14:56,320 E poi cosa che in realtà fa è restituisce un array di elementi. 1578 01:14:56,320 --> 01:14:59,517 >> E si deve o iterare loro o trovare quello che si desidera. 1579 01:14:59,517 --> 01:15:01,350 Non sta andando a dare un singolo elemento. 1580 01:15:01,350 --> 01:15:03,450 Sta andando a darvi un array di elementi. 1581 01:15:03,450 --> 01:15:05,280 Grande domanda. 1582 01:15:05,280 --> 01:15:07,700 Qualunque altra cosa? 1583 01:15:07,700 --> 01:15:09,520 Eccezionale. 1584 01:15:09,520 --> 01:15:12,860 >> Quindi penso che se si ha familiarità con qualsiasi jQuery avete visto nel pset, 1585 01:15:12,860 --> 01:15:15,600 si dovrebbe essere pronti per partire. 1586 01:15:15,600 --> 01:15:16,325 Domanda? 1587 01:15:16,325 --> 01:15:17,610 Oh, no. 1588 01:15:17,610 --> 01:15:18,859 Devo proprio insegnare. 1589 01:15:18,859 --> 01:15:19,358 Relax. 1590 01:15:19,358 --> 01:15:20,035 Andrà bene. 1591 01:15:20,035 --> 01:15:20,660 Prendo lì. 1592 01:15:20,660 --> 01:15:24,670 1593 01:15:24,670 --> 01:15:26,870 >> Parliamo di Ajax. 1594 01:15:26,870 --> 01:15:31,350 Così Ajax sta per essere a-- bene, cominciamo con ciò che essa rappresenta. 1595 01:15:31,350 --> 01:15:32,350 Si tratta di un acronimo. 1596 01:15:32,350 --> 01:15:35,855 E 'l'acronimo di Asynchronous JavaScript e XML. 1597 01:15:35,855 --> 01:15:39,800 E XML è fondamentalmente sta per essere [Incomprensibile] con un tipo dei nostri dati. 1598 01:15:39,800 --> 01:15:42,100 Ma non abbiamo effettivamente utilizzato XML. 1599 01:15:42,100 --> 01:15:43,430 Invece, basta usare JSON. 1600 01:15:43,430 --> 01:15:48,350 >> Quindi, fondamentalmente, è alcune data-- asincrono, JavaScript, e dei dati, 1601 01:15:48,350 --> 01:15:50,040 in questo caso, JSON. 1602 01:15:50,040 --> 01:15:52,820 E il nostro obiettivo, come abbiamo detto un po 'prima, 1603 01:15:52,820 --> 01:15:56,880 è in grado di effettuare una richiesta, hanno che fare richiesta 1604 01:15:56,880 --> 01:16:00,700 la sua cosa al sfondo, ma continua 1605 01:16:00,700 --> 01:16:02,550 fare quello che intendevano fare. 1606 01:16:02,550 --> 01:16:06,650 E poi, quando che l'informazione è pronto, poi ci incorporiamo esso. 1607 01:16:06,650 --> 01:16:08,470 >> Quindi cerchiamo di vedere cosa questo in realtà sembra. 1608 01:16:08,470 --> 01:16:11,210 E questo, si dovrebbe essere un po 'familiare 1609 01:16:11,210 --> 01:16:13,680 dal pset8, quello appena disputato. 1610 01:16:13,680 --> 01:16:16,200 Quindi, ecco un jQuery valida funzione che potremmo 1611 01:16:16,200 --> 01:16:18,250 vogliono sapere about-- questo simbolo del dollaro. 1612 01:16:18,250 --> 01:16:21,500 Così dice la funzione jQuery, GetJSON. 1613 01:16:21,500 --> 01:16:25,020 >> E che questa funzione non fa altro che prende un URL e un po 'parameters-- 1614 01:16:25,020 --> 01:16:28,000 quindi penso che nel caso di pset8, era come, 1615 01:16:28,000 --> 01:16:33,520 l'URL è stato articles.php e la Parametri era go = codice postale. 1616 01:16:33,520 --> 01:16:41,580 E dice, OK, fare una richiesta di questo URL con i parametri indicati. 1617 01:16:41,580 --> 01:16:43,480 E questo succede solo. 1618 01:16:43,480 --> 01:16:47,730 >> Quando finisce, è sia andando a completare con successo 1619 01:16:47,730 --> 01:16:49,370 o sta andando a fallire. 1620 01:16:49,370 --> 01:16:53,480 Quindi questo è l'equivalente di chiamata Rob e chiedergli di fare qualcosa. 1621 01:16:53,480 --> 01:17:00,260 E poi quando si richiama, lui è uno per dire ho finito o non sono riuscito. 1622 01:17:00,260 --> 01:17:04,030 >> Quindi, nel caso in cui tu sei fatto, si dice, OK, ho finito. 1623 01:17:04,030 --> 01:17:05,980 E allora si chiama questa funzione. 1624 01:17:05,980 --> 01:17:08,915 In questo caso, sarà un funzione che prende un po 'di informazioni. 1625 01:17:08,915 --> 01:17:12,890 Quello che di solito interessa è dati, i dati che ci sono stati effettivamente tornati 1626 01:17:12,890 --> 01:17:15,900 come conseguenza della chiamata GetJSON. 1627 01:17:15,900 --> 01:17:17,470 >> E si può fare qualcosa con esso. 1628 01:17:17,470 --> 01:17:23,670 Così, nel caso di pset8, abbiamo esposto come una lista. 1629 01:17:23,670 --> 01:17:29,050 Fail sta per essere una funzione che si chiama, se la richiesta non riesce 1630 01:17:29,050 --> 01:17:30,450 per qualsiasi ragione. 1631 01:17:30,450 --> 01:17:35,104 E nel caso di pset8, abbiamo appena console.log esso. 1632 01:17:35,104 --> 01:17:36,020 Tutte le domande su questo? 1633 01:17:36,020 --> 01:17:36,300 Già. 1634 01:17:36,300 --> 01:17:39,633 >> PUBBLICO: Possiamo solo utilizzare funzioni theta invece della funzione, textStatus, jqHXR. 1635 01:17:39,633 --> 01:17:43,464 1636 01:17:43,464 --> 01:17:44,380 HANNAH BLUMBERG: Certo. 1637 01:17:44,380 --> 01:17:46,713 Quindi sì, penso che in pset, abbiamo appena visto i dati di funzione. 1638 01:17:46,713 --> 01:17:48,700 Quindi è solo the-- sì, OK. 1639 01:17:48,700 --> 01:17:50,510 Questo è quello che abbiamo visto nel pset. 1640 01:17:50,510 --> 01:17:51,480 Questo è totalmente bene. 1641 01:17:51,480 --> 01:17:54,210 >> Questi sono solo se si voleva per estrarre ulteriori informazioni, 1642 01:17:54,210 --> 01:17:57,190 queste sono le cose che si potrebbe ottenere da GetJSON. 1643 01:17:57,190 --> 01:17:59,040 Bella domanda. 1644 01:17:59,040 --> 01:17:59,706 Qualunque altra cosa? 1645 01:17:59,706 --> 01:18:00,206 Già. 1646 01:18:00,206 --> 01:18:01,787 >> PUBBLICO: Così GetJSON è Ajax? 1647 01:18:01,787 --> 01:18:02,620 HANNAH BLUMBERG: OK. 1648 01:18:02,620 --> 01:18:05,700 Quindi questo è il tipo di parte difficile. 1649 01:18:05,700 --> 01:18:12,390 Si tratta di una funzione che consente jQuery di fare chiamate asincrone. 1650 01:18:12,390 --> 01:18:16,080 E quelle chiamate asincrone, che è quello che abbiamo riferendo come l'Ajax. 1651 01:18:16,080 --> 01:18:16,850 Già. 1652 01:18:16,850 --> 01:18:20,185 Questo mi ha portato un sacco di tempo per tirare a parte quando ero studente. 1653 01:18:20,185 --> 01:18:21,560 PUBBLICO: Si può dire che ancora una volta? 1654 01:18:21,560 --> 01:18:22,476 HANNAH BLUMBERG: Sì. 1655 01:18:22,476 --> 01:18:23,630 Posso dire che ancora una volta? 1656 01:18:23,630 --> 01:18:29,010 Questa funzione GetJSON, è una funzione jQuery. 1657 01:18:29,010 --> 01:18:31,970 E sta andando a fare una chiamata asincrona. 1658 01:18:31,970 --> 01:18:35,700 E queste chiamate asincrone, abbiamo stato riferendosi a quelli come l'Ajax. 1659 01:18:35,700 --> 01:18:39,610 1660 01:18:39,610 --> 01:18:41,872 >> Qualsiasi altra domanda? 1661 01:18:41,872 --> 01:18:43,330 Abbiamo solo un paio di minuti dalla fine. 1662 01:18:43,330 --> 01:18:45,080 E Maria sta per concludere con la sicurezza 1663 01:18:45,080 --> 01:18:47,464 e poi andremo da quasi fatto. 1664 01:18:47,464 --> 01:18:48,630 MARIA ZLATKOVA: Awesome, OK. 1665 01:18:48,630 --> 01:18:54,030 Quindi questo è-- basta prendere un paio di secondi per guardare oltre questo. 1666 01:18:54,030 --> 01:18:56,750 E questo non è qualcosa di veramente grande. 1667 01:18:56,750 --> 01:18:59,430 E qualcuno può dirmi perché? 1668 01:18:59,430 --> 01:19:05,650 Cosa sta succedendo in foo e maggio potrebbe potenzialmente causare qualcosa di brutto, 1669 01:19:05,650 --> 01:19:06,770 e ciò che si chiama? 1670 01:19:06,770 --> 01:19:07,270 Già. 1671 01:19:07,270 --> 01:19:10,391 AUDIENCE: Se l'argomento che è è passato in più di 12 caratteri, 1672 01:19:10,391 --> 01:19:11,454 potrebbe traboccare. 1673 01:19:11,454 --> 01:19:12,370 MARIA ZLATKOVA: Giusto. 1674 01:19:12,370 --> 01:19:14,180 Perfezionare. 1675 01:19:14,180 --> 01:19:15,384 Che cosa è chiamato? 1676 01:19:15,384 --> 01:19:16,300 Hai appena parlato. 1677 01:19:16,300 --> 01:19:16,840 >> PUBBLICO: Buffer overflow. 1678 01:19:16,840 --> 01:19:18,381 >> MARIA ZLATKOVA: Yup, overflow del buffer. 1679 01:19:18,381 --> 01:19:21,230 Quindi questo è qualcosa che noi riferirsi a come buffer overflow. 1680 01:19:21,230 --> 01:19:25,500 E vediamo che dentro di foo, abbiamo definito il nostro tampone, c, 1681 01:19:25,500 --> 01:19:27,240 con una dimensione di 12. 1682 01:19:27,240 --> 01:19:32,680 Tuttavia, in principale, non lo facciamo il check-in qualsiasi modo a tutti 1683 01:19:32,680 --> 01:19:36,480 se il argv1-- in modo che è stato il secondo argomento. 1684 01:19:36,480 --> 01:19:39,630 Non si controlla se il dimensione è opportuno. 1685 01:19:39,630 --> 01:19:43,380 >> Quindi, se abbiamo avuto un utente malintenzionato soprattutto 1686 01:19:43,380 --> 01:19:47,170 che ha messo in qualche argomento che era più di 12, e quindi potenzialmente 1687 01:19:47,170 --> 01:19:50,850 al di là dei limiti di tale argomento, aveva qualche codice eseguibile 1688 01:19:50,850 --> 01:19:55,570 che stava cercando di fare qualcosa di brutto con esso; allora questo, che cosa sarebbe successo, 1689 01:19:55,570 --> 01:19:59,310 sarebbe ignorare il ritorno indirizzo della funzione foo, 1690 01:19:59,310 --> 01:20:04,370 causando la funzione quando tornando per eseguire tale codice. 1691 01:20:04,370 --> 01:20:07,540 E poi le cose cattive potrebbe accadere. 1692 01:20:07,540 --> 01:20:09,850 Questo senso per tutti? 1693 01:20:09,850 --> 01:20:12,424 >> E come possiamo proteggere contro questo? 1694 01:20:12,424 --> 01:20:13,090 Eventuali suggerimenti? 1695 01:20:13,090 --> 01:20:16,480 1696 01:20:16,480 --> 01:20:21,890 Fondamentalmente, all'interno di potenzialmente foo, come 1697 01:20:21,890 --> 01:20:28,294 possiamo controllare per assicurarsi che questo non può accadere? 1698 01:20:28,294 --> 01:20:33,879 >> AUDIENCE: Se la dimensione 12 è superato, si potrebbe allocare memoria aggiuntiva? 1699 01:20:33,879 --> 01:20:37,170 MARIA ZLATKOVA: suggerimento è, allocare memoria aggiuntiva delle dimensioni superato. 1700 01:20:37,170 --> 01:20:39,800 In realtà, siamo in grado di fare qualcosa di un molto più semplice di quello. 1701 01:20:39,800 --> 01:20:44,870 Possiamo solo ottenere la lunghezza della stringa l'argomento che viene immesso, 1702 01:20:44,870 --> 01:20:48,590 verificare se questo è meno o uguale a 12-- 1703 01:20:48,590 --> 01:20:50,790 che è quello che vogliamo di essere perché non vogliamo 1704 01:20:50,790 --> 01:20:52,373 ai oltrepassato i limiti del nostro tampone. 1705 01:20:52,373 --> 01:20:55,690 E poi se non lo fa, noi può funzionare con l'argomento. 1706 01:20:55,690 --> 01:21:00,296 E poi se lo fa, vogliamo davvero di Yello potenzialmente presso l'utente. 1707 01:21:00,296 --> 01:21:01,670 Ma questo è il modo dovremmo farlo. 1708 01:21:01,670 --> 01:21:02,443 Sì. 1709 01:21:02,443 --> 01:21:04,360 >> PUBBLICO: Potresti spiegare memcpy reale veloce? 1710 01:21:04,360 --> 01:21:05,443 MARIA ZLATKOVA: Oh, mi dispiace. 1711 01:21:05,443 --> 01:21:06,040 Sì. 1712 01:21:06,040 --> 01:21:11,290 Memcpy prende qualunque è-- dispiace, OK. 1713 01:21:11,290 --> 01:21:15,850 Memcpy prende tutto ciò che è in bar, qualunque è passato 1714 01:21:15,850 --> 01:21:18,050 sul foo come argomento della riga di comando. 1715 01:21:18,050 --> 01:21:19,440 Così sta andando a prendere argv1. 1716 01:21:19,440 --> 01:21:21,420 Argv1 si chiama bar qui. 1717 01:21:21,420 --> 01:21:24,453 Così sta andando a prendere un bar e sta andando a copiarlo in c. 1718 01:21:24,453 --> 01:21:25,402 >> PUBBLICO: OK. 1719 01:21:25,402 --> 01:21:28,360 MARIA ZLATKOVA: E sta andando a copy-- il terzo argomento si riferisce solo 1720 01:21:28,360 --> 01:21:30,601 a quanto sta andando a copiare in c. 1721 01:21:30,601 --> 01:21:31,142 PUBBLICO: Ah. 1722 01:21:31,142 --> 01:21:33,030 Quindi di questo copia tutto questo allora. 1723 01:21:33,030 --> 01:21:34,310 >> MARIA ZLATKOVA: Sì, che sta copiando tutto. 1724 01:21:34,310 --> 01:21:34,810 Sì. 1725 01:21:34,810 --> 01:21:38,400 1726 01:21:38,400 --> 01:21:41,910 In primo luogo, ci assicuriamo che il bar non è uguale a null perché è un puntatore. 1727 01:21:41,910 --> 01:21:44,680 Poi abbiamo la lunghezza della stringa di bar. 1728 01:21:44,680 --> 01:21:47,530 Facciamo in modo che sia minore o uguale a 12. 1729 01:21:47,530 --> 01:21:50,070 E allora perché abbiamo fatto in modo, possiamo in realtà 1730 01:21:50,070 --> 01:21:53,122 memcpy ed essere sicuri che questo è OK. 1731 01:21:53,122 --> 01:21:53,705 Qualsiasi domanda? 1732 01:21:53,705 --> 01:21:56,280 1733 01:21:56,280 --> 01:21:58,690 Grande. 1734 01:21:58,690 --> 01:22:00,400 Ho due domande vere o false. 1735 01:22:00,400 --> 01:22:05,470 Qualcuno può dirmi subito se queste sono vere o false? 1736 01:22:05,470 --> 01:22:07,460 Sì, è falso. 1737 01:22:07,460 --> 01:22:07,960 Di preciso. 1738 01:22:07,960 --> 01:22:09,330 Entrambi sono false. 1739 01:22:09,330 --> 01:22:12,682 Quindi, utilizzando una sola password non è mai davvero una buona idea 1740 01:22:12,682 --> 01:22:14,890 perché se qualcuno sa la password, possono solo 1741 01:22:14,890 --> 01:22:16,260 accedere a tutti gli altri account. 1742 01:22:16,260 --> 01:22:19,260 E poi le icone non fare nulla per garantire la sicurezza. 1743 01:22:19,260 --> 01:22:24,900 Dovremmo cercare di solito per HTTPS invece di HTTP e l'URL. 1744 01:22:24,900 --> 01:22:28,560 >> E alcuni altri tipi di attacchi che abbiamo menzionato, 1745 01:22:28,560 --> 01:22:31,390 che David ha menzionato in conferenza, attacchi SQL injection. 1746 01:22:31,390 --> 01:22:37,310 Abbiamo già visto che se la don't-- Funzione di query CS50 fa in modo che SQL 1747 01:22:37,310 --> 01:22:39,530 non possono verificarsi attacchi di iniezione. 1748 01:22:39,530 --> 01:22:42,640 Ma se non stessimo usando CS50, citazione, unquote "in ricerca", 1749 01:22:42,640 --> 01:22:46,830 avremmo dovuto fare in modo che il l'input dell'utente non è in realtà un po 'di SQL 1750 01:22:46,830 --> 01:22:49,670 query che causerà tutto nostre tavole per essere eliminato 1751 01:22:49,670 --> 01:22:54,070 o qualcosa di brutto accadere con il nostro database. 1752 01:22:54,070 --> 01:22:56,790 >> Dirottamento di sessione è un altro tipo di attacco 1753 01:22:56,790 --> 01:23:05,940 ciò accade quando qualche cattivo persona usa la sessione un po 'della vittima 1754 01:23:05,940 --> 01:23:08,740 ID per accedere alle informazioni di accesso. 1755 01:23:08,740 --> 01:23:13,620 Così un banale esempio di ciò è come se abbiamo un computer pubblico, 1756 01:23:13,620 --> 01:23:21,120 poi la persona cattiva accede e poi hanno cookie che vengono salvati. 1757 01:23:21,120 --> 01:23:23,380 E i cookies non cambiano per la sessione. 1758 01:23:23,380 --> 01:23:27,620 >> Poi abbiamo la vittima andare in e poi accedere al sito web. 1759 01:23:27,620 --> 01:23:30,290 I cookies non cambiano per un certo sessione. 1760 01:23:30,290 --> 01:23:33,060 E poi la vittima accede al il sito e poi se ne va. 1761 01:23:33,060 --> 01:23:36,190 E poi la persona che va indietro possono poi utilizzare ancora il loro ID di sessione 1762 01:23:36,190 --> 01:23:37,430 per accedere alle informazioni. 1763 01:23:37,430 --> 01:23:40,050 Ecco, questo è un esempio di come sia potuto accadere. 1764 01:23:40,050 --> 01:23:45,570 >> E poi io non mi preoccuperei troppo di codice o qualcosa di specifico 1765 01:23:45,570 --> 01:23:49,270 come quella che potrebbe causare questo, ma avere una sorta di idea di cosa 1766 01:23:49,270 --> 01:23:51,400 le variabili coinvolte in questo sono. 1767 01:23:51,400 --> 01:23:53,897 E poi manipolando intestazione dati è un altro tipo di attacco 1768 01:23:53,897 --> 01:23:55,230 che ha David ha parlato. 1769 01:23:55,230 --> 01:23:59,730 E si riferisce solo cosa può accadere quando 1770 01:23:59,730 --> 01:24:04,300 la risposta, l'HTTP risposta all'interno della nostra testata 1771 01:24:04,300 --> 01:24:05,720 non è sterilizzata correttamente. 1772 01:24:05,720 --> 01:24:14,340 >> E una delle fields-- per esempio, se qualcuno sovrascrive uno dell'intestazione 1773 01:24:14,340 --> 01:24:18,860 I valori di contenere qualcosa di più di cosa dovrebbero contain-- e realtà 1774 01:24:18,860 --> 01:24:22,720 contenere, per esempio, un 200 Codice di stato OK, allora 1775 01:24:22,720 --> 01:24:26,890 potrebbero potenzialmente fare dannoso le cose quando non si suppone che. 1776 01:24:26,890 --> 01:24:30,815 Ma io non mi preoccuperei troppo molto circa il codice specifico 1777 01:24:30,815 --> 01:24:34,110 che potrebbe causare questo, appena sorta di comprensione 1778 01:24:34,110 --> 01:24:37,290 cose di alto livello come quella. 1779 01:24:37,290 --> 01:24:39,570 >> Penso che questo sia tutto che dobbiamo coprire. 1780 01:24:39,570 --> 01:24:40,090 Incredibile. 1781 01:24:40,090 --> 01:24:43,310 Chiunque ha tutte le domande su qualsiasi delle cose che abbiamo coperto? 1782 01:24:43,310 --> 01:24:44,213 Sì. 1783 01:24:44,213 --> 01:24:48,077 >> PUBBLICO: Così una sorta di domanda più logistico. 1784 01:24:48,077 --> 01:24:53,400 E 'il contenuto principalmente focalizzata sulle cose dopo il quiz 1? 1785 01:24:53,400 --> 01:24:55,730 >> MARIA ZLATKOVA: So domanda è, è il contenuto 1786 01:24:55,730 --> 01:24:59,720 principalmente focalizzata sulle cose dopo quiz 1? 1787 01:24:59,720 --> 01:25:06,070 Così l'attenzione è rivolta dopo quiz 1, ad eccezione 1788 01:25:06,070 --> 01:25:10,914 che abbiamo bisogno di concentrarsi sulle cose a pset5 e un sacco di strutture di dati 1789 01:25:10,914 --> 01:25:11,580 che abbiamo coperto. 1790 01:25:11,580 --> 01:25:14,300 E non si può dire che siamo può ignorare nulla prima 1791 01:25:14,300 --> 01:25:17,120 che, dato che costruisce su di essa come bene. 1792 01:25:17,120 --> 01:25:21,845 >> Quindi concentrarsi su questo, oltre a materiale pset5 come compresi collegate liste, pile, 1793 01:25:21,845 --> 01:25:23,720 code e tutto Hannah è andato oltre. 1794 01:25:23,720 --> 01:25:24,050 >> HANNAH BLUMBERG: Giusto. 1795 01:25:24,050 --> 01:25:27,450 Sì, siamo andati oltre tutte le cose C proprio all'inizio molto rapidamente. 1796 01:25:27,450 --> 01:25:29,090 Ma assicuratevi di rivedere tale. 1797 01:25:29,090 --> 01:25:32,700 Torna indietro e guardare il quiz 0 recensione. 1798 01:25:32,700 --> 01:25:36,110 >> Un paio note più logistici, proprio mentre noi abbiamo la tua attenzione. 1799 01:25:36,110 --> 01:25:39,100 Stiamo per avere gli orari d'ufficio sia il Lunedi e Martedì sera. 1800 01:25:39,100 --> 01:25:41,540 Stanno andando essere nel DM 119. 1801 01:25:41,540 --> 01:25:44,220 Questo è tutto sul sito, così se non si sente, non preoccuparti. 1802 01:25:44,220 --> 01:25:45,266 >> MARIA ZLATKOVA 8:30 alle 11:00. 1803 01:25:45,266 --> 01:25:46,260 >> HANNAH BLUMBERG: Sì, dalle 8:30 alle 11:00. 1804 01:25:46,260 --> 01:25:46,910 Ci saremo. 1805 01:25:46,910 --> 01:25:48,368 Saremo lì per rispondere alle domande. 1806 01:25:48,368 --> 01:25:49,480 E 'piuttosto freddo e divertente. 1807 01:25:49,480 --> 01:25:53,240 Voi potete fare tutte le domande che avete sul quiz 1. 1808 01:25:53,240 --> 01:25:55,740 E quiz 1 è in Mercoledì, quindi buona fortuna. 1809 01:25:55,740 --> 01:25:59,770 Se avete domande, forse venire a parlare con noi quassù uno-contro-uno. 1810 01:25:59,770 --> 01:26:00,880 Raffreddare. 1811 01:26:00,880 --> 01:26:01,630 Grazie mille. 1812 01:26:01,630 --> 01:26:02,880 >> MARIA ZLATKOVA: Grazie mille, ragazzi. 1813 01:26:02,880 --> 01:26:03,480 >> PUBBLICO: Yay. 1814 01:26:03,480 --> 01:26:05,930 >> [APPLAUSI] 1815 01:26:05,930 --> 01:26:07,530