1 00:00:00,000 --> 00:00:05,616 2 00:00:05,616 --> 00:00:07,030 >> HANNAH BLUMBERG: Olá a todos. 3 00:00:07,030 --> 00:00:09,530 Nós vamos começar apenas um par de minutos mais cedo 4 00:00:09,530 --> 00:00:11,738 uma vez que temos um lote inteiro de material para passar. 5 00:00:11,738 --> 00:00:12,790 Eu sou Hannah. 6 00:00:12,790 --> 00:00:13,865 Eu sou um TF. 7 00:00:13,865 --> 00:00:16,239 Maria vai se juntar nós em apenas alguns minutos. 8 00:00:16,239 --> 00:00:17,560 Ela ensina seção direita antes. 9 00:00:17,560 --> 00:00:19,351 Eu ensino seção direita depois, por isso estamos indo 10 00:00:19,351 --> 00:00:21,200 para mantê-lo à hora e meia. 11 00:00:21,200 --> 00:00:25,490 >> Então, como você vai ver aqui em cima, nós temos bastante alguns tópicos que precisamos para passar, 12 00:00:25,490 --> 00:00:27,200 por isso vamos estar indo um pouco rápido. 13 00:00:27,200 --> 00:00:31,140 Mas se em algum momento nós dizemos algo muito rapidamente ou você não entende, 14 00:00:31,140 --> 00:00:33,170 sinta-se livre para interromper com perguntas. 15 00:00:33,170 --> 00:00:36,610 Nós queremos ser capazes de fazer deste um avaliar sessão como útil a todos vocês 16 00:00:36,610 --> 00:00:37,973 que possível. 17 00:00:37,973 --> 00:00:38,920 Fantástica. 18 00:00:38,920 --> 00:00:41,650 >> Então, vamos saltar para a direita com alguns tópicos que nós, na verdade, 19 00:00:41,650 --> 00:00:46,980 muito, muito brevemente coberta para o questionário 0 na revisão sessão questionário 0. 20 00:00:46,980 --> 00:00:48,840 Então, começando com listas ligadas. 21 00:00:48,840 --> 00:00:52,090 Então, basta ter certeza de que alguns conhecimento básico sobre listas ligadas 22 00:00:52,090 --> 00:00:55,110 e são confortáveis ​​fazendo algumas das operações básicas. 23 00:00:55,110 --> 00:00:58,560 >> Então, só para rever, ligado listas são melhores do que as matrizes 24 00:00:58,560 --> 00:01:01,020 porque eles podem crescer de forma dinâmica. 25 00:01:01,020 --> 00:01:03,300 Portanto, temos que enorme vantagem. 26 00:01:03,300 --> 00:01:06,031 Nós vimos eles utilizado em tabelas de dispersão quando 27 00:01:06,031 --> 00:01:08,280 Não sabemos exatamente quantas coisas que vai querer 28 00:01:08,280 --> 00:01:10,900 para inserir a estrutura de dados. 29 00:01:10,900 --> 00:01:15,700 Infelizmente, temos peças de a lista vinculada todo memória, 30 00:01:15,700 --> 00:01:20,820 por isso, não será necessariamente capaz de fazer acesso em tempo constante 31 00:01:20,820 --> 00:01:22,502 para qualquer elemento na lista encadeada. 32 00:01:22,502 --> 00:01:24,210 A fim de encontrar uma nomeadamente elemento, nós 33 00:01:24,210 --> 00:01:26,510 tem para percorrer todo o forma desde o começo. 34 00:01:26,510 --> 00:01:30,610 Portanto, tenha em mente que a maior parte do operações básicas são omega de 1. 35 00:01:30,610 --> 00:01:32,130 Então inserção está indo só para tomar um. 36 00:01:32,130 --> 00:01:37,520 Excluir vai levar n desde que tem que ir encontrá-lo da lista. 37 00:01:37,520 --> 00:01:39,260 E pesquisa poderia levar, na pior das hipóteses, n. 38 00:01:39,260 --> 00:01:42,330 Nós não podemos fazer algo como busca binária em uma lista ligada 39 00:01:42,330 --> 00:01:45,101 Como não podemos apenas saltar aleatoriamente para o meio. 40 00:01:45,101 --> 00:01:45,600 Frio. 41 00:01:45,600 --> 00:01:48,160 42 00:01:48,160 --> 00:01:48,960 Fantástica. 43 00:01:48,960 --> 00:01:50,270 >> Um pouco de pilhas. 44 00:01:50,270 --> 00:01:53,980 Isso, novamente, surgiu no teste 0, para que deve ser super confortável com isso. 45 00:01:53,980 --> 00:01:57,210 Mas para pilhas, pedimos-lhe se lembrar de uma pilha de bandejas. 46 00:01:57,210 --> 00:01:59,940 E vai ser o primeiro no, último a sair. 47 00:01:59,940 --> 00:02:02,272 Então, nós empilhar as coisas na pilha e, em seguida 48 00:02:02,272 --> 00:02:04,980 se estamos tentando tirar algo off-- que chamamos o estalo fora 49 00:02:04,980 --> 00:02:06,581 o stack-- que sair do topo. 50 00:02:06,581 --> 00:02:09,289 E se queremos colocar algo na pilha, chamamos isso de empurrar. 51 00:02:09,289 --> 00:02:13,170 Por isso, sempre vai ser crescendo a partir do fundo como uma pilha de tabuleiros. 52 00:02:13,170 --> 00:02:14,540 Fantástica. 53 00:02:14,540 --> 00:02:17,607 >> Temos pilhas visto implementado com as duas listas ligadas e matrizes. 54 00:02:17,607 --> 00:02:19,440 Se você está implementando com arrays, você quer 55 00:02:19,440 --> 00:02:22,350 para certificar-se de manter o controle de tanto o tamanho e a capacidade. 56 00:02:22,350 --> 00:02:27,540 Assim, o tamanho vai ser o atual número de coisas em sua pilha, 57 00:02:27,540 --> 00:02:32,900 Considerando que a capacidade é o número total de coisas que você pode armazenar em seu stack. 58 00:02:32,900 --> 00:02:34,220 Frio. 59 00:02:34,220 --> 00:02:35,767 >> Muito semelhante, temos filas. 60 00:02:35,767 --> 00:02:38,850 Neste caso, em vez de pensar uma pilha de bandejas, pense em uma linha. 61 00:02:38,850 --> 00:02:40,697 Este vai ser o primeiro a entrar, primeiro fora. 62 00:02:40,697 --> 00:02:42,780 Então, se você está se alinhando para algo na loja, 63 00:02:42,780 --> 00:02:46,920 esperamos que a pessoa em primeiro A linha vai ser ajudado pela primeira vez. 64 00:02:46,920 --> 00:02:49,350 >> Em vez de empurrar dizendo e pop como nós fazemos para a pilha, 65 00:02:49,350 --> 00:02:52,000 nós apenas dizer enqueue e dequeue. 66 00:02:52,000 --> 00:02:54,970 E, novamente, se você estiver implementar isso com uma matriz, 67 00:02:54,970 --> 00:02:56,720 precisamos manter o controle de não só o tamanho 68 00:02:56,720 --> 00:03:02,390 e capacidade, mas também a cabeça, o que vai ser a frente da nossa fila. 69 00:03:02,390 --> 00:03:03,010 Frio. 70 00:03:03,010 --> 00:03:05,770 Quaisquer perguntas sobre nada disso? 71 00:03:05,770 --> 00:03:06,320 Fantástica. 72 00:03:06,320 --> 00:03:07,640 Seguindo em frente. 73 00:03:07,640 --> 00:03:08,564 >> OK, tabelas de hash. 74 00:03:08,564 --> 00:03:10,605 Aqui é onde começa a ficar realmente interessante. 75 00:03:10,605 --> 00:03:14,150 Assim, uma tabela hash é uma implementação de uma matriz associativa. 76 00:03:14,150 --> 00:03:16,700 Então, basicamente o que aconteceu é que temos toda essa entrada, 77 00:03:16,700 --> 00:03:18,750 e nós dá-lo a um hash função que diz: 78 00:03:18,750 --> 00:03:21,840 OK, este é o lugar onde no tabela hash ele pertence. 79 00:03:21,840 --> 00:03:24,860 >> Assim, a função hash mais simples que nós vimos é apenas dizer, 80 00:03:24,860 --> 00:03:28,170 OK, vamos supor que queremos colocar cordas em nossa tabela de hash. 81 00:03:28,170 --> 00:03:30,870 E uma idéia muito simples poderia ser a de dizer, OK, 82 00:03:30,870 --> 00:03:34,350 vamos classificar pela primeira letra da palavra. 83 00:03:34,350 --> 00:03:37,570 Assim você pode ver aqui, vamos dar banana, vamos colocá-la através de uma função hash, 84 00:03:37,570 --> 00:03:40,190 e ele diz, hey, que deve ir no índice 1. 85 00:03:40,190 --> 00:03:45,120 >> Assim, podemos pensar, essencialmente, de um hash mesa como um monte de diferentes baldes. 86 00:03:45,120 --> 00:03:49,880 E cada um desses baldes está acontecendo para segurar a cabeça de uma lista ligada. 87 00:03:49,880 --> 00:03:55,030 E nessa lista ligada é onde pudermos realmente colocar diferentes partes de dados. 88 00:03:55,030 --> 00:03:57,820 >> Então mergulho um pouco mais em uma função hash, é aqui 89 00:03:57,820 --> 00:03:59,870 o exemplo que eu apenas descrito em que apenas dizer, 90 00:03:59,870 --> 00:04:02,460 OK, pegue a primeira letra da palavra e estamos 91 00:04:02,460 --> 00:04:03,990 vai classificá-lo para os baldes. 92 00:04:03,990 --> 00:04:08,490 Assim, presumivelmente, haverá 26 baldes, um para cada letra do alfabeto. 93 00:04:08,490 --> 00:04:10,090 Por que não é este um grande função hash? 94 00:04:10,090 --> 00:04:13,461 O que torna este não-ideal? 95 00:04:13,461 --> 00:04:13,960 Sim. 96 00:04:13,960 --> 00:04:15,790 >> AUDIÊNCIA: Você está indo ter colisões. 97 00:04:15,790 --> 00:04:16,390 >> HANNAH BLUMBERG: Sim, exatamente. 98 00:04:16,390 --> 00:04:18,000 Você vai ter colisões. 99 00:04:18,000 --> 00:04:18,954 Então, isso é uma coisa. 100 00:04:18,954 --> 00:04:21,620 E vamos falar sobre como podemos fixar colisões em apenas um segundo. 101 00:04:21,620 --> 00:04:23,980 Outro problema com esta especial função hash 102 00:04:23,980 --> 00:04:25,980 é que o nosso diferente baldes vão ser 103 00:04:25,980 --> 00:04:28,960 de bastante drasticamente diferentes tamanhos. 104 00:04:28,960 --> 00:04:33,840 >> Sabemos que há um lote inteiro mais palavras que começam com A do que X, 105 00:04:33,840 --> 00:04:38,980 assim que nós vamos ter muito baldes desequilibradas em nossa tabela de hash. 106 00:04:38,980 --> 00:04:40,050 Frio. 107 00:04:40,050 --> 00:04:41,340 Então, sim, vamos voltar para o ponto de colisões. 108 00:04:41,340 --> 00:04:42,900 O que vamos fazer se houver uma colisão? 109 00:04:42,900 --> 00:04:44,490 >> Nós temos um par de opções diferentes. 110 00:04:44,490 --> 00:04:47,600 Então um, por isso suponho que estamos tentando para colocar baga em nossa tabela de hash. 111 00:04:47,600 --> 00:04:50,370 E vemos, oh, queremos para colocá-lo em um índice, 112 00:04:50,370 --> 00:04:52,070 mas a banana já vive lá. 113 00:04:52,070 --> 00:04:53,110 O que nós vamos fazer? 114 00:04:53,110 --> 00:04:54,560 Temos duas opções principais. 115 00:04:54,560 --> 00:04:58,050 >> O número um é que podemos dizer, OK, não há espaço no índice 1, 116 00:04:58,050 --> 00:05:03,210 mas vamos continuar procurando por até que possamos encontrar um outro local aberto. 117 00:05:03,210 --> 00:05:08,490 Então, vamos dizer, OK, vamos colocá-lo no ponto 3. 118 00:05:08,490 --> 00:05:09,240 Essa é uma opção. 119 00:05:09,240 --> 00:05:11,470 Isso é chamado de sondagem linear. 120 00:05:11,470 --> 00:05:15,500 >> E uma segunda opção está dizendo, OK, bem, vamos apenas fazer cada um desses baldes 121 00:05:15,500 --> 00:05:17,470 ser cabeças de listas ligadas. 122 00:05:17,470 --> 00:05:21,910 E é OK se houver mais de uma coisa em um balde. 123 00:05:21,910 --> 00:05:23,820 Nós apenas estamos indo para anexá-lo para a frente. 124 00:05:23,820 --> 00:05:26,032 Então, aqui você pode ver, OK, quando inserido baga, nós 125 00:05:26,032 --> 00:05:28,240 apenas tomou banana, tipo de empurrou-o um pouco 126 00:05:28,240 --> 00:05:29,842 e atirou uma baga lá. 127 00:05:29,842 --> 00:05:31,050 E isso é também totalmente bem. 128 00:05:31,050 --> 00:05:32,830 Isto é chamado encadeamento separado. 129 00:05:32,830 --> 00:05:38,100 Você pode pensar nisso como tipo de como uma série de cabeças de listas ligadas. 130 00:05:38,100 --> 00:05:41,950 Quaisquer perguntas sobre haxixe tabelas, funções de hash? 131 00:05:41,950 --> 00:05:44,290 Fantástica. 132 00:05:44,290 --> 00:05:45,470 >> Árvores e tentativas. 133 00:05:45,470 --> 00:05:47,287 Assim, uma árvore é qualquer tipo da estrutura de dados 134 00:05:47,287 --> 00:05:49,453 em que há algum tipo de hierarquia ou algum tipo 135 00:05:49,453 --> 00:05:51,247 do ranking de seus objetos diferentes. 136 00:05:51,247 --> 00:05:53,580 E isso vai se tornar super- claro quando vemos um exemplo. 137 00:05:53,580 --> 00:05:56,960 E vimos tentativas, ao longo com tabelas de hash, em pset5-- 138 00:05:56,960 --> 00:06:00,700 que, novamente, jogo totalmente justo para este quiz-- como outra dados 139 00:06:00,700 --> 00:06:03,110 estruturas que pudermos armazenar coisas diferentes. 140 00:06:03,110 --> 00:06:06,782 No caso de dicionário, nós guardamos um monte de palavras. 141 00:06:06,782 --> 00:06:08,240 Então, vamos dar uma olhada em algumas árvores. 142 00:06:08,240 --> 00:06:10,190 Portanto, este é um exemplo de uma árvore. 143 00:06:10,190 --> 00:06:13,105 Ele tem um tipo de estrutura, que a estrutura hierárquica, 144 00:06:13,105 --> 00:06:15,920 onde você pode ver que este nó 1 no topo 145 00:06:15,920 --> 00:06:20,750 tem algum tipo de classificação acima de 2 e 3, que são acima de 4, 5, e 6 e 7, 146 00:06:20,750 --> 00:06:22,860 que são acima de 8 e 9. 147 00:06:22,860 --> 00:06:25,210 Então, isso é tudo o que entendemos por uma árvore, de modo que você pode apenas tipo 148 00:06:25,210 --> 00:06:26,660 de imaginar isso na sua cabeça. 149 00:06:26,660 --> 00:06:29,050 >> Agora, temos um par de árvores mais especializados. 150 00:06:29,050 --> 00:06:31,070 Assim, um exemplo é uma árvore binária. 151 00:06:31,070 --> 00:06:33,290 E uma árvore binária é, novamente, só vai ser 152 00:06:33,290 --> 00:06:37,040 uma estrutura de dados com algum tipo de hierarquia, mas cada um dos nós 153 00:06:37,040 --> 00:06:38,650 pode ter, no máximo, duas crianças. 154 00:06:38,650 --> 00:06:41,530 É aí que a palavra vem de binário. 155 00:06:41,530 --> 00:06:43,410 Portanto, este é um exemplo de uma árvore binária. 156 00:06:43,410 --> 00:06:45,720 Então essa é uma categoria menor de árvores. 157 00:06:45,720 --> 00:06:48,960 >> Agora vamos ficar ainda mais específica e falar sobre o binário de busca binária trees-- 158 00:06:48,960 --> 00:06:51,310 árvores, em vez. 159 00:06:51,310 --> 00:06:56,430 Então, aqui a ideia é não só cada nó ter no máximo dois filhos, 160 00:06:56,430 --> 00:07:00,300 mas todas as crianças para o esquerda vão ser menor 161 00:07:00,300 --> 00:07:03,450 e todas as crianças para o direito vai ser maior. 162 00:07:03,450 --> 00:07:05,890 Então, observe apenas em nossa árvore binária, não há 163 00:07:05,890 --> 00:07:08,650 nenhuma relação entre os números. 164 00:07:08,650 --> 00:07:12,990 Mas, em nossa busca binária árvore, vemos, OK, aqui é 44. 165 00:07:12,990 --> 00:07:17,080 E cada número à esquerda é de 44 tudo o menor e para a direita 166 00:07:17,080 --> 00:07:17,920 é maior. 167 00:07:17,920 --> 00:07:20,130 >> E que mantém em cada nível da árvore. 168 00:07:20,130 --> 00:07:24,810 Assim, aqui, é menor do que esta 22 e esta é maior do que 22. 169 00:07:24,810 --> 00:07:26,390 E isso é árvore binária de pesquisa. 170 00:07:26,390 --> 00:07:28,900 Por que achamos que ele é chamado uma árvore de busca binária? 171 00:07:28,900 --> 00:07:30,651 O algoritmo é que lembrá-lo de? 172 00:07:30,651 --> 00:07:31,650 AUDIÊNCIA: Pesquisa binária. 173 00:07:31,650 --> 00:07:32,480 HANNAH BLUMBERG: Pesquisa binária. 174 00:07:32,480 --> 00:07:35,150 Porque se você está procurando um número especial nesta árvore, 175 00:07:35,150 --> 00:07:38,800 em cada ponto, você pode simplesmente bater off metade da árvore, o que é ótimo. 176 00:07:38,800 --> 00:07:43,800 E assim que vai nos dar algo que se parece muito com pesquisa binária. 177 00:07:43,800 --> 00:07:45,870 Alguma pergunta? 178 00:07:45,870 --> 00:07:47,570 Tudo bem, legal. 179 00:07:47,570 --> 00:07:48,560 >> Tudo bem, tenta. 180 00:07:48,560 --> 00:07:49,657 Todos favorito. 181 00:07:49,657 --> 00:07:51,990 Portanto, este é o exemplo que nós vimos um monte de classe. 182 00:07:51,990 --> 00:07:54,710 E, novamente, este é apenas mais um maneira que nós podemos armazenar dados. 183 00:07:54,710 --> 00:07:57,530 No caso de dicionário, novamente, isso é apenas vai ser strings. 184 00:07:57,530 --> 00:08:00,870 Então, vamos ver o que isso realmente Parece que a um nível ligeiramente inferior. 185 00:08:00,870 --> 00:08:03,690 >> Então, vamos dar uma olhada num nó numa trie. 186 00:08:03,690 --> 00:08:07,532 E vemos, OK, não vai ser um booleana e um nó, 187 00:08:07,532 --> 00:08:09,170 um ponteiro para um nó. 188 00:08:09,170 --> 00:08:11,400 E vemos que a Boolean é chamado is_word. 189 00:08:11,400 --> 00:08:13,490 Então, basicamente, é isso vai corresponder 190 00:08:13,490 --> 00:08:16,750 para estes pequenos triângulos que diz, se você chegou aqui, 191 00:08:16,750 --> 00:08:19,100 você encontrou uma palavra completa. 192 00:08:19,100 --> 00:08:23,670 >> Sabemos que "turing" over aqui é uma palavra completa, 193 00:08:23,670 --> 00:08:28,030 Considerando apenas T-L-R não é uma palavra porque nós não vemos que pouco delta. 194 00:08:28,030 --> 00:08:31,440 E aquele pequeno delta, mais uma vez, corresponde a este is_word, 195 00:08:31,440 --> 00:08:34,480 este is_word booleana. 196 00:08:34,480 --> 00:08:36,320 E então nós temos uma variedade de crianças. 197 00:08:36,320 --> 00:08:39,860 Assim, em cada nível, você tem um determinado nó, 198 00:08:39,860 --> 00:08:42,470 e esse nó aponta para um matriz de todo o alfabeto. 199 00:08:42,470 --> 00:08:44,346 >> Assim você pode ver, mais uma vez, neste picture-- eu sou 200 00:08:44,346 --> 00:08:48,170 vai manter a saltar para trás e forth-- que essa matriz no topo 201 00:08:48,170 --> 00:08:51,640 tem um monte de diferente nós saindo dela. 202 00:08:51,640 --> 00:08:57,140 Ele tem 26 anos, ou 27 se você quiser para incluir um carácter adicional. 203 00:08:57,140 --> 00:09:01,320 E isso nos dá uma maneira de armazenar os nossos dados 204 00:09:01,320 --> 00:09:04,450 de uma forma que pode ser encarado que você pode olhar para cima super rápido. 205 00:09:04,450 --> 00:09:06,650 Qual é o tempo de pesquisa para uma trie? 206 00:09:06,650 --> 00:09:07,970 >> AUDIÊNCIA: [inaudível]. 207 00:09:07,970 --> 00:09:08,300 >> HANNAH BLUMBERG: Yeah. 208 00:09:08,300 --> 00:09:09,550 Em teoria, é hora constante. 209 00:09:09,550 --> 00:09:13,230 Ele só vai ser do tamanho de a palavra que você quer olhar para cima. 210 00:09:13,230 --> 00:09:15,950 Mesmo se somarmos um zilhão Mais palavras para nosso trie, 211 00:09:15,950 --> 00:09:18,160 ele não está indo para nos levar mais tempo para determinar 212 00:09:18,160 --> 00:09:19,690 se uma palavra está no trie. 213 00:09:19,690 --> 00:09:21,412 Então, isso é muito bom. 214 00:09:21,412 --> 00:09:23,697 >> AUDIÊNCIA: Você acabou inicializar essa matriz? 215 00:09:23,697 --> 00:09:24,780 Você perdeu um ponto ou dois. 216 00:09:24,780 --> 00:09:26,130 Você pode apenas falar sobre que por um segundo? 217 00:09:26,130 --> 00:09:26,680 >> HANNAH BLUMBERG: Claro, absolutamente. 218 00:09:26,680 --> 00:09:27,590 Boa pergunta. 219 00:09:27,590 --> 00:09:31,140 A questão era: nós tem uma matriz que é 220 00:09:31,140 --> 00:09:34,180 vai ter estrela nó como oposição a apenas nó, certo? 221 00:09:34,180 --> 00:09:35,180 Frio. 222 00:09:35,180 --> 00:09:37,990 Então, aqui o que estamos dizendo é a nossa matriz é apenas 223 00:09:37,990 --> 00:09:40,035 vai ser ponteiros para outras matrizes. 224 00:09:40,035 --> 00:09:42,910 Por isso é que tipo de essentially-- se sente como uma lista ligada desta forma 225 00:09:42,910 --> 00:09:46,620 onde cada uma destas crianças basta apontar para o próximo nó. 226 00:09:46,620 --> 00:09:49,030 >> E a maneira que nós realmente determinar, hey, OK, 227 00:09:49,030 --> 00:09:52,320 nós iterado através de um todo palavra, é esta palavra no dicionário, 228 00:09:52,320 --> 00:09:54,476 nós apenas verificar este is_word. 229 00:09:54,476 --> 00:09:55,100 Ótima pergunta. 230 00:09:55,100 --> 00:09:55,675 Sim. 231 00:09:55,675 --> 00:09:56,216 AUDIÊNCIA: OK. 232 00:09:56,216 --> 00:09:57,470 Então, qual foi o tempo de execução para o trie? 233 00:09:57,470 --> 00:09:58,386 >> HANNAH BLUMBERG: Claro. 234 00:09:58,386 --> 00:10:01,852 Assim, o tempo de execução para um trie para lookup vai ser de tempo constante. 235 00:10:01,852 --> 00:10:04,310 Por isso, só vai ser o número de letras da palavra. 236 00:10:04,310 --> 00:10:06,310 Não é dependente do tamanho do dicionário 237 00:10:06,310 --> 00:10:09,510 ou o tamanho da estrutura de dados. 238 00:10:09,510 --> 00:10:12,170 Então aqui está um exemplo um pouco mais simples. 239 00:10:12,170 --> 00:10:15,430 >> Neste caso, você pode ver que a palavra morcego é no dicionário 240 00:10:15,430 --> 00:10:18,900 e você tem zoom, mas você não tem algo como zoológico. 241 00:10:18,900 --> 00:10:20,050 Como poderíamos fazer zoológico? 242 00:10:20,050 --> 00:10:24,276 Como é que vamos adicionar ao nosso zoológico dicionário, para a nossa trie? 243 00:10:24,276 --> 00:10:24,776 Sim. 244 00:10:24,776 --> 00:10:27,014 >> AUDIÊNCIA: Faça is_word verdadeiro para o [inaudível]. 245 00:10:27,014 --> 00:10:27,930 HANNAH BLUMBERG: Good. 246 00:10:27,930 --> 00:10:31,731 Então nós diríamos Z-O-O, e então nós quer marcar essa caixa também. 247 00:10:31,731 --> 00:10:32,230 Ótimo. 248 00:10:32,230 --> 00:10:35,160 249 00:10:35,160 --> 00:10:37,930 Vamos comparar muito brevemente tenta contra tabelas de hash. 250 00:10:37,930 --> 00:10:39,770 Tries são realmente grandes porque, como dissemos, 251 00:10:39,770 --> 00:10:41,610 eles fornecer pesquisa de tempo constante. 252 00:10:41,610 --> 00:10:44,285 Mas a enorme desvantagem é que eles são gigantescos marcam presença. 253 00:10:44,285 --> 00:10:46,160 Você pode obter o sentido, até mesmo de olhar para ele, 254 00:10:46,160 --> 00:10:48,454 que vai levar uma quantidade enorme de memória. 255 00:10:48,454 --> 00:10:50,620 Então, eles vão ser muito maior do que tabelas de hash, 256 00:10:50,620 --> 00:10:52,270 mas eles vão dar nos tempos de pesquisa muito mais rápido. 257 00:10:52,270 --> 00:10:54,478 Então, esse é o tipo do seu tradeoff, o que você se preocupa, 258 00:10:54,478 --> 00:10:57,350 quer se trate de velocidade ou memória. 259 00:10:57,350 --> 00:11:02,251 Quaisquer perguntas sobre qualquer um dos que, todas as estruturas de dados C. 260 00:11:02,251 --> 00:11:02,750 Bela. 261 00:11:02,750 --> 00:11:03,250 ESTÁ BEM. 262 00:11:03,250 --> 00:11:07,322 Nós vamos passar para um pouco bit de desenvolvimento web com Maria. 263 00:11:07,322 --> 00:11:08,280 MARIA ZLATKOVA: Lovely. 264 00:11:08,280 --> 00:11:09,036 ESTÁ BEM. 265 00:11:09,036 --> 00:11:10,380 >> HANNAH BLUMBERG: Você pode usar o meu laptop. 266 00:11:10,380 --> 00:11:11,255 >> MARIA ZLATKOVA: Nice. 267 00:11:11,255 --> 00:11:13,320 268 00:11:13,320 --> 00:11:14,912 OK legal. 269 00:11:14,912 --> 00:11:17,120 À medida que avançamos agora para web desenvolvimento, nós conversamos um pouco 270 00:11:17,120 --> 00:11:20,680 sobre permissões mudança de arquivos e diretórios 271 00:11:20,680 --> 00:11:24,190 de modo que eles podem ser acessíveis para outros usuários, para o mundo, 272 00:11:24,190 --> 00:11:28,640 e para que possamos ver como basicamente, podemos transmitir-lhes 273 00:11:28,640 --> 00:11:32,600 quando desenvolvemos coisas como sites que em sua maioria tem feito. 274 00:11:32,600 --> 00:11:36,400 >> Então vimos o comando chmod, que é o modo de mudança, basicamente. 275 00:11:36,400 --> 00:11:39,300 Isso é um comando Linux e ele muda as permissões de acesso 276 00:11:39,300 --> 00:11:40,410 de objetos do sistema de arquivos. 277 00:11:40,410 --> 00:11:43,370 E um objeto de sistema de arquivos é apenas um diretório, um arquivo, 278 00:11:43,370 --> 00:11:46,810 qualquer coisa que você puder alterar as permissões de. 279 00:11:46,810 --> 00:11:53,750 >> Então, para ver as permissões de arquivo, que digite o comando ls, lista, -l. 280 00:11:53,750 --> 00:11:56,500 E quando nós digitamos isso, costumamos ver algumas permissões 281 00:11:56,500 --> 00:11:59,660 que tipo de olhar como este na frente de um nome de diretório. 282 00:11:59,660 --> 00:12:01,260 Então d refere-se ao diretório. 283 00:12:01,260 --> 00:12:05,930 E então nós temos três tríades que basicamente 284 00:12:05,930 --> 00:12:11,675 consulte as permissões de ambos um usuário, um grupo, ou do mundo. 285 00:12:11,675 --> 00:12:16,490 >> Os tipos de permissões que pudermos tem para estes três grupos de pessoas 286 00:12:16,490 --> 00:12:20,830 são ou r para leitura, w para escrever, e x para executar. 287 00:12:20,830 --> 00:12:23,650 E podemos ter aqueles para o grupo eo mundo também. 288 00:12:23,650 --> 00:12:26,940 O mais curioso é que, por vezes, quando digitar o comando chmod, 289 00:12:26,940 --> 00:12:32,960 iríamos digite algum número que consistia em três pedaços. 290 00:12:32,960 --> 00:12:36,990 Assim nós poderíamos fazer, como 777 e que basicamente 291 00:12:36,990 --> 00:12:40,450 se refere ao valor acrescentado de cada uma destas tríades 292 00:12:40,450 --> 00:12:45,060 r porque remete a 4, w faria referem-se a 2, e x se referem a 1, 293 00:12:45,060 --> 00:12:50,020 Assim, quando adicionados, cada um dos números desceria para um número cumulativo 294 00:12:50,020 --> 00:12:52,750 para um valor cumulativo entre 0 e 7. 295 00:12:52,750 --> 00:12:55,150 Por isso, também pode ter 0 para nenhuma permissão em tudo. 296 00:12:55,150 --> 00:12:58,200 E isso seria, basicamente, nos dar as permissões para qualquer usuário, 297 00:12:58,200 --> 00:13:00,450 o grupo, ou do mundo. 298 00:13:00,450 --> 00:13:02,620 Quaisquer perguntas sobre esta tão longe? 299 00:13:02,620 --> 00:13:05,331 >> AUDIÊNCIA: Você disse que li foi 4? 300 00:13:05,331 --> 00:13:06,164 MARIA ZLATKOVA: Sim. 301 00:13:06,164 --> 00:13:07,568 AUDIÊNCIA: [inaudível]. 302 00:13:07,568 --> 00:13:08,504 HANNAH BLUMBERG: Yup. 303 00:13:08,504 --> 00:13:11,790 AUDIÊNCIA: E, em seguida, adicionando todos aqueles outros iria indicar o seu número. 304 00:13:11,790 --> 00:13:12,665 MARIA ZLATKOVA: Yeah. 305 00:13:12,665 --> 00:13:14,970 Sim. 306 00:13:14,970 --> 00:13:17,810 Estas são grandes questões. 307 00:13:17,810 --> 00:13:20,490 Adorável. 308 00:13:20,490 --> 00:13:25,340 Em seguida, nós pulamos para dentro HTML e um pouco mais sobre desenvolvimento web. 309 00:13:25,340 --> 00:13:27,990 Então HTML significa apenas Linguagem de marcação de hipertexto. 310 00:13:27,990 --> 00:13:30,460 E essa é a marcação linguagem que é um padrão 311 00:13:30,460 --> 00:13:32,720 que é usado para criar páginas web. 312 00:13:32,720 --> 00:13:35,750 >> Chama-se uma linguagem de marcação porque não é realmente compilado. 313 00:13:35,750 --> 00:13:40,310 Ele não diz como algum código deve ser executado ou qualquer coisa assim. 314 00:13:40,310 --> 00:13:44,800 Ele só delineia e descreve como uma web 315 00:13:44,800 --> 00:13:46,840 A página deve ser criada com cada um dos seus elementos 316 00:13:46,840 --> 00:13:48,460 e como eles devem olhar para o usuário. 317 00:13:48,460 --> 00:13:53,090 318 00:13:53,090 --> 00:13:57,110 >> Algumas das tags HTML que nós passou por cima são os seguintes. 319 00:13:57,110 --> 00:14:00,500 Todos os nossos documentos HTML começou com o DOCTYPE html. 320 00:14:00,500 --> 00:14:02,550 Então, temos sempre a tag html. 321 00:14:02,550 --> 00:14:03,930 Nós temos uma cabeça e um corpo. 322 00:14:03,930 --> 00:14:07,890 E é importante que o HTML tem este tipo de estrutura aninhada 323 00:14:07,890 --> 00:14:09,280 porque é muito claro. 324 00:14:09,280 --> 00:14:13,200 E, em seguida, torna-se muito claro quando precisa abrir e, na verdade, as etiquetas próximos. 325 00:14:13,200 --> 00:14:18,400 E nós sempre precisa fechar tags que nós já abriu. 326 00:14:18,400 --> 00:14:23,170 >> E aqui temos alguns dos tipos à frente das coisas que queremos ter. 327 00:14:23,170 --> 00:14:26,580 Portanto, temos, por exemplo, o título do CS50. 328 00:14:26,580 --> 00:14:31,980 E então nós realmente pode vincular uma folha de estilo 329 00:14:31,980 --> 00:14:34,030 que define como nós denominar nosso site. 330 00:14:34,030 --> 00:14:35,650 Isso é CSS. 331 00:14:35,650 --> 00:14:39,320 Nós vamos passar por isso no próximo par de lâminas bem. 332 00:14:39,320 --> 00:14:42,580 >> Dentro do corpo, definimos algumas classes e IDs. 333 00:14:42,580 --> 00:14:45,860 E como um lembrete, mais uma vez, IDs são únicos e aulas 334 00:14:45,860 --> 00:14:47,390 podem ser atribuídos a vários itens. 335 00:14:47,390 --> 00:14:52,110 E isso apenas significa que podemos usar classes e IDs 336 00:14:52,110 --> 00:14:55,860 dentro de outro structures-- assim, para exemplo, dentro de arquivos CSS ou estilo 337 00:14:55,860 --> 00:15:00,940 sheets-- referir-se a elementos específicos e, basicamente, dizer que quer denominar 338 00:15:00,940 --> 00:15:03,280 ou projetar algum elemento de alguma forma especial. 339 00:15:03,280 --> 00:15:06,440 E nos referimos a eles por seus IDs e classes. 340 00:15:06,440 --> 00:15:09,870 E nós também pode se referir a coisas diferentes por marcas, bem como, 341 00:15:09,870 --> 00:15:13,830 mas IDs e classes apenas dar-nos alguns versatilidade e especificamente o que nós 342 00:15:13,830 --> 00:15:15,850 deseja consultar. 343 00:15:15,850 --> 00:15:19,620 >> Portanto, apenas um exemplo. 344 00:15:19,620 --> 00:15:22,730 Podemos, novamente, dentro de um arquivo CSS em que 345 00:15:22,730 --> 00:15:25,770 quer definir alguns style-- assim cores, fontes, 346 00:15:25,770 --> 00:15:30,340 e coisas assim isso-- que pudermos definir o estilo para um corpo. 347 00:15:30,340 --> 00:15:32,640 Assim que o definiria para toda a tag body. 348 00:15:32,640 --> 00:15:36,160 Mas então também podemos definir um estilo para um #title. 349 00:15:36,160 --> 00:15:40,390 E, novamente, a hashtag refere-se ao nosso ID eo ponto refere-se a nossa classe. 350 00:15:40,390 --> 00:15:44,760 >> E, em seguida, para os .info, nós Também é possível definir alguns atributos. 351 00:15:44,760 --> 00:15:49,750 E, novamente, quando voltar, nós tivemos nossa classe chamada informações e nosso título ID. 352 00:15:49,750 --> 00:15:53,422 E podemos ver que nos referimos a eles por #title e .info. 353 00:15:53,422 --> 00:15:55,380 AUDIÊNCIA: Você diria hashtag [? adote-me? ?] 354 00:15:55,380 --> 00:15:55,725 MARIA ZLATKOVA: Desculpe? 355 00:15:55,725 --> 00:15:58,120 AUDIÊNCIA: Você diria hashtag [? adote-me? ?] 356 00:15:58,120 --> 00:16:01,400 MARIA ZLATKOVA: Hashtag significa ID, assim #title 357 00:16:01,400 --> 00:16:07,890 refere-se a quaisquer elementos ter este ID chamado título. 358 00:16:07,890 --> 00:16:10,735 E, em seguida, o ponto refere-se a uma classe. 359 00:16:10,735 --> 00:16:14,590 Então, .info refere-se a este elemento porque tem a informação de classe. 360 00:16:14,590 --> 00:16:15,090 Sim. 361 00:16:15,090 --> 00:16:17,905 >> AUDIÊNCIA: Por que você distingui-los no HTML? 362 00:16:17,905 --> 00:16:20,985 Por que você diz certas coisas são IDs e certas coisas são de classe? 363 00:16:20,985 --> 00:16:22,610 MARIA ZLATKOVA: Isso é apenas até você-- 364 00:16:22,610 --> 00:16:24,151 HANNAH BLUMBERG: Repita a pergunta. 365 00:16:24,151 --> 00:16:25,370 MARIA ZLATKOVA: Oh, desculpe. 366 00:16:25,370 --> 00:16:29,480 Por que nós distinguir certos elementos como IDs e outros elementos como aulas? 367 00:16:29,480 --> 00:16:34,760 Isso é só porque é realmente muitas vezes uma escolha design. 368 00:16:34,760 --> 00:16:38,520 Ele lhe dá um monte de versatilidade em ser 369 00:16:38,520 --> 00:16:43,250 capaz de dizer que eu quero este item específico para ter este ID, porque eles querem 370 00:16:43,250 --> 00:16:45,300 para fazer um monte de coisas com ele, e eu só 371 00:16:45,300 --> 00:16:50,010 quer definir um estilo, certo estilo ou o que quer que a cor desse item. 372 00:16:50,010 --> 00:16:52,630 E a maneira de fazer isso é apenas dando-lhe um ID. 373 00:16:52,630 --> 00:16:55,060 >> E então, se eu quero ter um par de itens diferentes 374 00:16:55,060 --> 00:16:58,940 Tendo em que, em vez de indo e definindo their-- 375 00:16:58,940 --> 00:17:03,840 em vez de fazê-lo por tag porque a tag faria 376 00:17:03,840 --> 00:17:07,369 definir a célula para toda a marcação para cada vez que tag é usada, 377 00:17:07,369 --> 00:17:09,740 você pode definir uma classe para vários itens. 378 00:17:09,740 --> 00:17:15,109 E depois é só acessar essa classe e dizer Eu quero denominar esta classe dessa maneira. 379 00:17:15,109 --> 00:17:17,579 >> E mais uma vez, a classe pode ser vários itens diferentes 380 00:17:17,579 --> 00:17:21,150 eo ID tem de ser único. 381 00:17:21,150 --> 00:17:21,849 Grandes questões. 382 00:17:21,849 --> 00:17:25,339 Alguma outra pergunta? 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 Mais uma vez, esta é a forma como estes seletores são referenciados em CSS, com hashtag, 386 00:17:35,330 --> 00:17:40,031 com um ponto, ou sem qualquer coisa para atribuindo o estilo de algum tag, 387 00:17:40,031 --> 00:17:40,530 como corpo. 388 00:17:40,530 --> 00:17:43,500 389 00:17:43,500 --> 00:17:47,860 E aqui temos a geral sintaxe de como isso é feito. 390 00:17:47,860 --> 00:17:52,830 391 00:17:52,830 --> 00:17:55,680 >> Para repetir alguns melhor práticas para HTML e CSS, 392 00:17:55,680 --> 00:17:59,170 precisamos, mais uma vez, feche todos as tags HTML que se abrem. 393 00:17:59,170 --> 00:18:03,950 E o que nós recomendamos que você fazer para seus projetos finais, 394 00:18:03,950 --> 00:18:10,560 bem como para CS50 Finanças, é fazer Certifique-se de que todo o seu HTML valida. 395 00:18:10,560 --> 00:18:12,920 E isso é feito com a W3 Validador. 396 00:18:12,920 --> 00:18:16,940 >> E então o que fizemos e o que nós recomendamos fazer 397 00:18:16,940 --> 00:18:19,790 se separar o estilo, assim CSS de marcação HTML. 398 00:18:19,790 --> 00:18:24,210 Assim, qualquer coisa que se refere à forma como sua página vai olhar visualmente 399 00:18:24,210 --> 00:18:27,330 e como ele vai ser modificado deve ir para um documento CSS. 400 00:18:27,330 --> 00:18:33,880 E então sua marcação dizendo como as coisas estão em relação uns aos outros é HTML, 401 00:18:33,880 --> 00:18:37,550 e que deve ir para dentro de seus documentos HTML. 402 00:18:37,550 --> 00:18:38,590 Alguma pergunta? 403 00:18:38,590 --> 00:18:39,226 Mhm. 404 00:18:39,226 --> 00:18:42,628 >> AUDIÊNCIA: O que exatamente está acontecendo com a validação de página 405 00:18:42,628 --> 00:18:47,945 quando estamos validando o HTML que [inaudível] criado? 406 00:18:47,945 --> 00:18:49,850 >> MARIA ZLATKOVA: Então acho que você what--. 407 00:18:49,850 --> 00:18:53,020 Então, o que exatamente está acontecendo com a validação de página 408 00:18:53,020 --> 00:18:55,570 e por que precisamos de fazer isso? 409 00:18:55,570 --> 00:18:59,180 Basicamente, nós precisamos fazer isso porque um monte de vezes, o seu browser, 410 00:18:59,180 --> 00:19:01,390 se você não fechar uma tag ou algo assim, 411 00:19:01,390 --> 00:19:05,680 o navegador ainda está em curso para processar uma página e ainda pode trabalhar, 412 00:19:05,680 --> 00:19:10,840 mas é a melhor prática para se certificar de que você, novamente, fechou todas as suas marcas, 413 00:19:10,840 --> 00:19:13,190 que todos os seus elementos são a maneira que eles devem ser, 414 00:19:13,190 --> 00:19:18,470 e, basicamente, que é pelo convenções que são predefinidos. 415 00:19:18,470 --> 00:19:21,970 >> É, mais uma vez, apenas um coisa que você deve 416 00:19:21,970 --> 00:19:24,040 estar aprendendo a fazer, em oposição a ter 417 00:19:24,040 --> 00:19:25,696 código sloppier e coisas assim. 418 00:19:25,696 --> 00:19:26,688 Sim. 419 00:19:26,688 --> 00:19:27,680 Oh, desculpe. 420 00:19:27,680 --> 00:19:29,221 Eu pensei que você estava levantando sua mão. 421 00:19:29,221 --> 00:19:31,240 AUDIÊNCIA: Não, eu era apenas [inaudível]. 422 00:19:31,240 --> 00:19:33,800 >> MARIA ZLATKOVA: OK. 423 00:19:33,800 --> 00:19:34,640 >> AUDIÊNCIA: Obrigado. 424 00:19:34,640 --> 00:19:36,181 >> MARIA ZLATKOVA: Claro, obrigado. 425 00:19:36,181 --> 00:19:41,680 Então, novamente, acontecendo em como a informação é transferida 426 00:19:41,680 --> 00:19:44,630 e modelos de comunicação para transferir informações. 427 00:19:44,630 --> 00:19:45,730 TCP / IP. 428 00:19:45,730 --> 00:19:48,600 TCP apenas significa Transmission Protocolo de Controle e IP 429 00:19:48,600 --> 00:19:51,260 refere-se ao Internet Protocol. 430 00:19:51,260 --> 00:19:54,275 E isso só se refere a a forma como os dados são entregues. 431 00:19:54,275 --> 00:19:59,470 432 00:19:59,470 --> 00:20:02,710 >> Se temos alguns dados que precisa de ser entregue para você-- assim 433 00:20:02,710 --> 00:20:06,770 você faz um pedido para um determinado servidor. 434 00:20:06,770 --> 00:20:09,800 Por exemplo, quando tentar acessar cs50.net, 435 00:20:09,800 --> 00:20:12,420 fazemos um pedido para o servidor CS50 e nós 436 00:20:12,420 --> 00:20:14,720 ver que queremos chegar esse tipo de informação. 437 00:20:14,720 --> 00:20:19,294 E, em seguida, são baseadas neste protocolo para saber como esta informação é entregue, 438 00:20:19,294 --> 00:20:21,460 o servidor de informações dá de volta para nós, o cliente. 439 00:20:21,460 --> 00:20:25,590 E então somos capazes de visualizar a informação para a página 440 00:20:25,590 --> 00:20:26,390 e, em seguida, usá-lo. 441 00:20:26,390 --> 00:20:29,300 442 00:20:29,300 --> 00:20:33,050 >> Então, em seguida, Protocolo de Transferência de Hipertexto é apenas um outro protocolo ou definir 443 00:20:33,050 --> 00:20:37,470 das convenções que define como o navegador da Web eo servidor web 444 00:20:37,470 --> 00:20:38,890 deve comunicar. 445 00:20:38,890 --> 00:20:43,730 E colocar isso tudo em conjunto, HTTP, novamente, 446 00:20:43,730 --> 00:20:50,960 apenas define como este hipertexto definido pelo HTML que temos vindo a trabalhar-lo, 447 00:20:50,960 --> 00:20:59,500 como deve ser entregue a você e como que os dados que é entregue a você 448 00:20:59,500 --> 00:21:00,540 chega a você. 449 00:21:00,540 --> 00:21:05,990 >> E é por isso, se vocês me lembro de uma classe, tivemos um monte de pedidos 450 00:21:05,990 --> 00:21:08,970 e tivemos um monte de sintaxe para estes pedidos que estamos 451 00:21:08,970 --> 00:21:10,250 vai passar por cima de agora. 452 00:21:10,250 --> 00:21:13,270 Então, novamente, quando enviamos um pedido para um servidor, 453 00:21:13,270 --> 00:21:15,920 temos que definir um par de coisas. 454 00:21:15,920 --> 00:21:18,520 Por isso, precisamos de encontrar o tipo do pedido de que estamos assentados. 455 00:21:18,520 --> 00:21:22,180 E, novamente, temos, por exemplo, GET é um tipo de método 456 00:21:22,180 --> 00:21:25,290 que temos em nosso pedido. 457 00:21:25,290 --> 00:21:31,710 >> E, em seguida, HTTP / 1.1 é apenas o protocolo que estamos usando atualmente. 458 00:21:31,710 --> 00:21:34,224 459 00:21:34,224 --> 00:21:36,890 A maior parte do tempo, que vai com o protocolo que estamos usando. 460 00:21:36,890 --> 00:21:40,290 Então, se você tem uma pergunta como que em seu quiz. 461 00:21:40,290 --> 00:21:43,120 Isso é as convenções que temos até agora. 462 00:21:43,120 --> 00:21:46,580 >> Backslash refere-se a que tipo de coisas que estamos pedindo. 463 00:21:46,580 --> 00:21:52,810 Em seguida, o nosso hospedeiro é, por exemplo, neste caso, estamos tentando ir para google.com. 464 00:21:52,810 --> 00:21:57,070 Portanto, este é o valor para um host. 465 00:21:57,070 --> 00:21:59,330 Este é um tipo de pedido que poderia ser enviada. 466 00:21:59,330 --> 00:22:02,890 >> E em seguida, um tipo de resposta que poderia ser enviado, de novo, com base neste protocolo, 467 00:22:02,890 --> 00:22:05,190 é novamente, HTTP / 1.1. 468 00:22:05,190 --> 00:22:07,150 Então essa é a versão HTTP novamente. 469 00:22:07,150 --> 00:22:09,730 200 OK é apenas o código de status. 470 00:22:09,730 --> 00:22:12,860 E que OK é apenas uma frase com base nesse código de status. 471 00:22:12,860 --> 00:22:15,520 >> E, em seguida, o Content-Type refere-se ao tipo 472 00:22:15,520 --> 00:22:20,295 que é devolvido para você que é para essa página web que você recebe 473 00:22:20,295 --> 00:22:22,570 e que o seu navegador pode render depois. 474 00:22:22,570 --> 00:22:24,401 E isso é text / html. 475 00:22:24,401 --> 00:22:26,660 >> AUDIÊNCIA: O que significa 1.1? 476 00:22:26,660 --> 00:22:29,910 >> MARIA ZLATKOVA: Isso é apenas o versão de-- oh, o que significa 1,1? 477 00:22:29,910 --> 00:22:37,075 Essa é apenas a versão, o HTTP versão de um protocolo que estamos usando. 478 00:22:37,075 --> 00:22:37,700 Ótima pergunta. 479 00:22:37,700 --> 00:22:38,366 Outras perguntas? 480 00:22:38,366 --> 00:22:41,222 481 00:22:41,222 --> 00:22:45,080 >> AUDIÊNCIA: Você poderia resumir Content-Type rápida real? 482 00:22:45,080 --> 00:22:48,150 >> MARIA ZLATKOVA: Assim que é o que o servidor. 483 00:22:48,150 --> 00:22:51,020 o tipo de information-- que é tipo de conteúdo foi as perguntas. 484 00:22:51,020 --> 00:22:53,400 Então isso foi o tipo de informações que você recebe de volta 485 00:22:53,400 --> 00:22:58,200 a partir do servidor, o tipo de dados que o navegador pode, então, 486 00:22:58,200 --> 00:23:00,604 renda que você está usando. 487 00:23:00,604 --> 00:23:03,020 AUDIÊNCIA: É isso que este protocolo está dizendo para você fazer? 488 00:23:03,020 --> 00:23:03,390 MARIA ZLATKOVA: Desculpe? 489 00:23:03,390 --> 00:23:05,380 AUDIÊNCIA: É isso que o protocolo diz? 490 00:23:05,380 --> 00:23:05,915 MARIA ZLATKOVA: A protocol-- 491 00:23:05,915 --> 00:23:07,940 AUDIÊNCIA: --o que o Content-Type é ou what-- 492 00:23:07,940 --> 00:23:12,040 MARIA ZLATKOVA: O protocolo é baseado on-- o que é o protocolo dizendo a você? 493 00:23:12,040 --> 00:23:16,070 Isso é apenas a maneira que esta informação 494 00:23:16,070 --> 00:23:18,610 foi entregue a você com base de que tipo de protocolo 495 00:23:18,610 --> 00:23:21,830 foi esta informação tem entregue de volta para você. 496 00:23:21,830 --> 00:23:23,500 Isso faz sentido espécie de? 497 00:23:23,500 --> 00:23:28,320 498 00:23:28,320 --> 00:23:30,070 HANNAH BLUMBERG: Você pode pensar de protocolo 499 00:23:30,070 --> 00:23:33,300 como um-- Eu acho Professor Malan descreveu- 500 00:23:33,300 --> 00:23:36,910 em sala de aula como tipo de como um-- é como o equivalente humano de sincronismo. 501 00:23:36,910 --> 00:23:44,930 Dizer, como, hey, eu tenho um pedido e eu saber como lidar com HTTP da versão 1.1. 502 00:23:44,930 --> 00:23:48,770 E, em seguida, o servidor diz: oh, OK, I-- e ambos existem. 503 00:23:48,770 --> 00:23:51,337 Eu também sei como lidar com HTTP / 1.1. 504 00:23:51,337 --> 00:23:53,170 E eu vou dar- faça uma cópia de alguns conteúdos. 505 00:23:53,170 --> 00:23:56,230 Neste caso, ele vai como sendo do tipo text / html. 506 00:23:56,230 --> 00:23:58,480 Então é um tipo de apenas uma maneira um deles para communicating-- 507 00:23:58,480 --> 00:24:00,480 >> MARIA ZLATKOVA: É apenas confirmando que você é 508 00:24:00,480 --> 00:24:03,290 ambos a seguir a mesma e que tanto o protocolo 509 00:24:03,290 --> 00:24:06,620 o cliente eo modo server-- o navegador eo server-- 510 00:24:06,620 --> 00:24:09,280 tipo de saber o que você é falando e têm 511 00:24:09,280 --> 00:24:12,557 a convenção para passar em dados. 512 00:24:12,557 --> 00:24:17,022 >> AUDIÊNCIA: Então o Content-Type part-- o texto Content-Type / html-- que é 513 00:24:17,022 --> 00:24:18,521 uma parte separada da mesma mensagem? 514 00:24:18,521 --> 00:24:20,509 Ou é parte de, digamos, 200? 515 00:24:20,509 --> 00:24:22,010 Será que 200 dizer-lhes que ou é-- 516 00:24:22,010 --> 00:24:23,770 >> MARIA ZLATKOVA: 200 diz que tudo correu bem. 517 00:24:23,770 --> 00:24:27,900 E, em seguida, tipo de conteúdo é uma espécie de parte separada da mesma mensagem, 518 00:24:27,900 --> 00:24:34,274 e dizer a coisa que eu retornado tem este tipo de text / html. 519 00:24:34,274 --> 00:24:35,690 É só dar mais informações. 520 00:24:35,690 --> 00:24:38,700 521 00:24:38,700 --> 00:24:39,995 Tem alguma coisa a acrescentar? 522 00:24:39,995 --> 00:24:40,495 ESTÁ BEM. 523 00:24:40,495 --> 00:24:43,590 524 00:24:43,590 --> 00:24:46,530 >> Qualquer outra dúvida sobre isso? 525 00:24:46,530 --> 00:24:48,370 Fantástica. 526 00:24:48,370 --> 00:24:54,070 Assim, alguns outros status HTTP que poderíamos obter, além de 200 OK, 527 00:24:54,070 --> 00:24:59,500 aqueles que nós vimos talvez possivelmente um lote são 403 e 404. 528 00:24:59,500 --> 00:25:05,190 Assim, 404, se você estava tentando Acesso algo que não existe. 529 00:25:05,190 --> 00:25:10,460 Assim, por exemplo, na sua Série de Exercícios CS50 Finanças, 530 00:25:10,460 --> 00:25:15,640 se você tivesse sido render quote.html e você não tem esse arquivo, 531 00:25:15,640 --> 00:25:19,740 mas em vez disso você tinha quote.php, que resultaria em um 404 Not Found 532 00:25:19,740 --> 00:25:21,600 porque o arquivo pode não existir. 533 00:25:21,600 --> 00:25:25,690 >> Para um 403 proibido, que refere-se às permissões. 534 00:25:25,690 --> 00:25:31,150 Portanto, se algum arquivo não pode ser lido pelo mundo, você pode ter um 403 retornado. 535 00:25:31,150 --> 00:25:34,510 536 00:25:34,510 --> 00:25:37,810 Alguns outros que você pode get-- 301, movido permanentemente; 537 00:25:37,810 --> 00:25:41,300 302, Encontrado; 304, Modificado; 400, Bad Request; 538 00:25:41,300 --> 00:25:47,330 e, em seguida, Erro de servidor interno para 500 e 503, serviço não disponível. 539 00:25:47,330 --> 00:25:48,140 Sim. 540 00:25:48,140 --> 00:25:51,490 >> AUDIÊNCIA: Será que esperávamos memorizar todos os estados? 541 00:25:51,490 --> 00:25:53,739 MARIA ZLATKOVA: eu teria -los em sua folha de fraude. 542 00:25:53,739 --> 00:25:55,146 [RISO] 543 00:25:55,146 --> 00:25:59,954 AUDIÊNCIA: Será que estamos esperado para sabe o que desencadeia cada uma delas? 544 00:25:59,954 --> 00:26:00,995 MARIA ZLATKOVA: Eles são? 545 00:26:00,995 --> 00:26:03,870 HANNAH BLUMBERG: Para os que temos executar into-- então a questão foi-- 546 00:26:03,870 --> 00:26:08,010 MARIA ZLATKOVA: Eles são esperados para saber o que cada um destes estado 547 00:26:08,010 --> 00:26:09,330 códigos pode ser desencadeada por? 548 00:26:09,330 --> 00:26:13,240 Assim, para os que nós usamos e correu para dentro, eu diria, sim. 549 00:26:13,240 --> 00:26:16,610 Então, nós definitivamente visto 200 OK e lecionou-lo em Série de Exercícios. 550 00:26:16,610 --> 00:26:19,071 Nós vimos 403, 404. 551 00:26:19,071 --> 00:26:20,550 Para outros? 552 00:26:20,550 --> 00:26:22,690 >> HANNAH BLUMBERG: Eu faria dizer 500 parece um jogo justo. 553 00:26:22,690 --> 00:26:23,330 >> MARIA ZLATKOVA: 500, sim. 554 00:26:23,330 --> 00:26:24,246 >> HANNAH BLUMBERG: Yeah. 555 00:26:24,246 --> 00:26:27,006 Basta ter um sentido geral o que lhes causa. 556 00:26:27,006 --> 00:26:28,880 E também apenas por estes nomes, você pode tipo de 557 00:26:28,880 --> 00:26:32,890 como fazer um palpite como para o que realmente lhes causou. 558 00:26:32,890 --> 00:26:36,919 Por exemplo, mudar-se definitivamente, provavelmente o arquivo foi movido permanentemente. 559 00:26:36,919 --> 00:26:39,328 >> AUDIÊNCIA: Mas em um anterior exame, houve um assim 560 00:26:39,328 --> 00:26:41,050 como é que você espera de nós para responder a isso? 561 00:26:41,050 --> 00:26:42,883 >> HANNAH BLUMBERG: Isso valia zero pontos. 562 00:26:42,883 --> 00:26:45,870 A pergunta sobre o 418 no bule é tecnicamente um status HTTP, 563 00:26:45,870 --> 00:26:47,090 mas valeu a pena zero pontos. 564 00:26:47,090 --> 00:26:48,320 Obviamente, você não está Espera-se que os conheço. 565 00:26:48,320 --> 00:26:49,670 >> AUDIÊNCIA: É um real? 566 00:26:49,670 --> 00:26:51,970 >> HANNAH BLUMBERG: É um verdadeiro um, mas isso não significa nada. 567 00:26:51,970 --> 00:26:52,700 É só uma brincadeira. 568 00:26:52,700 --> 00:26:55,480 569 00:26:55,480 --> 00:26:57,010 Internet as pessoas são engraçadas. 570 00:26:57,010 --> 00:26:59,680 >> MARIA ZLATKOVA: Grandes questões, rapazes. 571 00:26:59,680 --> 00:27:01,452 Alguma outra pergunta? 572 00:27:01,452 --> 00:27:04,891 >> AUDIÊNCIA: O que é erro interno do servidor? 573 00:27:04,891 --> 00:27:06,640 MARIA ZLATKOVA: Internal Erro de servidor apenas 574 00:27:06,640 --> 00:27:10,050 significa que você tem sido incapaz de se comunicar 575 00:27:10,050 --> 00:27:13,400 com o servidor, por alguma razão. 576 00:27:13,400 --> 00:27:15,400 Portanto, não é necessariamente algo que tem a ver 577 00:27:15,400 --> 00:27:19,170 com o cliente ou algo parecido. 578 00:27:19,170 --> 00:27:22,170 Eu não sei de nenhum exemplo específico que temos passado para explicar, 579 00:27:22,170 --> 00:27:23,000 mas sim. 580 00:27:23,000 --> 00:27:23,250 >> HANNAH BLUMBERG: Claro. 581 00:27:23,250 --> 00:27:25,625 Assim, por exemplo, como vamos dizer que você estava trabalhando em mashup 582 00:27:25,625 --> 00:27:30,440 e um servidor do Google desceu para alguns razão, uma queda de energia, digamos. 583 00:27:30,440 --> 00:27:33,400 Isso seria um servidor interno erro ou algum tipo de-- gosto de você 584 00:27:33,400 --> 00:27:34,630 não obter uma resposta de volta. 585 00:27:34,630 --> 00:27:35,260 >> MARIA ZLATKOVA: Yeah. 586 00:27:35,260 --> 00:27:37,050 É só quando você está incapaz de se comunicar 587 00:27:37,050 --> 00:27:40,299 com o servidor, por alguma razão, porque de que vai para baixo ou alguma outra razão. 588 00:27:40,299 --> 00:27:44,430 589 00:27:44,430 --> 00:27:47,690 Então saltar para PHP. 590 00:27:47,690 --> 00:27:49,930 PHP, ao contrário do HTML, é um linguagem de programação. 591 00:27:49,930 --> 00:27:54,820 E começamos a usá-lo porque é muito útil para desenvolvimento web. 592 00:27:54,820 --> 00:27:56,940 >> Temos utilizado pela primeira vez em CS50 Finanças. 593 00:27:56,940 --> 00:28:02,240 E, basicamente, nos ajuda a trazer juntos esta marcação, o design, 594 00:28:02,240 --> 00:28:07,460 e como nós realmente usar informações para exibir coisas em uma página web. 595 00:28:07,460 --> 00:28:11,870 Assim, o próprio PHP significa PHP Preprocessador de hipertexto, 596 00:28:11,870 --> 00:28:15,360 por isso é uma backnorym recursiva por si só. 597 00:28:15,360 --> 00:28:22,330 E abrindo etiquetas para PHP nós à esquerda e flechas certas com os pontos de interrogação 598 00:28:22,330 --> 00:28:23,060 e php. 599 00:28:23,060 --> 00:28:25,890 >> Então, nós já vimos um monte dele. 600 00:28:25,890 --> 00:28:29,150 Agora, nós apenas estamos indo para passar por cima algumas das coisas básicas sobre ele. 601 00:28:29,150 --> 00:28:32,280 Assim, com PHP, a variável nomes começam com sinal de dólar. 602 00:28:32,280 --> 00:28:35,660 Nós não especificar, mais uma vez, uma variável do tipo mais. 603 00:28:35,660 --> 00:28:38,450 Assim como fizemos com C, nós não precisamos fazer isso. 604 00:28:38,450 --> 00:28:41,670 605 00:28:41,670 --> 00:28:44,490 >> Podemos fazer um monte de diferente coisas com variáveis. 606 00:28:44,490 --> 00:28:47,750 Podemos colocá-los juntos concatenando-los 607 00:28:47,750 --> 00:28:52,900 com a notação de ponto, que nós não poderíamos fazer em C novamente. 608 00:28:52,900 --> 00:28:57,490 Mais uma vez, temos um pouco mais de versatilidade com PHP em termos de variáveis. 609 00:28:57,490 --> 00:29:00,080 Mais uma vez, nós não temos uma função principal. 610 00:29:00,080 --> 00:29:03,370 >> E PHP é interpretado em oposição a compilado, 611 00:29:03,370 --> 00:29:09,970 Então, como nós fizemos para arquivos C, não temos que fazer isso para PHP. 612 00:29:09,970 --> 00:29:15,440 Mas sim, a maneira que a língua é executado por si só, ele é interpretado. 613 00:29:15,440 --> 00:29:18,550 E então vagamente digitado Significa apenas que nós 614 00:29:18,550 --> 00:29:22,490 não tem que especificar uma variável tipo e os tipos de variáveis 615 00:29:22,490 --> 00:29:25,415 são compreendidos em tempo de execução. 616 00:29:25,415 --> 00:29:29,185 >> AUDIÊNCIA: Mas o que você fez quer dizer com concatenação de ponto? 617 00:29:29,185 --> 00:29:30,060 MARIA ZLATKOVA: Claro. 618 00:29:30,060 --> 00:29:37,660 Quando queremos colocar as coisas together-- por isso, se tivemos alguma variável que 619 00:29:37,660 --> 00:29:41,500 teve o valor de 3 e um outro variável que teve o valor de seqüência de caracteres, 620 00:29:41,500 --> 00:29:45,920 poderíamos colocar as variáveis ​​em conjunto colocando um ponto entre eles 621 00:29:45,920 --> 00:29:46,970 e concatenar-los. 622 00:29:46,970 --> 00:29:52,670 Ou poderíamos criar um chamado nome de variável 623 00:29:52,670 --> 00:29:56,900 e colocá-lo em conjunto por concatenação de duas seqüências. 624 00:29:56,900 --> 00:30:00,680 >> Então, se nós tivéssemos uma corda em casal citações e nós colocar um ponto depois dela, 625 00:30:00,680 --> 00:30:03,660 e então nós tivemos uma outra corda, que criaria uma seqüência completamente. 626 00:30:03,660 --> 00:30:05,242 >> AUDIÊNCIA: OK. 627 00:30:05,242 --> 00:30:06,450 MARIA LETÔNIA: Foi claro? 628 00:30:06,450 --> 00:30:07,099 AUDIÊNCIA: É. 629 00:30:07,099 --> 00:30:07,890 MARIA ZLATKOVA: OK. 630 00:30:07,890 --> 00:30:08,766 Sim. 631 00:30:08,766 --> 00:30:11,146 >> AUDIÊNCIA: Quando você diz interpretado em vez de compilado, 632 00:30:11,146 --> 00:30:14,160 você está falando você não fizer isso precisa ser tão específico quando 633 00:30:14,160 --> 00:30:15,906 se trata de PHP versus C? 634 00:30:15,906 --> 00:30:18,085 635 00:30:18,085 --> 00:30:20,710 MARIA ZLATKOVA: Quando dizemos interpretado em oposição a compilado, 636 00:30:20,710 --> 00:30:21,850 o que queremos dizer? 637 00:30:21,850 --> 00:30:26,220 Então isso significa que nós não precisamos arquivos executáveis ​​para executar o PHP. 638 00:30:26,220 --> 00:30:29,870 Isso significa que ele é executado como ele vai. 639 00:30:29,870 --> 00:30:31,650 Isso faz sentido? 640 00:30:31,650 --> 00:30:32,495 Um pouco mais. 641 00:30:32,495 --> 00:30:34,620 HANNAH BLUMBERG: Então você pode pensar de um intérprete 642 00:30:34,620 --> 00:30:38,980 como outro programa que é responsável para ir linha por linha através do PHP 643 00:30:38,980 --> 00:30:42,745 e realmente executá-lo, ao contrário para compilar tudo para baixo para binário. 644 00:30:42,745 --> 00:30:46,050 Na verdade, não significa nada sobre como específico que precisa ser. 645 00:30:46,050 --> 00:30:49,470 Nós ainda precisamos de ser mais preciso, e não fazê- esqueça o seu ponto e vírgula, e certifique- 646 00:30:49,470 --> 00:30:51,470 você tem o seu sinal de dólar, e coisas assim. 647 00:30:51,470 --> 00:30:52,240 Boa pergunta. 648 00:30:52,240 --> 00:30:53,115 >> MARIA ZLATKOVA: Yeah. 649 00:30:53,115 --> 00:30:55,590 Então, linha por linha, como contrário de com arquivos C, 650 00:30:55,590 --> 00:30:59,100 nós temos que fazer toda a final antes que possamos realmente executá-lo. 651 00:30:59,100 --> 00:31:00,360 Essa é a principal diferença. 652 00:31:00,360 --> 00:31:02,655 Mas, novamente, não podemos realmente ser menos específico. 653 00:31:02,655 --> 00:31:08,760 654 00:31:08,760 --> 00:31:13,950 Então matrizes em PHP representam atualmente um mapa ordenado. 655 00:31:13,950 --> 00:31:17,550 >> Então valores matrizes associados às chaves. 656 00:31:17,550 --> 00:31:23,350 As duas formas de declarar uma matriz, com base nesta sintaxe, 657 00:31:23,350 --> 00:31:26,380 podemos ser mais explícito em dizer que temos um array 658 00:31:26,380 --> 00:31:31,010 e nós temos essa key1 que mapeia para este value1, key2 que mapeia value2. 659 00:31:31,010 --> 00:31:34,660 Ou podemos simplesmente criar uma matriz que contém o próprio valores 660 00:31:34,660 --> 00:31:38,360 e, em seguida, as teclas são entendida de uma forma. 661 00:31:38,360 --> 00:31:40,000 Qualquer dúvida sobre isso? 662 00:31:40,000 --> 00:31:42,500 >> Audiência: O que as teclas estar no segundo exemplo? 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: Por exemplo, é apenas as chaves neste não necessariamente 667 00:31:55,780 --> 00:31:56,550 faz a diferença. 668 00:31:56,550 --> 00:32:01,720 Eles apenas definir a forma como você pode usar os valores dentro dele. 669 00:32:01,720 --> 00:32:08,660 Então, se tivéssemos um foreach laço em PHP que faria 670 00:32:08,660 --> 00:32:14,760 nos permite passar por todos os valores, podemos passar por todos os valores, 671 00:32:14,760 --> 00:32:19,570 mesmo se tinha ou não definido uma chave específica dentro do local de 672 00:32:19,570 --> 00:32:20,820 sintaxe anterior. 673 00:32:20,820 --> 00:32:23,460 >> Assim, mesmo com este tipo de array, poderíamos ainda 674 00:32:23,460 --> 00:32:26,260 ter um loop foreach que passa através de cada 675 00:32:26,260 --> 00:32:31,240 dos valores da chave na matriz. 676 00:32:31,240 --> 00:32:36,180 Assim, a sintaxe de um foreach loop, vamos começar com uma matriz. 677 00:32:36,180 --> 00:32:38,720 678 00:32:38,720 --> 00:32:43,900 Esta variável $ arr é a nossa matriz real que definimos no slide anterior 679 00:32:43,900 --> 00:32:47,550 como o valor que vai literalmente através de cada um dos valores, 680 00:32:47,550 --> 00:32:50,122 independentemente do facto tivemos uma chave ou não. 681 00:32:50,122 --> 00:32:53,080 E então nós podemos fazer algo com o valor dentro do loop foreach. 682 00:32:53,080 --> 00:32:57,730 Então, novamente, se nós tivemos um array como este aqui created-- 683 00:32:57,730 --> 00:33:03,270 por isso temos a chave de foo e valor de bar, a chave de Baz e valor de qux-- 684 00:33:03,270 --> 00:33:09,730 podemos ter um loop foreach que passa por matriz como valor de chave 685 00:33:09,730 --> 00:33:11,900 e, em seguida, fazer alguma coisa com a chave e / ou o valor. 686 00:33:11,900 --> 00:33:15,980 Mas nós não necessariamente sempre tem que ter um foreach loops que 687 00:33:15,980 --> 00:33:19,410 passa por matriz como mapa chave para valor. 688 00:33:19,410 --> 00:33:26,060 Podemos passar pelo matriz loop foreach como valor. 689 00:33:26,060 --> 00:33:28,990 >> HANNAH BLUMBERG: E eu acho que a-- foi a sua pergunta, o que 690 00:33:28,990 --> 00:33:31,229 é o índice implícito? 691 00:33:31,229 --> 00:33:31,895 AUDIÊNCIA: kinda. 692 00:33:31,895 --> 00:33:32,240 MARIA ZLATKOVA: Oh. 693 00:33:32,240 --> 00:33:33,406 HANNAH BLUMBERG: Sim, sim. 694 00:33:33,406 --> 00:33:36,150 Então, basicamente, se você não especificar uma chave, ele vai ser 01. 695 00:33:36,150 --> 00:33:37,140 >> MARIA ZLATKOVA: Yeah. 696 00:33:37,140 --> 00:33:41,718 Assim como com o C, é de zero indexados se você não especificar uma chave. 697 00:33:41,718 --> 00:33:42,384 AUDIÊNCIA: Desculpe. 698 00:33:42,384 --> 00:33:43,827 Você poderia tentar falar um pouco mais alto? 699 00:33:43,827 --> 00:33:45,270 Estou tendo um pouco de problemas para ouvir tudo. 700 00:33:45,270 --> 00:33:46,478 >> MARIA ZLATKOVA: Eu sinto muito. 701 00:33:46,478 --> 00:33:48,439 Sim, claro. 702 00:33:48,439 --> 00:33:50,230 Então você quer me para passar por cima de novo? 703 00:33:50,230 --> 00:33:51,680 Ou é isto-- 704 00:33:51,680 --> 00:33:54,930 AUDIÊNCIA: Então no slide-- anterior se você poderia simplesmente voltar para um segundo. 705 00:33:54,930 --> 00:33:57,313 MARIA ZLATKOVA: Claro, desculpe. 706 00:33:57,313 --> 00:33:59,237 AUDIÊNCIA: Então o segundo matriz aqui não 707 00:33:59,237 --> 00:34:04,135 parecem ter um valor de chave, meio que [? o nexo de causalidade. ?] 708 00:34:04,135 --> 00:34:05,343 MARIA ZLATKOVA: Certo, certo. 709 00:34:05,343 --> 00:34:07,608 AUDIÊNCIA: Então, como é que isso funciona quando você diz que é tudo ou nada. 710 00:34:07,608 --> 00:34:08,969 Para mim, isso parece uma [? foo?] já. 711 00:34:08,969 --> 00:34:10,093 >> MARIA ZLATKOVA: Sim, sim. 712 00:34:10,093 --> 00:34:12,969 Então, novamente, este é um mapa ordenado, neste sentido, 713 00:34:12,969 --> 00:34:15,639 que não são compreendidos, por exemplo, os índices 714 00:34:15,639 --> 00:34:20,159 aqui pode ser entendido como 0, 1, 2, 3. 715 00:34:20,159 --> 00:34:25,929 Novamente, isso é ter aqueles índices é a equivalente 716 00:34:25,929 --> 00:34:28,980 de ter chaves mapeadas em valores. 717 00:34:28,980 --> 00:34:34,710 Então, se a nossa chave foi 0-- desculpe. 718 00:34:34,710 --> 00:34:36,524 >> HANNAH BLUMBERG: Não, lá está giz até aqui. 719 00:34:36,524 --> 00:34:36,929 É realmente muito bom. 720 00:34:36,929 --> 00:34:37,460 >> MARIA ZLATKOVA: Isso é ótimo. 721 00:34:37,460 --> 00:34:38,260 ESTÁ BEM. 722 00:34:38,260 --> 00:34:49,489 Então, novamente, $ arr 0 seria a chave para o valor 1. 723 00:34:49,489 --> 00:34:51,138 0 seria a chave para o valor 1. 724 00:34:51,138 --> 00:34:51,971 AUDIÊNCIA: Eu sinto muito. 725 00:34:51,971 --> 00:34:53,190 É invisível. 726 00:34:53,190 --> 00:34:53,659 >> HANNAH BLUMBERG: Tudo bem, deixa pra lá. 727 00:34:53,659 --> 00:34:54,980 Chalk foi uma má idéia. 728 00:34:54,980 --> 00:34:58,030 Eu levá-la de volta. 729 00:34:58,030 --> 00:35:01,425 Você pode pensar das chaves como 0 mapeia para o valor 1. 730 00:35:01,425 --> 00:35:02,300 MARIA ZLATKOVA: Yeah. 731 00:35:02,300 --> 00:35:04,630 Portanto, este é 0, isto é 1, 2, 3. 732 00:35:04,630 --> 00:35:05,760 Estes podem ser suas chaves. 733 00:35:05,760 --> 00:35:10,020 Você pode pensar neles as-- sim. 734 00:35:10,020 --> 00:35:12,740 Então, ao invés de ter chaves explícitas, eles são 735 00:35:12,740 --> 00:35:17,180 tipo de entender-se como os índices a partir de 0. 736 00:35:17,180 --> 00:35:21,630 737 00:35:21,630 --> 00:35:24,820 O giz não ajuda. 738 00:35:24,820 --> 00:35:25,722 Sim. 739 00:35:25,722 --> 00:35:30,914 >> AUDIÊNCIA: Para o loop foreach, se quiséssemos ver o quanto de valor, 740 00:35:30,914 --> 00:35:33,245 Seria apenas o índice automaticamente a 0? 741 00:35:33,245 --> 00:35:34,120 MARIA ZLATKOVA: Yeah. 742 00:35:34,120 --> 00:35:35,745 Seria passar por cada um dos valores. 743 00:35:35,745 --> 00:35:39,130 AUDIÊNCIA: [inaudível] como 0 ou teria que apenas fazê 0? 744 00:35:39,130 --> 00:35:43,710 >> MARIA ZLATKOVA: Você teria para dizer como sinal de dólar e, em seguida, 745 00:35:43,710 --> 00:35:46,266 algum nome da variável, valor. 746 00:35:46,266 --> 00:35:47,182 AUDIÊNCIA: [inaudível]. 747 00:35:47,182 --> 00:35:50,048 748 00:35:50,048 --> 00:35:50,964 MARIA ZLATKOVA: Desculpe? 749 00:35:50,964 --> 00:35:52,839 AUDIÊNCIA: Desculpe, eu sou apenas tentando me lembrar. 750 00:35:52,839 --> 00:35:57,190 Como você faria isso se você pode fazê-lo automaticamente indexação é apenas 0 de? 751 00:35:57,190 --> 00:36:00,780 >> MARIA ZLATKOVA: Então, como você faria isso se você não têm nomes-chave específicas? 752 00:36:00,780 --> 00:36:01,710 >> AUDIÊNCIA: É. 753 00:36:01,710 --> 00:36:07,820 >> MARIA ZLATKOVA: você teria apenas define-- apenas dizer a si mesmo como um nome. 754 00:36:07,820 --> 00:36:17,950 Assim, em sua Série de Exercícios, vocês poderiam lembre-se foreach $ row como $ linhas, 755 00:36:17,950 --> 00:36:24,610 criamos a nós mesmos dessa $ row dizendo queremos passar por linha como $ linhas. 756 00:36:24,610 --> 00:36:28,360 Mesmo que não tivéssemos esta $ explícita linhas definidas, 757 00:36:28,360 --> 00:36:31,990 pudéssemos simplesmente ir e dizer que este pode ser o nosso chave, 758 00:36:31,990 --> 00:36:33,615 e apenas passar por cada um dos valores. 759 00:36:33,615 --> 00:36:37,295 760 00:36:37,295 --> 00:36:41,660 >> AUDIÊNCIA: Então é uma nova variável de valor estamos criando para armazenar [inaudível]? 761 00:36:41,660 --> 00:36:46,820 762 00:36:46,820 --> 00:36:49,990 >> MARIA ZLATKOVA: Então não é inerentemente uma nova variável. 763 00:36:49,990 --> 00:37:00,310 É uma variável que se refere à no interior da matriz para cada um deles. 764 00:37:00,310 --> 00:37:02,060 HANNAH BLUMBERG: É um novo nome variável. 765 00:37:02,060 --> 00:37:04,018 MARIA ZLATKOVA: Sim, é um novo nome de variável, 766 00:37:04,018 --> 00:37:06,680 mas não é inherently-- sim. 767 00:37:06,680 --> 00:37:08,950 É apenas uma nova variável que você pode fazer isso. 768 00:37:08,950 --> 00:37:12,680 Então, como fazer nós fizemos $ linha como $ linhas, linhas 769 00:37:12,680 --> 00:37:17,980 era um novo nome da variável que nós poderia criar em nosso loop foreach. 770 00:37:17,980 --> 00:37:22,065 Ele não tem de preexistir antes disso. 771 00:37:22,065 --> 00:37:25,777 >> AUDIÊNCIA: Você poderia passar pelo lógica para cada um, usando o exemplo lá? 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, desculpe. 775 00:37:32,080 --> 00:37:33,780 Aqui está o exemplo. 776 00:37:33,780 --> 00:37:34,280 Certo. 777 00:37:34,280 --> 00:37:38,950 Assim, para cada array-- assim isso significa ir a essa matriz 778 00:37:38,950 --> 00:37:43,930 como chave value-- que está acontecendo que passar por essa matriz 779 00:37:43,930 --> 00:37:49,480 e primeiro ir buscar foo, o foo chave ea barra de valor. 780 00:37:49,480 --> 00:37:51,570 E, em seguida, no segundo iteração do loop, 781 00:37:51,570 --> 00:37:55,090 ele vai passar e tomar o baz chave eo valor Qux. 782 00:37:55,090 --> 00:38:00,512 E então você pode fazer algo com qualquer um deles ou de ambos. 783 00:38:00,512 --> 00:38:03,488 >> AUDIÊNCIA: Então, a idéia por trás tendo um ponto chave para o valor, 784 00:38:03,488 --> 00:38:07,470 o que é que você acaba acessando? 785 00:38:07,470 --> 00:38:10,680 >> MARIA ZLATKOVA: Qual é a idéia de ter um apontador chave para valorizar? 786 00:38:10,680 --> 00:38:16,400 É apenas uma outra convenção, outra maneira de atravessar a matriz 787 00:38:16,400 --> 00:38:22,600 e ser capaz de acessar tanto o chave ou o valor ou ambos, e utilizá-los. 788 00:38:22,600 --> 00:38:27,100 >> AUDIÊNCIA: Qual é o papel para o ordenar que o foreach é executado em? 789 00:38:27,100 --> 00:38:29,250 Então, se nós estávamos para adicionar elementos para a matriz mais tarde, 790 00:38:29,250 --> 00:38:32,140 seriam esses os primeiros chamado na matriz foreach, 791 00:38:32,140 --> 00:38:33,750 ou seria mais tarde? 792 00:38:33,750 --> 00:38:37,770 >> MARIA ZLATKOVA: Então, qual é a fim de que o foreach 793 00:38:37,770 --> 00:38:39,210 circuito passa por uma matriz em? 794 00:38:39,210 --> 00:38:42,220 Ela passa por o primeiro elemento para o último elemento, 795 00:38:42,220 --> 00:38:43,400 para o último elemento adicionado. 796 00:38:43,400 --> 00:38:48,020 Se você adicionar elementos mais tarde, fariam accessed-- ser os primeiros elementos que 797 00:38:48,020 --> 00:38:51,410 ser acessado como o primeiro elementos da matriz, 798 00:38:51,410 --> 00:38:57,620 e, em seguida, você iria passar por cada um os elementos como uma espécie de ordered-- 799 00:38:57,620 --> 00:39:02,930 não um ordenado, mas a maneira que eles foram colocados na matriz. 800 00:39:02,930 --> 00:39:06,855 >> AUDIÊNCIA: Então, novos elementos são adicionados mais tarde? 801 00:39:06,855 --> 00:39:10,680 Então, eles estão added-- eles vão ser o últimas no [? iteração. ?] 802 00:39:10,680 --> 00:39:14,280 >> MARIA ZLATKOVA: Novos elementos can-- basicamente, quando novos elementos são adicionados, 803 00:39:14,280 --> 00:39:16,520 eles são adicionados ao final da matriz? 804 00:39:16,520 --> 00:39:17,632 >> AUDIÊNCIA: É. 805 00:39:17,632 --> 00:39:18,840 MARIA ZLATKOVA: Eu acredito que sim. 806 00:39:18,840 --> 00:39:20,850 Sim. 807 00:39:20,850 --> 00:39:24,330 E depois com seu loop foreach, depois de você ter adicionado novos elementos 808 00:39:24,330 --> 00:39:26,790 e você passar por eles, os novos elementos faria 809 00:39:26,790 --> 00:39:30,930 accessed-- ser o novo elemento, se é adicionado por último, seria acessado pela última vez. 810 00:39:30,930 --> 00:39:34,416 >> AUDIÊNCIA: Você pode apenas dar um exemplo de algo que iria [inaudível] 811 00:39:34,416 --> 00:39:37,404 com algo com valor como o [inaudível] ou o valor, 812 00:39:37,404 --> 00:39:38,910 como a forma como você gostaria que formatar? 813 00:39:38,910 --> 00:39:39,785 >> MARIA ZLATKOVA: Claro. 814 00:39:39,785 --> 00:39:42,340 815 00:39:42,340 --> 00:39:46,410 Posso dar um exemplo do que faríamos com o valor? 816 00:39:46,410 --> 00:39:52,440 Então, o que vocês podem estar familiarizados com é que nós passamos por uma matriz 817 00:39:52,440 --> 00:39:55,380 e, basicamente, impresso cada um dos elementos, 818 00:39:55,380 --> 00:40:00,910 por exemplo, como parte de um lista ordenada ou algo que. 819 00:40:00,910 --> 00:40:02,674 Isso faz sentido ou queremos a-- 820 00:40:02,674 --> 00:40:04,340 AUDIÊNCIA: Nós podemos imprimir esses valores para fora? 821 00:40:04,340 --> 00:40:13,220 MARIA ZLATKOVA: Sim, nós poderíamos imprimir e, em seguida, basicamente devido a $ Valor 822 00:40:13,220 --> 00:40:16,570 esse valor específico, que seria imprimir o valor no interior do mesmo. 823 00:40:16,570 --> 00:40:20,150 Então, se nós estávamos em nossa primeira iteração dele e nós impresso $ value, 824 00:40:20,150 --> 00:40:23,775 estaríamos a impressão bar. 825 00:40:23,775 --> 00:40:27,020 >> AUDIÊNCIA: Há também são para loops em PHP ou apenas loops foreach? 826 00:40:27,020 --> 00:40:30,430 >> MARIA ZLATKOVA: Não há também para loops em PHP. 827 00:40:30,430 --> 00:40:33,399 E sua lógica é principalmente o mesmo que o que você está acostumado. 828 00:40:33,399 --> 00:40:34,690 AUDIÊNCIA: Então, seu valor é nulo. 829 00:40:34,690 --> 00:40:35,090 MARIA ZLATKOVA: É como se o mesmo. 830 00:40:35,090 --> 00:40:35,590 Sim. 831 00:40:35,590 --> 00:40:37,747 AUDIÊNCIA: Eu só vou perguntar. 832 00:40:37,747 --> 00:40:39,695 Então, quando você declarar um array, você não precisa 833 00:40:39,695 --> 00:40:42,617 para dizer o tamanho que vai ser, o que significa que você pode apenas 834 00:40:42,617 --> 00:40:44,417 adicionar e remover elementos [inaudível]. 835 00:40:44,417 --> 00:40:45,250 MARIA ZLATKOVA: Yup. 836 00:40:45,250 --> 00:40:45,750 Sim. 837 00:40:45,750 --> 00:40:46,251 Exatamente. 838 00:40:46,251 --> 00:40:48,875 Quando declarar uma matriz, nós Não é necessário dizer o tamanho que é, 839 00:40:48,875 --> 00:40:51,022 assim que nós podemos apenas adicionar elementos para ele mais tarde também. 840 00:40:51,022 --> 00:40:55,075 841 00:40:55,075 --> 00:40:55,700 Mais perguntas? 842 00:40:55,700 --> 00:40:59,870 843 00:40:59,870 --> 00:41:05,950 Assim, trazendo o PHP e HTML juntos, o que temos seen-- bem, 844 00:41:05,950 --> 00:41:15,130 Por exemplo, neste exemplo, temos um formulário HTML que tem um campo de entrada. 845 00:41:15,130 --> 00:41:18,830 >> E o campo de entrada é apenas nome e, em seguida, ele tem um botão Enviar. 846 00:41:18,830 --> 00:41:26,040 E quando você pressiona o Enviar botão, em nosso arquivo hello.php, 847 00:41:26,040 --> 00:41:32,130 porque o método para o formulário é obter, podemos acessar tudo o que está no nome 848 00:41:32,130 --> 00:41:40,360 por isso obter variável global que é-- a sintaxe para isso é de R $ _GET. 849 00:41:40,360 --> 00:41:44,520 E então podemos acessar qualquer que seja a entrada do usuário dentro do mesmo formulário para nome 850 00:41:44,520 --> 00:41:47,410 especificando o nome desse campo. 851 00:41:47,410 --> 00:41:51,480 852 00:41:51,480 --> 00:41:55,060 >> Quaisquer outras perguntas ou qualquer perguntas para este exemplo específico? 853 00:41:55,060 --> 00:41:58,275 >> AUDIÊNCIA: Onde está o PHP? 854 00:41:58,275 --> 00:41:59,150 MARIA ZLATKOVA: Aqui. 855 00:41:59,150 --> 00:42:01,150 Então esta é a nossa marca de abertura para o PHP. 856 00:42:01,150 --> 00:42:01,530 >> AUDIÊNCIA: Oh, certo. 857 00:42:01,530 --> 00:42:02,363 >> MARIA ZLATKOVA: Sim. 858 00:42:02,363 --> 00:42:05,320 859 00:42:05,320 --> 00:42:09,609 >> HANNAH BLUMBERG:? A = é um atalho para isso é PHP e apenas eco. 860 00:42:09,609 --> 00:42:10,150 AUDIÊNCIA: Oh. 861 00:42:10,150 --> 00:42:10,720 MARIA ZLATKOVA: Sim, desculpe. 862 00:42:10,720 --> 00:42:12,040 Eu deveria ter feito isso bem claro. 863 00:42:12,040 --> 00:42:13,759 >> HANNAH BLUMBERG: impressão. 864 00:42:13,759 --> 00:42:16,800 MARIA ZLATKOVA: É apenas a função que nos permite imprimir algo. 865 00:42:16,800 --> 00:42:19,795 866 00:42:19,795 --> 00:42:20,420 Ótima pergunta. 867 00:42:20,420 --> 00:42:24,140 868 00:42:24,140 --> 00:42:25,495 Então going-- sim. 869 00:42:25,495 --> 00:42:31,940 >> AUDIÊNCIA: É lá vai ser muito um pouco de codificação manual de PHP e HTML 870 00:42:31,940 --> 00:42:33,450 no questionário 1? 871 00:42:33,450 --> 00:42:36,310 872 00:42:36,310 --> 00:42:38,810 MARIA ZLATKOVA: Não pode haver um boa quantidade de interpretação 873 00:42:38,810 --> 00:42:43,330 de PHP e HTML, não necessariamente como uma enorme quantidade de codificação, 874 00:42:43,330 --> 00:42:46,960 embora você pode ter que escrever uma loop foreach, porém, um loop. 875 00:42:46,960 --> 00:42:49,790 Qualquer uma das espiras que nós cobrir aqui é um jogo justo. 876 00:42:49,790 --> 00:42:51,889 E isso é principalmente ele. 877 00:42:51,889 --> 00:42:53,430 HANNAH BLUMBERG: Eu estaria preparado. 878 00:42:53,430 --> 00:42:57,010 Da mesma maneira que nós lhe pediu para escrever um monte de funções C no teste 0, 879 00:42:57,010 --> 00:42:59,766 Eu estaria disposto a fazer o mesmo em PHP e JavaScript. 880 00:42:59,766 --> 00:43:00,640 MARIA ZLATKOVA: Yeah. 881 00:43:00,640 --> 00:43:03,210 HANNAH BLUMBERG: Eu diria um little-- como nós não somos 882 00:43:03,210 --> 00:43:06,251 vai fazer você escreve um enorme HTML A página só porque isso é um pouco 883 00:43:06,251 --> 00:43:08,240 tedioso, mas você pode ter partes. 884 00:43:08,240 --> 00:43:09,310 Isso é jogo totalmente justo. 885 00:43:09,310 --> 00:43:11,082 Como página HTML pequeno, totalmente justo. 886 00:43:11,082 --> 00:43:11,623 AUDIÊNCIA: OK. 887 00:43:11,623 --> 00:43:13,814 Que tal em JavaScript também? 888 00:43:13,814 --> 00:43:14,730 HANNAH BLUMBERG: Yeah. 889 00:43:14,730 --> 00:43:15,250 Jogo justo do JavaScript. 890 00:43:15,250 --> 00:43:15,635 >> MARIA ZLATKOVA: Yeah. 891 00:43:15,635 --> 00:43:16,801 Isso é jogo completamente justo. 892 00:43:16,801 --> 00:43:19,280 HANNAH BLUMBERG: Nós vamos chegar para que, como 10 minutos. 893 00:43:19,280 --> 00:43:23,750 >> MARIA ZLATKOVA: SQL, mais uma vez, Structured Query Language. 894 00:43:23,750 --> 00:43:28,651 Ele basicamente nos permite gerenciar dados em um banco de dados relacional de gerenciamento 895 00:43:28,651 --> 00:43:29,150 sistema. 896 00:43:29,150 --> 00:43:31,149 Isso significa basicamente só que temos em algum lugar 897 00:43:31,149 --> 00:43:37,980 para armazenar alguns dados que nós pode querer usar em um site ou de alguma outra forma. 898 00:43:37,980 --> 00:43:42,190 E então nós temos consultas para obter informações de nosso banco de dados 899 00:43:42,190 --> 00:43:44,320 ou para inserir a informação neles contida. 900 00:43:44,320 --> 00:43:47,560 Um monte de o UPDATE ones-- comum, INSERT, SELECT e DELETE. 901 00:43:47,560 --> 00:43:50,790 >> Assim, para UPDATE, esta é a sintaxe para atualizar dados em um banco de dados. 902 00:43:50,790 --> 00:43:53,330 903 00:43:53,330 --> 00:43:57,340 Atualizando esta tabela chamada mesa dizendo SET, 904 00:43:57,340 --> 00:44:04,170 podemos definir alguns valores em tudo linhas para igual outra coisa. 905 00:44:04,170 --> 00:44:09,410 Por isso, também pode especificar algumas específicas entradas que queremos modificar 906 00:44:09,410 --> 00:44:11,240 e que pode ser usando WHERE. 907 00:44:11,240 --> 00:44:16,380 E nós podemos especificar que queremos apenas modificar algumas linhas onde a casa para, 908 00:44:16,380 --> 00:44:19,830 se tivéssemos uma tabela de estudantes e todos os alunos tinham casa, 909 00:44:19,830 --> 00:44:24,890 por isso, só poderia modificar alguns valores onde uma casa é igual Currier, 910 00:44:24,890 --> 00:44:25,430 por exemplo. 911 00:44:25,430 --> 00:44:29,120 912 00:44:29,120 --> 00:44:31,800 >> Para INSERT, podemos inserir certos valores em uma tabela. 913 00:44:31,800 --> 00:44:35,150 Então INSERT INTO tabela, e, em seguida, os valores, 914 00:44:35,150 --> 00:44:39,080 e, em seguida, entre parênteses, nós especificamos quais os valores que deseja inserir. 915 00:44:39,080 --> 00:44:43,220 Então INSERT INTO tabela, col1 e col2, o valor é val1 e val2. 916 00:44:43,220 --> 00:44:48,930 Portanto, este insere basicamente uma nova linha na uma tabela contendo os valores 1 e 2 917 00:44:48,930 --> 00:44:50,850 de acordo com as colunas 1 e 2. 918 00:44:50,850 --> 00:44:54,760 >> E então nós vamos passar por cima um rápido exemplo de como isso parece 919 00:44:54,760 --> 00:44:56,310 como no nosso banco de dados um pouco. 920 00:44:56,310 --> 00:44:58,685 Mas esta consulta final que eu acho que nós vamos passar por cima, 921 00:44:58,685 --> 00:45:01,450 SELECT, ele só nos permite para seleccionar dados a partir de uma tabela 922 00:45:01,450 --> 00:45:03,080 para possivelmente usá-lo depois. 923 00:45:03,080 --> 00:45:05,830 E a forma como fazemos isso é que nós apenas armazená-lo em alguma variável. 924 00:45:05,830 --> 00:45:07,780 E então podemos possivelmente usá-lo novamente. 925 00:45:07,780 --> 00:45:10,260 >> Então, escolha estrela significa selecionar tudo. 926 00:45:10,260 --> 00:45:13,280 Isso é apenas uma abreviação para a seleção de todos. 927 00:45:13,280 --> 00:45:19,760 FROM tabela WHERE, estamos à procura para algumas condições específicas, 928 00:45:19,760 --> 00:45:22,290 Então, onde é igual a coluna algo, por exemplo. 929 00:45:22,290 --> 00:45:24,410 Se nós só queríamos selecionar tudo a partir da tabela, 930 00:45:24,410 --> 00:45:28,400 isso só seleciona todas as colunas e todas as linhas de uma tabela. 931 00:45:28,400 --> 00:45:32,040 >> E, em seguida, DELETE FROM tabela ONDE col é igual a alguma coisa, 932 00:45:32,040 --> 00:45:36,440 este apenas exclui alguns linha da nossa mesa 933 00:45:36,440 --> 00:45:38,860 onde temos algumas condições específicas. 934 00:45:38,860 --> 00:45:41,870 Neste caso, as condições são coluna é igual a alguma coisa. 935 00:45:41,870 --> 00:45:43,460 Então, basta um rápido exemplo disso. 936 00:45:43,460 --> 00:45:49,100 Se tivermos essa mesa aqui e nós inseri-lo em uma tabela, esses valores, 937 00:45:49,100 --> 00:45:50,400 que iria inserir uma nova linha. 938 00:45:50,400 --> 00:45:56,380 E se tivéssemos de incremento automático, isto apenas incrementar a ID de 0 a 1 para 2. 939 00:45:56,380 --> 00:46:00,010 >> Se selecionado todos os alunos a partir dele, apenas retorna todos os campos e todas as linhas. 940 00:46:00,010 --> 00:46:02,430 Onde ano for maior que ou igual a 2016, 941 00:46:02,430 --> 00:46:04,390 que só iria voltar Hannah e eu. 942 00:46:04,390 --> 00:46:08,360 E então se nós apenas selecionado ID de ano e ano dos estudantes 943 00:46:08,360 --> 00:46:11,710 onde a casa é Cabot House, que seria, novamente, voltar Hannah e eu. 944 00:46:11,710 --> 00:46:14,430 >> Então, se excluída dos estudantes onde o nome é igual a Rob, 945 00:46:14,430 --> 00:46:16,760 que iria apagar a linha inteira. 946 00:46:16,760 --> 00:46:19,696 E então, se vamos definir o nome, estudantes ATUALIZAÇÃO 947 00:46:19,696 --> 00:46:21,570 Nome do conjunto é igual a Daven ONDE casa é igual 948 00:46:21,570 --> 00:46:27,010 Cabot House, que está indo para ir para essas linhas e, em seguida, atualizar o nome. 949 00:46:27,010 --> 00:46:31,470 >> E depois de alguns tipos de dados SQL são CHAR, VARCHAR, INT e FLOAT. 950 00:46:31,470 --> 00:46:32,760 Estes são jogo justo. 951 00:46:32,760 --> 00:46:36,740 Eu iria novamente e certifique-se que você sabe 952 00:46:36,740 --> 00:46:40,930 e tê-los em sua folha de fraude, o que cada um desses personagens 953 00:46:40,930 --> 00:46:44,140 têm sido usados ​​para, o que você usou-los em seus Série de Exercícios, 954 00:46:44,140 --> 00:46:48,050 e certifique-se que você está familiarizado e confortável com ter que escolher 955 00:46:48,050 --> 00:46:51,450 a partir de diferentes tipos de dados em seu pset. 956 00:46:51,450 --> 00:46:51,950 Sim. 957 00:46:51,950 --> 00:46:54,300 >> AUDIÊNCIA: O que foi que a tabela armazenada? 958 00:46:54,300 --> 00:46:57,119 Sim, onde está esta tabela armazenada? 959 00:46:57,119 --> 00:46:59,160 MARIA ZLATKOVA: Bem, agora, ele não está armazenado. 960 00:46:59,160 --> 00:47:00,700 De qualquer forma, onde está esta tabela armazenada? 961 00:47:00,700 --> 00:47:04,503 Mas pode ser armazenada numa base de dados de SQL. 962 00:47:04,503 --> 00:47:07,330 >> AUDIÊNCIA: E onde está o banco de dados SQL? 963 00:47:07,330 --> 00:47:11,200 No computador, on-line em algum lugar, o servidor? 964 00:47:11,200 --> 00:47:15,000 >> MARIA ZLATKOVA: Pode ser um série de coisas diferentes. 965 00:47:15,000 --> 00:47:19,690 >> HANNAH BLUMBERG: Temos interface com Tabelas SQL principalmente com phpMyAdmin. 966 00:47:19,690 --> 00:47:22,060 Assim, poderíamos perguntar a um servidor para armazená-los para nós. 967 00:47:22,060 --> 00:47:23,830 Poderíamos armazená-los em nosso próprio computador. 968 00:47:23,830 --> 00:47:27,950 >> MARIA ZLATKOVA: Depende apenas de como você deseja fazê-lo por si mesmo. 969 00:47:27,950 --> 00:47:30,075 Mas temos vindo a armazenar eles, como Hannah mencionado, 970 00:47:30,075 --> 00:47:31,755 no phpMyAdmin, que é online. 971 00:47:31,755 --> 00:47:36,550 972 00:47:36,550 --> 00:47:39,280 E, em seguida, a maneira como usamos PHP e SQL, nós armazená-lo 973 00:47:39,280 --> 00:47:43,450 em alguns variável o que temos consultado para. 974 00:47:43,450 --> 00:47:48,370 >> Então, se nós Selecionar tudo história onde user_id é igual a identificação da sessão, 975 00:47:48,370 --> 00:47:53,900 que selecionar todas as linhas para a pessoa específica que 976 00:47:53,900 --> 00:47:58,327 é registrada no a partir da história mesa e classificá-los em linhas. 977 00:47:58,327 --> 00:48:00,410 Uma coisa legal é saber que a função de consulta do CS50 978 00:48:00,410 --> 00:48:02,180 protege contra marcas de injeção de SQL. 979 00:48:02,180 --> 00:48:07,420 Isso apenas significa que ele garante a entrada que é digitado está correto 980 00:48:07,420 --> 00:48:09,920 e que a pessoa que está a entrar na entrada 981 00:48:09,920 --> 00:48:15,100 não está tentando input alguns mal-intencionado código, quer soltar nossas mesas 982 00:48:15,100 --> 00:48:17,305 ou apagar tudo dentro do nosso banco de dados. 983 00:48:17,305 --> 00:48:20,060 984 00:48:20,060 --> 00:48:23,400 >> Uma rápida visão geral do Modelo Model View Controller, 985 00:48:23,400 --> 00:48:27,360 é apenas uma forma de organizar e pensar sobre o código. 986 00:48:27,360 --> 00:48:29,100 É mais uma vez, um paradigma de design. 987 00:48:29,100 --> 00:48:33,380 O que isto significa é que nós can-- e é uma boa prática 988 00:48:33,380 --> 00:48:37,790 para separar as diferentes peças do nosso código eo que eles 989 00:48:37,790 --> 00:48:40,530 controlar para estes três paradigmas. 990 00:48:40,530 --> 00:48:46,700 >> Portanto, a nossa visão é na maioria das vezes a nossa modelos, o nosso layout, o caminho 991 00:48:46,700 --> 00:48:48,260 que definir a forma como o nosso código parece. 992 00:48:48,260 --> 00:48:55,190 Isso é principalmente nossos arquivos CSS e da forma que definiu o design do nosso código, 993 00:48:55,190 --> 00:48:55,710 basicamente. 994 00:48:55,710 --> 00:48:59,280 Nosso controlador é principalmente o que temos vindo a fazer com arquivos PHP. 995 00:48:59,280 --> 00:49:03,030 Então, novamente, trabalhando com o informações que temos 996 00:49:03,030 --> 00:49:06,700 e definir como isso informação é utilizada, 997 00:49:06,700 --> 00:49:10,660 e, em seguida, passa essas informações quer para a exibição ou o modelo. 998 00:49:10,660 --> 00:49:13,880 E o modelo, a maneira que nós temos vindo a utilizar é tem sido o nosso banco de dados, 999 00:49:13,880 --> 00:49:17,510 de modo que nossa informação é armazenado para que ele tenha em algum lugar 1000 00:49:17,510 --> 00:49:21,490 para se viver, e qualquer um dos código que se relaciona com a forma como 1001 00:49:21,490 --> 00:49:25,410 que obter essa informação ou a maneira que nós atualizar essas informações. 1002 00:49:25,410 --> 00:49:28,940 1003 00:49:28,940 --> 00:49:33,200 >> Assim, no modelo MVC, HTTP solicitações são enviadas para um servidor web. 1004 00:49:33,200 --> 00:49:36,220 Em seguida, o controlador interpreta o pedido do usuário 1005 00:49:36,220 --> 00:49:38,260 e, em seguida, valida a entrada do usuário. 1006 00:49:38,260 --> 00:49:41,580 É opcional que temos o controlador comunicar 1007 00:49:41,580 --> 00:49:44,000 com um modelo, de modo algo como nossa base de dados 1008 00:49:44,000 --> 00:49:47,500 ou alguma outra funcionalidade que retransmite informações. 1009 00:49:47,500 --> 00:49:50,340 E, em seguida, finalmente, o controlador passa as informações para a vista 1010 00:49:50,340 --> 00:49:52,090 de modo que ele pode ser rendida e que ele pode 1011 00:49:52,090 --> 00:49:55,860 tornar-se visível para qualquer pessoa acessando a página web. 1012 00:49:55,860 --> 00:49:58,440 1013 00:49:58,440 --> 00:50:01,340 >> Alguma pergunta? 1014 00:50:01,340 --> 00:50:01,840 Fantástica. 1015 00:50:01,840 --> 00:50:04,530 1016 00:50:04,530 --> 00:50:08,469 Então, novamente, o modelo, a sua função, uma vez mais, 1017 00:50:08,469 --> 00:50:11,260 é persistente armazenamento de informação, gerenciar e organizar dados. 1018 00:50:11,260 --> 00:50:13,890 E o que temos visto até agora é o banco de dados MySQL 1019 00:50:13,890 --> 00:50:16,200 e quaisquer arquivos de dados que podem usar. 1020 00:50:16,200 --> 00:50:20,580 >> Ver, a apresentação de informações para o usuário, a interface do usuário ou interface do usuário. 1021 00:50:20,580 --> 00:50:22,350 E o exemplo disto é HTML. 1022 00:50:22,350 --> 00:50:23,950 E então nós poderíamos ter PHP mínima. 1023 00:50:23,950 --> 00:50:28,360 Então, um loop que itera sobre os dados que são impressos 1024 00:50:28,360 --> 00:50:30,720 é parte da visão, como oposição ao controlador. 1025 00:50:30,720 --> 00:50:35,660 E, em seguida, um monte de nossos arquivos PHP se enquadram na categoria controlador. 1026 00:50:35,660 --> 00:50:38,410 Ele apenas lida com as solicitações do usuário e obtém informações a partir do modelo. 1027 00:50:38,410 --> 00:50:42,880 1028 00:50:42,880 --> 00:50:45,590 >> Saltando para o Documento Object Model, isso só 1029 00:50:45,590 --> 00:50:47,700 refere-se à maneira como HTML documentos são organizados. 1030 00:50:47,700 --> 00:50:51,600 E eles estão organizados em uma árvore estrutura que tem uma hierarquia. 1031 00:50:51,600 --> 00:50:56,720 Então, se temos acesso a [inaudível] representação do documento, 1032 00:50:56,720 --> 00:51:02,750 podemos trabalhar com o documento, como nós basicamente manipular objetos. 1033 00:51:02,750 --> 00:51:06,630 >> E para tornar este um pouco mais claro, quando 1034 00:51:06,630 --> 00:51:10,540 nós temos um monte de nossa tags diferentes responder 1035 00:51:10,540 --> 00:51:12,590 a diferentes rotas na nossa árvore. 1036 00:51:12,590 --> 00:51:17,070 E, em seguida, para este exemplo, nós têm o nó documento inicial. 1037 00:51:17,070 --> 00:51:20,010 Temos, então, a nossa nó HTML que se divide em cabeça e corpo. 1038 00:51:20,010 --> 00:51:22,810 Cabeça tem título e, em seguida, título contém Olá, mundo. 1039 00:51:22,810 --> 00:51:24,860 E o nosso corpo contém apenas Olá, mundo também. 1040 00:51:24,860 --> 00:51:28,700 1041 00:51:28,700 --> 00:51:31,900 >> Assim dúvidas sobre qualquer um dos coisas que nós cobrimos até agora? 1042 00:51:31,900 --> 00:51:35,891 E se não, Hannah vai assumir com JavaScript. 1043 00:51:35,891 --> 00:51:36,390 Fantástica. 1044 00:51:36,390 --> 00:51:37,473 >> HANNAH BLUMBERG: OK, legal. 1045 00:51:37,473 --> 00:51:40,980 Se acontecer alguma coisa com o PHP ou HTML, ou qualquer uma das coisas Maria coberto, 1046 00:51:40,980 --> 00:51:42,700 podemos sempre fazer uma pausa. 1047 00:51:42,700 --> 00:51:46,430 Estamos fazendo melhor em outra vez, tão impressionante. 1048 00:51:46,430 --> 00:51:48,770 E só para voltar realmente rapidamente para isso, 1049 00:51:48,770 --> 00:51:51,010 se você olhar para todos os exame do ano passado, este 1050 00:51:51,010 --> 00:51:54,120 trata-se aqui é either-- alguns HTML, fazem deste diagrama. 1051 00:51:54,120 --> 00:51:58,380 Ou aqui está neste diagrama, fazer algum HTML, portanto, definitivamente praticar isso. 1052 00:51:58,380 --> 00:52:01,500 E então isso é um garantida pergunta que você pode obter direito. 1053 00:52:01,500 --> 00:52:02,000 Frio. 1054 00:52:02,000 --> 00:52:04,510 Então, vamos falar sobre o JavaScript e como ele é um pouco 1055 00:52:04,510 --> 00:52:09,130 diferente de linguagens como PHP e C, as duas línguas que vimos antes. 1056 00:52:09,130 --> 00:52:10,780 Então, número um, é vagamente digitado. 1057 00:52:10,780 --> 00:52:14,630 Isso é como PHP, mas ao contrário C. 1058 00:52:14,630 --> 00:52:15,890 >> É uma linguagem interpretada. 1059 00:52:15,890 --> 00:52:19,870 Novamente, isso é como PHP, ao contrário C e esta 1060 00:52:19,870 --> 00:52:24,630 vai permitir-nos-lo use-- funciona muito bem com páginas da web. 1061 00:52:24,630 --> 00:52:28,350 Vai permitir-nos para manipular o conteúdo e como ele olha 1062 00:52:28,350 --> 00:52:30,300 eo que ele faz. 1063 00:52:30,300 --> 00:52:32,330 >> Nós vamos ver um pouco de Ajax. 1064 00:52:32,330 --> 00:52:36,140 Ele permite que nos comuniquemos assincronamente com diferentes servidores 1065 00:52:36,140 --> 00:52:37,950 e obter informações. 1066 00:52:37,950 --> 00:52:42,820 E esta é a única coisa que realmente JavaScript separa de PHP e C 1067 00:52:42,820 --> 00:52:45,590 é que ele é do lado do cliente. 1068 00:52:45,590 --> 00:52:49,860 PHP e C são normalmente do lado do servidor. 1069 00:52:49,860 --> 00:52:51,960 >> Para a maior parte e quase inteiramente o que 1070 00:52:51,960 --> 00:52:53,900 temos visto, pelo menos em esta classe, JavaScript 1071 00:52:53,900 --> 00:52:57,040 age no lado do cliente, o que significa que o navegador é, na verdade, 1072 00:52:57,040 --> 00:52:58,597 responsável por executá-lo. 1073 00:52:58,597 --> 00:53:01,180 E isso significa que nós não precisa de interagir com o servidor. 1074 00:53:01,180 --> 00:53:04,380 Então, isso significa que ele pode ser muito mais rápido porque é realmente apenas é Chrome, 1075 00:53:04,380 --> 00:53:10,420 é Safari, Firefox é, o que você usar, na verdade, executando o seu JavaScript. 1076 00:53:10,420 --> 00:53:12,290 >> AUDIÊNCIA: O que assíncrono significa? 1077 00:53:12,290 --> 00:53:13,620 >> HANNAH BLUMBERG: Ah, o que não de forma assíncrona significa? 1078 00:53:13,620 --> 00:53:14,250 Ótima pergunta. 1079 00:53:14,250 --> 00:53:17,890 De forma assíncrona means-- assim, o conteúdo em que 1080 00:53:17,890 --> 00:53:22,140 podemos usá-lo é, OK, nós está criando uma página web 1081 00:53:22,140 --> 00:53:23,860 e nós precisamos de obter algumas informações. 1082 00:53:23,860 --> 00:53:28,250 Assim, com o exemplo de mashup, algumas informações que podemos querer 1083 00:53:28,250 --> 00:53:30,580 é artigo títulos. 1084 00:53:30,580 --> 00:53:33,330 Agora, nós could-- uma opção é fazê-lo de forma síncrona 1085 00:53:33,330 --> 00:53:37,940 e isso significa que let de parar, ir buscar o artigo, 1086 00:53:37,940 --> 00:53:41,275 obter o artigo para trás, e, em seguida, render, mas que seria muito lento. 1087 00:53:41,275 --> 00:53:44,150 Isso seria uma má experiência do usuário porque você teria apenas que estar sentado 1088 00:53:44,150 --> 00:53:46,630 lá esperando por algo para responder. 1089 00:53:46,630 --> 00:53:50,020 >> De forma assíncrona significa que nós vamos continuar indo sobre o nosso negócio, 1090 00:53:50,020 --> 00:53:52,529 renderização da página, e nós vamos enviar um pedido 1091 00:53:52,529 --> 00:53:54,570 Esse é um tipo de ir para acontecer no fundo. 1092 00:53:54,570 --> 00:53:57,610 Eu acho que nós usamos o exemplo na palestra de Rob chamando e dizendo: 1093 00:53:57,610 --> 00:53:59,980 hey, você pode olhar este acima para mim e voltar para mim, 1094 00:53:59,980 --> 00:54:02,870 ao invés de apenas me esperando no telefone. 1095 00:54:02,870 --> 00:54:07,020 Assim, de forma assíncrona significa que isso acontece no fundo de distância de nós 1096 00:54:07,020 --> 00:54:08,676 em paralelo. 1097 00:54:08,676 --> 00:54:10,400 >> Ótima pergunta. 1098 00:54:10,400 --> 00:54:11,830 Algo mais? 1099 00:54:11,830 --> 00:54:12,330 Ótimo. 1100 00:54:12,330 --> 00:54:15,020 Nós vamos saltar muito mais em solicitações assíncronas com Ajax. 1101 00:54:15,020 --> 00:54:18,287 >> AUDIÊNCIA: Será que JavaScript-- onde faz -lo cair com MVC? 1102 00:54:18,287 --> 00:54:19,620 HANNAH BLUMBERG: Ótima pergunta. 1103 00:54:19,620 --> 00:54:23,320 Quando fizer a queda JavaScript com MVC? 1104 00:54:23,320 --> 00:54:23,930 Hm. 1105 00:54:23,930 --> 00:54:28,350 Eu acho que ele pode fall-- por isso, não costumam 1106 00:54:28,350 --> 00:54:31,340 gostaria de esmagar-lo em que paradigma, mas eu acho que eu diria, 1107 00:54:31,340 --> 00:54:34,280 OK, então JavaScript realmente vai permitir que 1108 00:54:34,280 --> 00:54:37,587 nós para coletar dados, interpretar dados, na verdade, fazer 1109 00:54:37,587 --> 00:54:38,920 coisas significativas com os dados. 1110 00:54:38,920 --> 00:54:41,100 Dessa forma, é muito controle-like. 1111 00:54:41,100 --> 00:54:43,900 >> Mas ele também vai nos permitir exibir coisas e impressão coisas. 1112 00:54:43,900 --> 00:54:47,021 Dessa forma, é muito vista-like. 1113 00:54:47,021 --> 00:54:47,520 Sim. 1114 00:54:47,520 --> 00:54:51,710 Então, é tipo como de PHP em onde ele pode ser tipo de ambos. 1115 00:54:51,710 --> 00:54:53,330 Boa pergunta. 1116 00:54:53,330 --> 00:54:55,209 Algo mais? 1117 00:54:55,209 --> 00:54:56,000 Tudo bem, impressionante. 1118 00:54:56,000 --> 00:54:57,120 Seguindo em frente. 1119 00:54:57,120 --> 00:54:59,110 >> Então, vamos ver um exemplo de como podemos usar 1120 00:54:59,110 --> 00:55:02,250 JavaScript em um de nossos programas de web. 1121 00:55:02,250 --> 00:55:05,680 Então, eu vou considerar isso index.html com um monte de HTML. 1122 00:55:05,680 --> 00:55:08,800 E a coisa que eu quero que você focar é essa tag script. 1123 00:55:08,800 --> 00:55:13,280 E isso, diz, OK, eu quero correr alguns JavaScript e aqui é onde ele vive. 1124 00:55:13,280 --> 00:55:15,400 Vive em hello.js. 1125 00:55:15,400 --> 00:55:21,120 >> E muito parecido com CSS, poderíamos colocar JavaScript dentro do HTML. 1126 00:55:21,120 --> 00:55:24,000 Por que nós queremos para separá-lo fora? 1127 00:55:24,000 --> 00:55:24,500 Sim. 1128 00:55:24,500 --> 00:55:25,486 >> AUDIÊNCIA: Mais fácil de reescrever? 1129 00:55:25,486 --> 00:55:26,402 >> HANNAH BLUMBERG: Yeah. 1130 00:55:26,402 --> 00:55:28,450 É mais fácil de usar em toda diferentes páginas da web. 1131 00:55:28,450 --> 00:55:29,980 Ele mantém as coisas limpas. 1132 00:55:29,980 --> 00:55:32,090 É apenas uma boa prática. 1133 00:55:32,090 --> 00:55:32,590 Fantástica. 1134 00:55:32,590 --> 00:55:33,930 Boa resposta. 1135 00:55:33,930 --> 00:55:36,690 Tão bom, então isso vai para ser o nosso index.html. 1136 00:55:36,690 --> 00:55:39,430 E então aqui é a nossa minúsculo arquivo JavaScript pouco. 1137 00:55:39,430 --> 00:55:42,410 >> E tudo o que diz é alerta Olá, mundo. 1138 00:55:42,410 --> 00:55:46,040 Então o que acontece é quando Nesta página renders-- 1139 00:55:46,040 --> 00:55:49,680 por isso, se você vai para qualquer site este é-- tudo o que vai acontecer 1140 00:55:49,680 --> 00:55:53,330 é que vai dizer, OK, eu sou indo para executar este código JavaScript. 1141 00:55:53,330 --> 00:55:56,370 E este código JavaScript apenas diz alerta Olá, mundo. 1142 00:55:56,370 --> 00:55:59,090 Então, eu estou indo para obter esta friendly little pop-up. 1143 00:55:59,090 --> 00:56:00,360 >> Frio? 1144 00:56:00,360 --> 00:56:04,746 Isso é tipo como o nosso primeiro JavaScript programa, o nosso Olá, mundo. 1145 00:56:04,746 --> 00:56:07,690 1146 00:56:07,690 --> 00:56:12,190 Vamos olhar um pouco mais sobre o que a sintaxe de JavaScript parece. 1147 00:56:12,190 --> 00:56:16,330 E, especificamente, vamos compará-lo com C e PHP, o que temos visto antes. 1148 00:56:16,330 --> 00:56:20,610 >> Em JavaScript, nós vamos ter var, o nome da variável e, em seguida 1149 00:56:20,610 --> 00:56:21,690 seu valor real. 1150 00:56:21,690 --> 00:56:26,170 E nós não especificar um tipo, apenas como em PHP, mas muito ao contrário C. 1151 00:56:26,170 --> 00:56:28,850 Assim, por exemplo, se quiséssemos para armazenar o valor 50, 1152 00:56:28,850 --> 00:56:32,490 no C, teríamos a dizer, hey, C, eu quero um número inteiro, 1153 00:56:32,490 --> 00:56:35,076 Vou chamá-lo i, e seu valor é de 50. 1154 00:56:35,076 --> 00:56:36,450 Em PHP, é um pouco mais fácil. 1155 00:56:36,450 --> 00:56:41,880 Nós dizemos, hey, eu quero uma variável i chamado e seu valor é de 50. 1156 00:56:41,880 --> 00:56:45,890 Muito semelhante, no JavaScript, nós dizer hey, eu quero uma variável chamada i, 1157 00:56:45,890 --> 00:56:47,080 seu valor é de 50. 1158 00:56:47,080 --> 00:56:52,140 Toda vez que eu uso posterior i, eu não preciso escrever var. 1159 00:56:52,140 --> 00:56:53,810 É só eu a partir desse ponto. 1160 00:56:53,810 --> 00:56:58,660 Da mesma forma, em C, onde uma vez dizemos int i, nós apenas usar i. 1161 00:56:58,660 --> 00:57:00,340 Frio? 1162 00:57:00,340 --> 00:57:01,800 Tudo certo. 1163 00:57:01,800 --> 00:57:03,710 >> Passando para loops, Felizmente, estes quase 1164 00:57:03,710 --> 00:57:06,720 olhar exactly-- Eu acho que eles são exactamente o mesmo que o que 1165 00:57:06,720 --> 00:57:09,799 loops são indo olhar como em algo como C onde o seu loop for 1166 00:57:09,799 --> 00:57:11,840 vai ter três parts-- uma inicialização, 1167 00:57:11,840 --> 00:57:13,640 uma condição, e uma atualização. 1168 00:57:13,640 --> 00:57:15,340 Um loop while, parece exatamente o mesmo. 1169 00:57:15,340 --> 00:57:16,390 Nós apenas dar-lhe uma condição. 1170 00:57:16,390 --> 00:57:18,264 >> E um loop Do While, novamente, exatamente o mesmo. 1171 00:57:18,264 --> 00:57:20,190 Nós dar-lhe uma condição. 1172 00:57:20,190 --> 00:57:24,510 Digamos que eu queria fazer uma iteração over-- Eu queria fazer algo por cinco vezes. 1173 00:57:24,510 --> 00:57:27,840 Em C, podemos escrever para o init i é igual a 0. 1174 00:57:27,840 --> 00:57:30,480 i é menos de 5, i ++. 1175 00:57:30,480 --> 00:57:34,240 A única diferença, em JavaScript, em vez de dizer int i é igual a 0, 1176 00:57:34,240 --> 00:57:36,820 dizemos var i é igual a 0. 1177 00:57:36,820 --> 00:57:38,370 Bela. 1178 00:57:38,370 --> 00:57:41,320 Essa é a única diferença. 1179 00:57:41,320 --> 00:57:43,200 Quaisquer perguntas sobre nada disso? 1180 00:57:43,200 --> 00:57:44,160 Sim. 1181 00:57:44,160 --> 00:57:48,480 >> AUDIÊNCIA: Então, em PHP, que é o mesmo coisa, exceto mas como uma variável? 1182 00:57:48,480 --> 00:57:49,564 Ou foi um exemplo var? 1183 00:57:49,564 --> 00:57:50,480 HANNAH BLUMBERG: Yeah. 1184 00:57:50,480 --> 00:57:52,310 Assim, em PHP, vai ser um sinal de dólar. 1185 00:57:52,310 --> 00:57:59,450 Então ele vai para $ i é igual a 0, $ i é menos do que 5, $ i ++. 1186 00:57:59,450 --> 00:58:02,490 Ótima pergunta. 1187 00:58:02,490 --> 00:58:04,570 >> Agora vamos falar sobre declarações de função. 1188 00:58:04,570 --> 00:58:07,010 Em C, quando declarou um função, demos-lhe um nome 1189 00:58:07,010 --> 00:58:08,490 e nós demos alguns parâmetros. 1190 00:58:08,490 --> 00:58:10,670 E no início, nós escrevemos o tipo. 1191 00:58:10,670 --> 00:58:12,440 Em JavaScript, todos nós tem a fazer é escrever 1192 00:58:12,440 --> 00:58:15,080 a palavra-chave função que diz, hey, JavaScript, 1193 00:58:15,080 --> 00:58:16,570 Estou prestes a definir uma função. 1194 00:58:16,570 --> 00:58:18,520 >> Neste caso, ela tem nome soma. 1195 00:58:18,520 --> 00:58:20,820 E leva dois argumentos, xe y. 1196 00:58:20,820 --> 00:58:23,280 Observe que nós não nos importamos sobre os tipos de x e y. 1197 00:58:23,280 --> 00:58:26,280 E, assim como C, temos esse retorno de palavras-chave, 1198 00:58:26,280 --> 00:58:29,140 assim que nós podemos fazer alguma coisa como retorno xe y. 1199 00:58:29,140 --> 00:58:32,540 >> E agora, uma vez que tenha escrito esta primeira função, podemos usar soma em qualquer lugar. 1200 00:58:32,540 --> 00:58:34,740 E isso é totalmente bom. 1201 00:58:34,740 --> 00:58:37,530 Uma coisa muito legal sobre JavaScript que é muito diferente de C 1202 00:58:37,530 --> 00:58:40,770 é que as funções podem ser tratados como valores. 1203 00:58:40,770 --> 00:58:43,895 Assim, podemos fazer algo parecido aqui onde eu suponho que eu cobrir este up-- 1204 00:58:43,895 --> 00:58:46,400 Cobri-se a soma var part-- e nós apenas dissemos 1205 00:58:46,400 --> 00:58:49,850 xy é igual a função de retorno x mais y. 1206 00:58:49,850 --> 00:58:52,140 >> Isso é o que seria chamado uma função anônima. 1207 00:58:52,140 --> 00:58:53,920 É uma função sem um nome. 1208 00:58:53,920 --> 00:58:56,290 Considerando que a presente diz função soma, blá, blá, blá, 1209 00:58:56,290 --> 00:58:59,340 este apenas diria função. 1210 00:58:59,340 --> 00:59:02,020 Mas agora, embora eu tenha esta função anônima, 1211 00:59:02,020 --> 00:59:03,630 que a função é realmente apenas um valor. 1212 00:59:03,630 --> 00:59:05,160 Nós podemos tratá-la como um valor. 1213 00:59:05,160 --> 00:59:10,180 >> Assim, podemos salvá-lo em uma variável do mesmo forma, poderíamos armazenar 50 em uma variável. 1214 00:59:10,180 --> 00:59:13,870 Assim, podemos dizer, OK, eu quero um variável, que é chamado de soma, 1215 00:59:13,870 --> 00:59:16,011 e é esta função. 1216 00:59:16,011 --> 00:59:18,760 Então, essas duas coisas são, na verdade, vai fazer exatamente a mesma coisa, 1217 00:59:18,760 --> 00:59:21,576 mas a sintaxe é um pouco diferente e uma espécie de nota do divertimento. 1218 00:59:21,576 --> 00:59:22,076 Sim. 1219 00:59:22,076 --> 00:59:25,548 >> AUDIÊNCIA: Então, você poderia chamar um função que era anônimo, dizendo: 1220 00:59:25,548 --> 00:59:28,244 suportes soma 2, 5? 1221 00:59:28,244 --> 00:59:29,160 HANNAH BLUMBERG: Yeah. 1222 00:59:29,160 --> 00:59:32,280 Você pode chamar esse anônimo em função da mesma maneira. 1223 00:59:32,280 --> 00:59:33,350 Você faria sum (2, 5) ;. 1224 00:59:33,350 --> 00:59:36,180 1225 00:59:36,180 --> 00:59:38,200 Isso seria totalmente bem. 1226 00:59:38,200 --> 00:59:41,575 >> Se eu não faço a soma var igual função, se eu simplesmente suprimido 1227 00:59:41,575 --> 00:59:45,480 isto-- Eu sei que é na minha mão, mas fingir que eu excluído isto-- seguida 1228 00:59:45,480 --> 00:59:46,964 essa função é tipo de acabado. 1229 00:59:46,964 --> 00:59:49,630 Você nunca pode usá-lo novamente porque você não tem um nome para ele. 1230 00:59:49,630 --> 00:59:53,497 É difícil se referir a algo você não sabe o que chamar. 1231 00:59:53,497 --> 00:59:54,080 Boa pergunta. 1232 00:59:54,080 --> 00:59:54,580 Sim. 1233 00:59:54,580 --> 00:59:59,580 >> AUDIÊNCIA: você pode fazer referência soma em outros lugares com o valor de x mais y? 1234 00:59:59,580 --> 01:00:01,940 >> HANNAH BLUMBERG: Você pode soma de referência em outros lugares 1235 01:00:01,940 --> 01:00:03,360 com o valor x mais y? 1236 01:00:03,360 --> 01:00:05,130 Eu não sou inteiramente certo o que você quer dizer. 1237 01:00:05,130 --> 01:00:10,582 >> AUDIÊNCIA: Então seu passado semi-anônimo função é a soma é igual a este 1238 01:00:10,582 --> 01:00:14,452 função anônima, então soma é agora uma variável que você can-- 1239 01:00:14,452 --> 01:00:15,410 HANNAH BLUMBERG: Certo. 1240 01:00:15,410 --> 01:00:18,980 Assim, a soma é variável, mas é actually-- 1241 01:00:18,980 --> 01:00:23,770 tal que a soma é uma variável cujo valor é a função. 1242 01:00:23,770 --> 01:00:27,030 Por isso, é uma função, que é uma espécie de uma coisa estranha de quebrar a cabeça em torno de 1243 01:00:27,030 --> 01:00:29,880 desde que começamos a brincar com C e você não pode fazer isso em C. 1244 01:00:29,880 --> 01:00:32,679 Mas agora podemos chamar somar o mesma maneira que poderíamos chamar soma aqui. 1245 01:00:32,679 --> 01:00:33,220 AUDIÊNCIA: OK. 1246 01:00:33,220 --> 01:00:33,970 HANNAH BLUMBERG: Yeah. 1247 01:00:33,970 --> 01:00:34,553 Boa pergunta. 1248 01:00:34,553 --> 01:00:35,438 Sim. 1249 01:00:35,438 --> 01:00:39,862 >> AUDIÊNCIA: Então nós não utilizar o protótipos em PHP ou JavaScript? 1250 01:00:39,862 --> 01:00:42,070 HANNAH BLUMBERG: Não, nós Não é necessário usar protótipos, 1251 01:00:42,070 --> 01:00:43,880 especialmente em JavaScript. 1252 01:00:43,880 --> 01:00:49,380 Então, uma coisa má prática que eu sou vai dizer que você não deve fazer 1253 01:00:49,380 --> 01:00:52,620 é que você não tem que escrever var i = 50. 1254 01:00:52,620 --> 01:00:54,840 Você poderia simplesmente começar a fazer i = 50. 1255 01:00:54,840 --> 01:00:57,490 E eu faria apenas uma variável global. 1256 01:00:57,490 --> 01:01:00,550 >> É muito má prática nunca diga explicitamente var i, 1257 01:01:00,550 --> 01:01:01,800 mas é algo que você pode fazer. 1258 01:01:01,800 --> 01:01:03,591 O intérprete não é vai gritar com você. 1259 01:01:03,591 --> 01:01:05,920 JavaScript é bastante semelhante, você pode fazer o que quiser. 1260 01:01:05,920 --> 01:01:09,301 1261 01:01:09,301 --> 01:01:09,800 Oh, desculpe. 1262 01:01:09,800 --> 01:01:10,300 Há duas. 1263 01:01:10,300 --> 01:01:12,150 Nas calças alaranjadas. 1264 01:01:12,150 --> 01:01:13,190 Continue. 1265 01:01:13,190 --> 01:01:14,390 >> AUDIÊNCIA: Não, você primeiro. 1266 01:01:14,390 --> 01:01:16,765 >> AUDIÊNCIA: Não, eu só estava dizendo Eu não tinha a minha mão para cima. 1267 01:01:16,765 --> 01:01:20,248 1268 01:01:20,248 --> 01:01:20,748 ESTÁ BEM. 1269 01:01:20,748 --> 01:01:26,604 Então, se você fosse chamar que pela primeira vez, agora resumir, 1270 01:01:26,604 --> 01:01:29,864 chamamos-lhe da mesma forma, x, y, como a cada momento? 1271 01:01:29,864 --> 01:01:30,780 HANNAH BLUMBERG: Yeah. 1272 01:01:30,780 --> 01:01:32,572 Então, esses dois essencialmente fazer a mesma coisa. 1273 01:01:32,572 --> 01:01:35,113 AUDIÊNCIA: E qual é a vantagem de usar um ou o outro? 1274 01:01:35,113 --> 01:01:37,500 HANNAH BLUMBERG: Nenhuma vantagem de usar um ou o outro. 1275 01:01:37,500 --> 01:01:40,080 Eu só queria mostrar-lhe dois diferentes pedaços de sintaxe. 1276 01:01:40,080 --> 01:01:42,770 Um monte de vezes em que anônimo funções têm um propósito 1277 01:01:42,770 --> 01:01:48,220 é se o argumento para outro função deve ser uma função. 1278 01:01:48,220 --> 01:01:50,600 E nós vamos ver que em apenas um segundo com o Ajax. 1279 01:01:50,600 --> 01:01:53,577 >> Então, se isso não faz qualquer sentido, armazená-lo na parte de trás de sua cabeça. 1280 01:01:53,577 --> 01:01:55,660 É aí que um anônimo função pode ser útil 1281 01:01:55,660 --> 01:01:58,284 porque não é realmente vale a pena dando-lhe um nome, uma vez que estamos apenas 1282 01:01:58,284 --> 01:01:59,443 vai usá-lo uma vez. 1283 01:01:59,443 --> 01:02:00,370 Sim. 1284 01:02:00,370 --> 01:02:03,635 >> AUDIÊNCIA: Se x e y mudança mais tarde em, somará mudar também? 1285 01:02:03,635 --> 01:02:06,510 HANNAH BLUMBERG: Se x e y mudança mais tarde, vai somar mudar também? 1286 01:02:06,510 --> 01:02:08,840 Portanto, este é, na verdade I acho que algo que é, 1287 01:02:08,840 --> 01:02:12,260 novamente, ele só se sente muito diferente de C. Este não é um valor. 1288 01:02:12,260 --> 01:02:13,620 Não é 5. 1289 01:02:13,620 --> 01:02:15,550 É apenas a própria função. 1290 01:02:15,550 --> 01:02:19,110 Assim, logo que você lhe dá parâmetros, então você vai realmente calcular um valor. 1291 01:02:19,110 --> 01:02:21,193 >> MARIA ZLATKOVA: E, em seguida, você pode chamar a função 1292 01:02:21,193 --> 01:02:23,272 e usá-lo para obter algum valor. 1293 01:02:23,272 --> 01:02:24,230 HANNAH BLUMBERG: Certo. 1294 01:02:24,230 --> 01:02:25,250 Exatamente. 1295 01:02:25,250 --> 01:02:25,863 Sim. 1296 01:02:25,863 --> 01:02:27,946 >> AUDIÊNCIA: Então, se você só armazená-lo na variável, 1297 01:02:27,946 --> 01:02:31,430 como var x é igual a soma de dois values-- 1298 01:02:31,430 --> 01:02:32,420 >> HANNAH BLUMBERG: Yeah. 1299 01:02:32,420 --> 01:02:35,320 Então, você poderia apenas fazer var sum é igual a soma dos dois valores. 1300 01:02:35,320 --> 01:02:37,670 Sim. 1301 01:02:37,670 --> 01:02:38,680 Alguma outra pergunta? 1302 01:02:38,680 --> 01:02:39,642 Sim. 1303 01:02:39,642 --> 01:02:42,047 >> AUDIÊNCIA: Mas será que confundir soma e soma? 1304 01:02:42,047 --> 01:02:45,062 Como se você chamar seu montante variável, você chamaria a soma função? 1305 01:02:45,062 --> 01:02:45,895 HANNAH BLUMBERG: Mm. 1306 01:02:45,895 --> 01:02:46,395 Milímetros. 1307 01:02:46,395 --> 01:02:51,253 Se você fez alguma coisa como, soma é igual a soma de 2, 5? 1308 01:02:51,253 --> 01:02:53,170 >> AUDIÊNCIA: É. 1309 01:02:53,170 --> 01:02:56,465 >> HANNAH BLUMBERG: Eu acredito que iria substituir o valor de soma. 1310 01:02:56,465 --> 01:02:59,290 Portanto, outra interessante coisa sobre JavaScript 1311 01:02:59,290 --> 01:03:02,950 é que uma única variável pode assumir em um monte de diferentes tipos. 1312 01:03:02,950 --> 01:03:03,790 Bad prática. 1313 01:03:03,790 --> 01:03:06,280 Você não deve fazer algo como o que você acabou de dizer. 1314 01:03:06,280 --> 01:03:10,240 >> Mas em C, se eu estiver definido igual a um número inteiro, 1315 01:03:10,240 --> 01:03:13,570 sabemos que nunca é vai se tornar uma string. 1316 01:03:13,570 --> 01:03:15,670 Este não é o caso em JavaScript. 1317 01:03:15,670 --> 01:03:17,770 Sim, boa pergunta. 1318 01:03:17,770 --> 01:03:20,151 Algo mais? 1319 01:03:20,151 --> 01:03:20,650 Tudo certo. 1320 01:03:20,650 --> 01:03:21,850 Fazendo tudo certo na hora certa. 1321 01:03:21,850 --> 01:03:23,050 Manter indo. 1322 01:03:23,050 --> 01:03:25,200 Tudo certo. 1323 01:03:25,200 --> 01:03:27,780 >> Se olharmos para um array em JavaScript, é aqui 1324 01:03:27,780 --> 01:03:30,250 um rápido exemplo de uma matriz de cadeias. 1325 01:03:30,250 --> 01:03:31,967 E matrizes podem crescer de forma dinâmica. 1326 01:03:31,967 --> 01:03:33,675 Eles não têm um tamanho fixo da mesma maneira 1327 01:03:33,675 --> 01:03:37,990 que eles fazem em C. Podemos acessar o elementos com apenas os colchetes. 1328 01:03:37,990 --> 01:03:41,720 >> Isso se parece muito com PHP e um monte como C, onde podemos dizer, neste caso, 1329 01:03:41,720 --> 01:03:48,360 se eu queria a palavra JavaScript, eu o faria que arr colchetes com um 0, 1, 2. 1330 01:03:48,360 --> 01:03:51,450 1331 01:03:51,450 --> 01:03:55,390 E então se você se lembra em C quando queria ter o comprimento de uma matriz, 1332 01:03:55,390 --> 01:03:56,820 que era realmente irritante. 1333 01:03:56,820 --> 01:03:58,460 Mas em JavaScript, super fácil. 1334 01:03:58,460 --> 01:03:59,910 Tudo o que fazemos, .length. 1335 01:03:59,910 --> 01:04:01,120 Dá-lhe os comprimentos. 1336 01:04:01,120 --> 01:04:01,892 É isso aí. 1337 01:04:01,892 --> 01:04:03,140 >> AUDIÊNCIA: É simples. 1338 01:04:03,140 --> 01:04:05,306 >> HANNAH BLUMBERG: Sim, faz a sua vida muito mais fácil. 1339 01:04:05,306 --> 01:04:08,950 1340 01:04:08,950 --> 01:04:11,560 OK, não object-- lá. 1341 01:04:11,560 --> 01:04:15,480 Objetos em sensação JavaScript muito parecido com estruturas em C 1342 01:04:15,480 --> 01:04:18,280 e arrays associativos em PHP. 1343 01:04:18,280 --> 01:04:20,270 Então, o que temos visto um muito é JSON, que 1344 01:04:20,270 --> 01:04:23,150 significa JavaScript Object Notation. 1345 01:04:23,150 --> 01:04:25,550 E é basicamente uma forma de estruturar nossos dados. 1346 01:04:25,550 --> 01:04:27,880 >> Então, vamos ver um exemplo, provavelmente o mais fácil. 1347 01:04:27,880 --> 01:04:32,540 Então aqui está um exemplo de um objeto que armazena a classe, CS50. 1348 01:04:32,540 --> 01:04:37,790 E quando eu digo classe, quero dizer, é claro, não como-- sim, o curso, CS50. 1349 01:04:37,790 --> 01:04:40,730 E você vai ver que tudo no objeto 1350 01:04:40,730 --> 01:04:43,526 vai ser contido entre chaves. 1351 01:04:43,526 --> 01:04:48,260 >> E começamos a associar nomes de campo ou chaves com os diferentes valores. 1352 01:04:48,260 --> 01:04:52,920 Assim, você pode começar a ver como esse tipo de se sente como uma matriz associativa em PHP. 1353 01:04:52,920 --> 01:04:57,450 Então, nós estamos indo para associar o campo ou o nome da chave, claro, com a corda, 1354 01:04:57,450 --> 01:04:58,510 CS50. 1355 01:04:58,510 --> 01:04:59,940 >> Nós vamos ter um instrutor. 1356 01:04:59,940 --> 01:05:00,940 Nós vamos ter TFs. 1357 01:05:00,940 --> 01:05:05,240 Nós vamos ter número de Série de Exercícios e nós vamos ter gravado. 1358 01:05:05,240 --> 01:05:10,720 E uma coisa legal para notar é tudo de essas coisas têm diferentes tipos, 1359 01:05:10,720 --> 01:05:12,020 e isso é totalmente bom. 1360 01:05:12,020 --> 01:05:15,330 >> É bom para um objeto, de fato, ele provavelmente é esperado para um objeto 1361 01:05:15,330 --> 01:05:19,620 ter uma combinação de cordas e números e Booleans e matrizes 1362 01:05:19,620 --> 01:05:23,420 e qualquer outra coisa que você pode quer ter dentro do seu objeto. 1363 01:05:23,420 --> 01:05:28,570 E note que estes vão ser os nomes ou as chaves, e então nós apenas 1364 01:05:28,570 --> 01:05:30,300 defina-igual com um pouco de cólon. 1365 01:05:30,300 --> 01:05:32,015 >> AUDIÊNCIA: O que exatamente significa JSON significa? 1366 01:05:32,015 --> 01:05:33,890 HANNAH BLUMBERG: O que JSON exatamente significa isso? 1367 01:05:33,890 --> 01:05:36,470 JSON apenas representa JavaScript Object Notation. 1368 01:05:36,470 --> 01:05:38,430 É apenas uma maneira de formatação. 1369 01:05:38,430 --> 01:05:40,040 Sim. 1370 01:05:40,040 --> 01:05:41,800 É uma maneira de formatar nossos dados. 1371 01:05:41,800 --> 01:05:43,620 >> Em C, é estruturas. 1372 01:05:43,620 --> 01:05:45,800 Em PHP, é matrizes associativas. 1373 01:05:45,800 --> 01:05:47,120 Em JavaScript, temos objetos. 1374 01:05:47,120 --> 01:05:48,969 >> AUDIÊNCIA: Então CS50 é um objeto? 1375 01:05:48,969 --> 01:05:51,010 HANNAH BLUMBERG: CS50 é o objecto, neste caso. 1376 01:05:51,010 --> 01:05:54,830 1377 01:05:54,830 --> 01:05:57,880 Agora, como é que nós, na verdade, o acesso esses campos ou alterar esses campos. 1378 01:05:57,880 --> 01:06:03,920 Por exemplo, suponha que nós decidimos que você queria um menos pset neste semestre. 1379 01:06:03,920 --> 01:06:06,300 Em vez de nove, estamos só vai ter oito. 1380 01:06:06,300 --> 01:06:08,240 Como poderíamos mudar isso? 1381 01:06:08,240 --> 01:06:09,436 >> Oh, maneira errada. 1382 01:06:09,436 --> 01:06:11,060 Há duas maneiras que nós podemos fazer isso. 1383 01:06:11,060 --> 01:06:13,490 O número um é com o ponto notação e número dois 1384 01:06:13,490 --> 01:06:15,750 é com a notação colchete. 1385 01:06:15,750 --> 01:06:19,720 Assim, por exemplo, se eu queria mudar ou acesso 1386 01:06:19,720 --> 01:06:26,820 Série de Exercícios do campo em nosso objeto CS50, o que eu gostaria de fazer é CS50.psets, 1387 01:06:26,820 --> 01:06:30,770 de modo que o nome do objecto de pontos o nome do campo ou a chave. 1388 01:06:30,770 --> 01:06:37,120 >> Muito semelhante, é exatamente equivalente a fazer CS50, e, em seguida 1389 01:06:37,120 --> 01:06:42,050 em colchetes, Série de Exercícios. 1390 01:06:42,050 --> 01:06:42,837 Frio? 1391 01:06:42,837 --> 01:06:44,298 Sim. 1392 01:06:44,298 --> 01:06:47,707 >> AUDIÊNCIA: Então é JSON tecnicamente ainda JavaScript, 1393 01:06:47,707 --> 01:06:51,814 mesmo que nos temos Série de Exercícios separá-lo para fora [inaudível]? 1394 01:06:51,814 --> 01:06:52,730 HANNAH BLUMBERG: Claro. 1395 01:06:52,730 --> 01:06:56,290 Então a questão é, são JavaScript e JSON equivalente? 1396 01:06:56,290 --> 01:07:00,750 Então JSON é notação, basicamente, a maneira que nós escrevemos para fora 1397 01:07:00,750 --> 01:07:02,700 um objeto de JavaScript. 1398 01:07:02,700 --> 01:07:05,190 Assim, eles não são exatamente o mesmo. 1399 01:07:05,190 --> 01:07:08,950 >> Eu diria JavaScript, lá são objetos em JavaScript. 1400 01:07:08,950 --> 01:07:12,590 JSON leva esses objetos e os imprime e apresenta- 1401 01:07:12,590 --> 01:07:15,160 ou armazena-los em uma maneira agradável. 1402 01:07:15,160 --> 01:07:18,110 Assim JSON não é uma programação língua da maneira que é JavaScript. 1403 01:07:18,110 --> 01:07:20,900 É apenas a notação para nossos objetos em JavaScript. 1404 01:07:20,900 --> 01:07:21,400 Sim. 1405 01:07:21,400 --> 01:07:24,144 >> AUDIÊNCIA: Então, o que exatamente [Inaudível] completar? 1406 01:07:24,144 --> 01:07:25,060 HANNAH BLUMBERG: Claro. 1407 01:07:25,060 --> 01:07:27,727 Então, isso realmente não faz nada. 1408 01:07:27,727 --> 01:07:28,935 Esta é apenas uma maneira de acessar. 1409 01:07:28,935 --> 01:07:31,393 Então, vamos dizer que queria mudar o número de conjuntos de problemas 1410 01:07:31,393 --> 01:07:32,450 de nove para oito. 1411 01:07:32,450 --> 01:07:34,383 O que fazemos é fazer algo como CS50.psets = 8 ;. 1412 01:07:34,383 --> 01:07:38,500 1413 01:07:38,500 --> 01:07:39,400 >> Sim, grande questão. 1414 01:07:39,400 --> 01:07:40,733 Este é apenas para mostrar-lhe sintaxe. 1415 01:07:40,733 --> 01:07:43,620 Na verdade não faz nada de útil. 1416 01:07:43,620 --> 01:07:46,085 Alguma pergunta? 1417 01:07:46,085 --> 01:07:48,210 Seguindo em frente. 1418 01:07:48,210 --> 01:07:51,960 >> Então, vamos olhar para um rápido exemplo de como JavaScript funciona porque eu disse a você que 1419 01:07:51,960 --> 01:07:55,170 faz todas essas coisas legais e nos permite modificar páginas da web. 1420 01:07:55,170 --> 01:07:56,970 Vamos realmente vê-lo em ação. 1421 01:07:56,970 --> 01:07:59,850 Então pegue, por exemplo, esse arquivo HTML. 1422 01:07:59,850 --> 01:08:04,350 >> E a coisa que eu quero que você se concentrar em esta etiqueta particular, que é um botão, 1423 01:08:04,350 --> 01:08:06,182 com id search_button. 1424 01:08:06,182 --> 01:08:08,670 É apenas na página. 1425 01:08:08,670 --> 01:08:10,690 Então agora vamos ver o que nós podemos realmente fazer. 1426 01:08:10,690 --> 01:08:12,560 >> Bem, suponha que, quando você clicar nesse botão, 1427 01:08:12,560 --> 01:08:16,010 nós queremos fazer uma alert-- você clicou no botão. 1428 01:08:16,010 --> 01:08:17,840 Vamos ver como podemos fazer isso. 1429 01:08:17,840 --> 01:08:23,869 Então window.onload-- isso não é algo que você já viu na sala de aula, pois 1430 01:08:23,869 --> 01:08:26,180 não precisa saber que para o quiz. 1431 01:08:26,180 --> 01:08:33,660 Mas isso basicamente diz, OK, chamada esta função quando as cargas de janela. 1432 01:08:33,660 --> 01:08:35,080 >> Então, isso é apenas uma espécie de código de configuração. 1433 01:08:35,080 --> 01:08:36,390 Não se preocupe tanto com isso. 1434 01:08:36,390 --> 01:08:39,170 O que eu quero que você focar é aqui. 1435 01:08:39,170 --> 01:08:44,020 Dizemos var searchButton igual document.getElementById search_button. 1436 01:08:44,020 --> 01:08:46,450 >> Então, como você pode imaginar, o que isto significa é que, diz, 1437 01:08:46,450 --> 01:08:50,920 OK, vai encontrar o elemento com ID search_button. 1438 01:08:50,920 --> 01:08:52,790 E agora temos que elemento real e eu sou 1439 01:08:52,790 --> 01:08:56,279 indo para armazená-lo em um searchButton variável. 1440 01:08:56,279 --> 01:09:00,651 E agora podemos realmente usar esse elemento e alterá-lo, ou acessar seus valores, 1441 01:09:00,651 --> 01:09:01,359 coisas assim. 1442 01:09:01,359 --> 01:09:04,649 Nós podemos realmente começar a se envolver com a página da web. 1443 01:09:04,649 --> 01:09:10,330 >> Então aqui eu digo: OK, agora que eu tenho esse botão, quando é clicado, 1444 01:09:10,330 --> 01:09:12,859 chamar essa função anônima. 1445 01:09:12,859 --> 01:09:16,811 Portanto, este é o lugar onde anônimo funções tornar-se útil. 1446 01:09:16,811 --> 01:09:18,060 E o que faz a função de fazer? 1447 01:09:18,060 --> 01:09:20,529 Bem, ele só chama isso função de alerta e diz, 1448 01:09:20,529 --> 01:09:22,910 você clicou no botão Search. 1449 01:09:22,910 --> 01:09:29,670 >> Então, o que vai acontecer se eu vou para onde quer este HTML vive e clico no botão, 1450 01:09:29,670 --> 01:09:33,729 Vou pegar um pouco de fantasia alerta que diz que você clicou no botão. 1451 01:09:33,729 --> 01:09:40,710 Assim, as coisas para focar aqui-- document.getElementById 1452 01:09:40,710 --> 01:09:44,960 recebe um HTML especial elemento com o ID dado. 1453 01:09:44,960 --> 01:09:48,529 E agora podemos definir o que deve acontecer quando 1454 01:09:48,529 --> 01:09:50,702 aquele elemento em particular é clicado. 1455 01:09:50,702 --> 01:09:52,670 >> AUDIÊNCIA: Temos que colocar tudo isso em? 1456 01:09:52,670 --> 01:09:53,162 >> HANNAH BLUMBERG: Desculpe? 1457 01:09:53,162 --> 01:09:55,130 >> AUDIÊNCIA: Será que temos de codificar fisicamente tudo isso? 1458 01:09:55,130 --> 01:09:56,340 >> HANNAH BLUMBERG: Nós temos que codificar fisicamente tudo isso? 1459 01:09:56,340 --> 01:09:56,839 Sim. 1460 01:09:56,839 --> 01:09:58,120 Não é este tipo de irritante? 1461 01:09:58,120 --> 01:10:00,032 Este é um monte de código. 1462 01:10:00,032 --> 01:10:01,574 >> AUDIÊNCIA: Você poderia importar alguma coisa. 1463 01:10:01,574 --> 01:10:02,532 HANNAH BLUMBERG: Certo. 1464 01:10:02,532 --> 01:10:03,610 Nós poderíamos usar alguma coisa. 1465 01:10:03,610 --> 01:10:08,140 E em particular-- oh, é me dizendo que eu tenho que ensinar seção. 1466 01:10:08,140 --> 01:10:11,061 Em particular, vamos usar a biblioteca jQuery, 1467 01:10:11,061 --> 01:10:13,060 porque esse era realmente longo e muito chato 1468 01:10:13,060 --> 01:10:16,860 e eu quero ser capaz de simplificá-lo e torná-lo mais curto e mais fácil de escrever. 1469 01:10:16,860 --> 01:10:19,810 >> Então jQuery é uma biblioteca JavaScript. 1470 01:10:19,810 --> 01:10:24,930 Então JavaScript é a programação idioma; jQuery é uma biblioteca. 1471 01:10:24,930 --> 01:10:27,190 E faz um monte de coisas mais fáceis. 1472 01:10:27,190 --> 01:10:33,230 Que torna a mudança e ir em frente um documento HTML muito mais fácil. 1473 01:10:33,230 --> 01:10:35,030 >> Faz eventos de manuseio mais fácil. 1474 01:10:35,030 --> 01:10:37,580 Faz a animação mais fácil e torna mais fácil Ajax. 1475 01:10:37,580 --> 01:10:40,140 Então, vamos saltar para dois essas coisas agora. 1476 01:10:40,140 --> 01:10:40,900 Com licença. 1477 01:10:40,900 --> 01:10:42,620 Antes de fazer, alguns sintaxe básica. 1478 01:10:42,620 --> 01:10:46,870 >> Isto é o que mais chama a a biblioteca jQuery parecer. 1479 01:10:46,870 --> 01:10:50,520 Usamos essa dólar sign-- nenhum sinal de conexão para PHP, 1480 01:10:50,520 --> 01:10:56,030 inconvenient-- apenas o nome de uma selector, ponto, e, em seguida, uma ação. 1481 01:10:56,030 --> 01:10:58,860 Então, vamos ver alguns exemplos concretos de que. 1482 01:10:58,860 --> 01:11:02,980 >> Então isso realmente é o mesmo código a partir do slide evento. 1483 01:11:02,980 --> 01:11:08,740 Então, isso, coisa feia longa torna-se esta coisa muito melhor, menor. 1484 01:11:08,740 --> 01:11:10,370 Então, vamos tentar quebrar isso. 1485 01:11:10,370 --> 01:11:17,090 Este diz, OK, jQuery-- esta dólar sign-- jQuery, encontrar-me da janela. 1486 01:11:17,090 --> 01:11:18,480 Então esse é o selector. 1487 01:11:18,480 --> 01:11:21,800 >> Quando ele carrega, chamar essa função. 1488 01:11:21,800 --> 01:11:23,880 Então, isso é tudo dentro. 1489 01:11:23,880 --> 01:11:24,380 ESTÁ BEM. 1490 01:11:24,380 --> 01:11:25,740 Por enquanto, tudo bem? 1491 01:11:25,740 --> 01:11:26,750 Tudo certo. 1492 01:11:26,750 --> 01:11:32,970 >> Agora, jQuery, encontrar-me o coisa com ID search_button. 1493 01:11:32,970 --> 01:11:36,090 E o que é clicado, chamar essa função. 1494 01:11:36,090 --> 01:11:37,900 E então essa função de exatamente o mesmo. 1495 01:11:37,900 --> 01:11:41,052 Basta fazer um pouco de alerta, você clicou no botão Search. 1496 01:11:41,052 --> 01:11:42,650 >> Por isso é muito bom. 1497 01:11:42,650 --> 01:11:46,260 É realmente condensa e simplifica o nosso código. 1498 01:11:46,260 --> 01:11:49,030 Como eu sabia que é ID search_button 1499 01:11:49,030 --> 01:11:50,960 e não como classe search_button? 1500 01:11:50,960 --> 01:11:52,024 >> AUDIÊNCIA: Hashtag? 1501 01:11:52,024 --> 01:11:52,940 HANNAH BLUMBERG: Yeah. 1502 01:11:52,940 --> 01:11:56,450 Este símbolo de hash, é apenas como CSS. 1503 01:11:56,450 --> 01:12:00,080 Então lembre-se, com CSS, quando queria escolher algo por ID, 1504 01:12:00,080 --> 01:12:01,590 utilizou-se o sinal de libra. 1505 01:12:01,590 --> 01:12:05,400 E quando queríamos para selecionar algo por classe, usamos o ponto. 1506 01:12:05,400 --> 01:12:06,870 Ótimo. 1507 01:12:06,870 --> 01:12:08,230 Faz sentido? 1508 01:12:08,230 --> 01:12:11,500 Então jQuery é suposto apenas tornar nossa vida mais fácil. 1509 01:12:11,500 --> 01:12:12,000 Sim. 1510 01:12:12,000 --> 01:12:15,660 >> AUDIÊNCIA: Então, eu estou um pouco confuso como a forma como a função anônima funciona. 1511 01:12:15,660 --> 01:12:19,027 Você nomear esta anonymouse função, funcionar? 1512 01:12:19,027 --> 01:12:20,594 Como se chama? 1513 01:12:20,594 --> 01:12:21,510 HANNAH BLUMBERG: Claro. 1514 01:12:21,510 --> 01:12:25,812 Então função é apenas uma palavra-chave que diz, eu estou prestes a definir uma função. 1515 01:12:25,812 --> 01:12:26,520 AUDIÊNCIA: Oh, OK. 1516 01:12:26,520 --> 01:12:27,353 HANNAH BLUMBERG: OK? 1517 01:12:27,353 --> 01:12:32,120 E, depois, passá-lo como um argumento a-- vamos dar 1518 01:12:32,120 --> 01:12:37,040 este um-- interior para a função de clique. 1519 01:12:37,040 --> 01:12:39,420 Então, sim, para que função, esta função anônima, 1520 01:12:39,420 --> 01:12:40,910 torna-se um argumento real. 1521 01:12:40,910 --> 01:12:43,632 Então lembre-se de JavaScript, que pode tratar funções como valores. 1522 01:12:43,632 --> 01:12:44,340 AUDIÊNCIA: Oh, OK. 1523 01:12:44,340 --> 01:12:45,256 HANNAH BLUMBERG: Yeah. 1524 01:12:45,256 --> 01:12:46,035 Eu gosto disso "oh". 1525 01:12:46,035 --> 01:12:47,490 Agradável. 1526 01:12:47,490 --> 01:12:49,915 Outras perguntas? 1527 01:12:49,915 --> 01:12:50,505 Tempo? 1528 01:12:50,505 --> 01:12:51,380 MARIA ZLATKOVA: Good. 1529 01:12:51,380 --> 01:12:52,760 Boa. 1530 01:12:52,760 --> 01:12:54,210 >> HANNAH BLUMBERG: Awesome. 1531 01:12:54,210 --> 01:12:55,720 Alguns jQuery útil rápido. 1532 01:12:55,720 --> 01:12:57,559 Eu não estou indo para ir através de todos estes. 1533 01:12:57,559 --> 01:12:59,350 Esses slides será on-line um pouco 1534 01:12:59,350 --> 01:13:02,040 mais tarde, para que possa verificar -lo um pouco mais tarde. 1535 01:13:02,040 --> 01:13:07,120 Mas, basicamente, o general padrão se mantém em que dizemos, 1536 01:13:07,120 --> 01:13:11,510 OK, hey, jQuery, aqui está o meu seletor e, em seguida, aqui está uma ação. 1537 01:13:11,510 --> 01:13:15,940 E você pode fazer coisas como acesso a valor de um formulário, acessar alguns HTML, 1538 01:13:15,940 --> 01:13:19,195 Controlar o que acontece quando o usuário envia um formulário, coisas assim. 1539 01:13:19,195 --> 01:13:20,106 Sim. 1540 01:13:20,106 --> 01:13:22,090 >> AUDIÊNCIA: Então, no exame, nós vamos precisar 1541 01:13:22,090 --> 01:13:25,066 saber um monte de a documentação do jQuery. 1542 01:13:25,066 --> 01:13:31,018 Assim, dado que copiar / colar o jQuery documentação para a nossa folha de fraude, 1543 01:13:31,018 --> 01:13:32,506 onde está a linha traçada? 1544 01:13:32,506 --> 01:13:33,957 Como quantos que precisamos saber? 1545 01:13:33,957 --> 01:13:35,290 HANNAH BLUMBERG: Ótima pergunta. 1546 01:13:35,290 --> 01:13:37,765 A questão é essencialmente dado que você 1547 01:13:37,765 --> 01:13:41,330 Não é possível acessar a documentação do jQuery durante o teste, o quanto você deve 1548 01:13:41,330 --> 01:13:41,830 conhecer? 1549 01:13:41,830 --> 01:13:45,540 Nós não esperamos que você venha acima com alguma função aleatória 1550 01:13:45,540 --> 01:13:47,240 que seria de esperar você no Google. 1551 01:13:47,240 --> 01:13:52,930 >> Coisas que são jogo justo é eu faria dizer apenas uma espécie de a sintaxe geral, 1552 01:13:52,930 --> 01:13:58,310 ser capaz de selecionar pela ID e por class-- assim como CSS. 1553 01:13:58,310 --> 01:14:01,876 E, em seguida, as funções reais themself, vamos provavelmente dizer-lhe. 1554 01:14:01,876 --> 01:14:02,376 Sim. 1555 01:14:02,376 --> 01:14:05,591 >> AUDIÊNCIA: Então, quando você seleciona por classe significaria ponto. 1556 01:14:05,591 --> 01:14:06,840 HANNAH BLUMBERG: Sim, exatamente. 1557 01:14:06,840 --> 01:14:07,340 Boa. 1558 01:14:07,340 --> 01:14:10,461 Quando você seleciona por classe, ele vai a ser ponto em vez do sinal de libra. 1559 01:14:10,461 --> 01:14:10,960 Sim. 1560 01:14:10,960 --> 01:14:12,710 >> AUDIÊNCIA: você atravesse a diferença 1561 01:14:12,710 --> 01:14:14,310 entre a seleção por ID e por classe? 1562 01:14:14,310 --> 01:14:14,560 >> HANNAH BLUMBERG: Claro. 1563 01:14:14,560 --> 01:14:17,510 A diferença entre seleccionar ID e selecionando por classe. 1564 01:14:17,510 --> 01:14:20,685 Assim como disse Maria a pouco mais cedo, há 1565 01:14:20,685 --> 01:14:26,280 só pode haver um elemento HTML com um dado ID, enquanto classe, 1566 01:14:26,280 --> 01:14:29,740 ela nos permite agrupar um monte de diferentes elementos juntos, 1567 01:14:29,740 --> 01:14:34,300 assim que as coisas que estão relacionadas, mas não exatamente o mesmo. 1568 01:14:34,300 --> 01:14:35,685 Isso responde a pergunta? 1569 01:14:35,685 --> 01:14:36,200 Fantástica. 1570 01:14:36,200 --> 01:14:37,194 Sim. 1571 01:14:37,194 --> 01:14:40,680 >> AUDIÊNCIA: E se você tem múltiplos coisas que estão na mesma classe? 1572 01:14:40,680 --> 01:14:42,150 >> HANNAH BLUMBERG: O que acontece se você tiver várias coisas que 1573 01:14:42,150 --> 01:14:43,280 são da mesma classe? 1574 01:14:43,280 --> 01:14:45,829 Assim, por exemplo, se estamos apenas usando puro JavaScript, 1575 01:14:45,829 --> 01:14:48,120 faríamos algo como document.getElementsByClass. 1576 01:14:48,120 --> 01:14:52,280 1577 01:14:52,280 --> 01:14:56,320 E então o que realmente faz é retorna uma matriz de elementos. 1578 01:14:56,320 --> 01:14:59,517 >> E você tem que quer iterar eles ou encontrar um que você quer. 1579 01:14:59,517 --> 01:15:01,350 Não vai dar você um único elemento. 1580 01:15:01,350 --> 01:15:03,450 Vai dar-lhe uma matriz de elementos. 1581 01:15:03,450 --> 01:15:05,280 Ótima pergunta. 1582 01:15:05,280 --> 01:15:07,700 Algo mais? 1583 01:15:07,700 --> 01:15:09,520 Fantástica. 1584 01:15:09,520 --> 01:15:12,860 >> Então eu acho que se você está familiarizado com qualquer jQuery você viu no pset, 1585 01:15:12,860 --> 01:15:15,600 você deve ser bom para ir. 1586 01:15:15,600 --> 01:15:16,325 Questão? 1587 01:15:16,325 --> 01:15:17,610 Ah não. 1588 01:15:17,610 --> 01:15:18,859 Eu realmente tenho que ensinar. 1589 01:15:18,859 --> 01:15:19,358 Relaxe. 1590 01:15:19,358 --> 01:15:20,035 Vai ficar tudo bem. 1591 01:15:20,035 --> 01:15:20,660 Eu vou chegar lá. 1592 01:15:20,660 --> 01:15:24,670 1593 01:15:24,670 --> 01:15:26,870 >> Vamos falar sobre o Ajax. 1594 01:15:26,870 --> 01:15:31,350 Então Ajax vai ser um-- bem, vamos começar com o que ele representa. 1595 01:15:31,350 --> 01:15:32,350 É um acrônimo. 1596 01:15:32,350 --> 01:15:35,855 Ele está para Asynchronous JavaScript e XML. 1597 01:15:35,855 --> 01:15:39,800 E XML é basicamente vai ser [Inaudível] com um tipo de nossos dados. 1598 01:15:39,800 --> 01:15:42,100 Mas nós realmente não tenho usado XML. 1599 01:15:42,100 --> 01:15:43,430 Em vez disso, basta usar JSON. 1600 01:15:43,430 --> 01:15:48,350 >> Então, basicamente, é algumas data-- assíncrono, JavaScript, e os dados, 1601 01:15:48,350 --> 01:15:50,040 Neste caso, JSON. 1602 01:15:50,040 --> 01:15:52,820 E nosso objetivo, como dissemos um pouco mais cedo, 1603 01:15:52,820 --> 01:15:56,880 está a ser capaz de fazer uma pedido, ter que fazer pedido 1604 01:15:56,880 --> 01:16:00,700 sua coisa no fundo, mas continuam 1605 01:16:00,700 --> 01:16:02,550 fazer o que estávamos pretendendo fazer. 1606 01:16:02,550 --> 01:16:06,650 E então, quando essa informação é pronto, então vamos incorporá-lo. 1607 01:16:06,650 --> 01:16:08,470 >> Então, vamos ver o que este realmente parece. 1608 01:16:08,470 --> 01:16:11,210 E isso, você deve ser um pouco familiarizado 1609 01:16:11,210 --> 01:16:13,680 de pset8, o que você acabou de fazer em. 1610 01:16:13,680 --> 01:16:16,200 Então aqui está um jQuery válido função que poderíamos 1611 01:16:16,200 --> 01:16:18,250 quer saber about-- este sinal de dólar. 1612 01:16:18,250 --> 01:16:21,500 Por isso, diz função jQuery, .getJSON. 1613 01:16:21,500 --> 01:16:25,020 >> E o que essa função faz é leva um URL e alguns parameters-- 1614 01:16:25,020 --> 01:16:28,000 então eu acho que no caso de pset8, era como, 1615 01:16:28,000 --> 01:16:33,520 o URL e o foi articles.php parâmetros era go = algum código postal. 1616 01:16:33,520 --> 01:16:41,580 E diz, OK, fazer um pedido à este URL com os parâmetros dados. 1617 01:16:41,580 --> 01:16:43,480 E isso simplesmente acontece. 1618 01:16:43,480 --> 01:16:47,730 >> Quando ele termina, ou é vai concluir com êxito 1619 01:16:47,730 --> 01:16:49,370 ou ele vai falhar. 1620 01:16:49,370 --> 01:16:53,480 Portanto, este é o equivalente de chamada Rob e lhe pedir para fazer alguma coisa. 1621 01:16:53,480 --> 01:17:00,260 E então quando ele chama de volta, ele é tanto vai dizer que eu sou feito ou eu falhei. 1622 01:17:00,260 --> 01:17:04,030 >> Assim, no caso em que você está feito, você diz, OK, eu sou feito. 1623 01:17:04,030 --> 01:17:05,980 E então você chamar essa função. 1624 01:17:05,980 --> 01:17:08,915 Neste caso, ele vai ser um função que leva algumas informações. 1625 01:17:08,915 --> 01:17:12,890 O que nós geralmente se preocupam com o dados, os dados que nós estávamos realmente devolvido 1626 01:17:12,890 --> 01:17:15,900 como um resultado da chamada .getJSON. 1627 01:17:15,900 --> 01:17:17,470 >> E você pode fazer algo com ele. 1628 01:17:17,470 --> 01:17:23,670 Assim, no caso de pset8, eu exibi-lo como uma lista. 1629 01:17:23,670 --> 01:17:29,050 Falha vai ser uma função que é chamado se a solicitação falhar 1630 01:17:29,050 --> 01:17:30,450 por qualquer motivo. 1631 01:17:30,450 --> 01:17:35,104 E no caso de pset8, nós apenas console.log-lo. 1632 01:17:35,104 --> 01:17:36,020 Qualquer dúvida sobre isso? 1633 01:17:36,020 --> 01:17:36,300 Sim. 1634 01:17:36,300 --> 01:17:39,633 >> AUDIÊNCIA: Podemos simplesmente usar a função theta em vez da função, textStatus, jqHXR. 1635 01:17:39,633 --> 01:17:43,464 1636 01:17:43,464 --> 01:17:44,380 HANNAH BLUMBERG: Claro. 1637 01:17:44,380 --> 01:17:46,713 Então, sim, eu acho que no pset, que acabamos de ver dados da função. 1638 01:17:46,713 --> 01:17:48,700 Então é só as-- sim, OK. 1639 01:17:48,700 --> 01:17:50,510 Isso é o que vimos no pset. 1640 01:17:50,510 --> 01:17:51,480 Isso é totalmente bom. 1641 01:17:51,480 --> 01:17:54,210 >> Estes são apenas se você queria para tirar mais informações, 1642 01:17:54,210 --> 01:17:57,190 estas são as coisas que você poderia começar a partir .getJSON. 1643 01:17:57,190 --> 01:17:59,040 Boa pergunta. 1644 01:17:59,040 --> 01:17:59,706 Algo mais? 1645 01:17:59,706 --> 01:18:00,206 Sim. 1646 01:18:00,206 --> 01:18:01,787 >> AUDIÊNCIA: Então .getJSON é Ajax? 1647 01:18:01,787 --> 01:18:02,620 HANNAH BLUMBERG: OK. 1648 01:18:02,620 --> 01:18:05,700 Portanto, este é o tipo de parte complicada. 1649 01:18:05,700 --> 01:18:12,390 É uma função jQuery que permite você fazer chamadas assíncronas. 1650 01:18:12,390 --> 01:18:16,080 E essas chamadas assíncronas, é o que temos vindo a referir como Ajax. 1651 01:18:16,080 --> 01:18:16,850 Sim. 1652 01:18:16,850 --> 01:18:20,185 Isso me levou muito tempo para separar quando eu era estudante. 1653 01:18:20,185 --> 01:18:21,560 AUDIÊNCIA: Você pode dizer isso de novo? 1654 01:18:21,560 --> 01:18:22,476 HANNAH BLUMBERG: Yeah. 1655 01:18:22,476 --> 01:18:23,630 Posso dizer isso de novo? 1656 01:18:23,630 --> 01:18:29,010 Esta função .getJSON, é uma função jQuery. 1657 01:18:29,010 --> 01:18:31,970 E vai fazer uma chamada assíncrona. 1658 01:18:31,970 --> 01:18:35,700 E essas chamadas assíncronas, nós temos sido referindo-se àqueles como Ajax. 1659 01:18:35,700 --> 01:18:39,610 1660 01:18:39,610 --> 01:18:41,872 >> Alguma outra pergunta? 1661 01:18:41,872 --> 01:18:43,330 Nós temos apenas um par de minutos do fim. 1662 01:18:43,330 --> 01:18:45,080 E Maria vai envolver-se com a segurança 1663 01:18:45,080 --> 01:18:47,464 e então nós vamos a ser praticamente feito. 1664 01:18:47,464 --> 01:18:48,630 MARIA ZLATKOVA: Awesome, OK. 1665 01:18:48,630 --> 01:18:54,030 Então, isso é-- basta ter um par de segundos para olhar sobre isso. 1666 01:18:54,030 --> 01:18:56,750 E isso não é algo realmente grande. 1667 01:18:56,750 --> 01:18:59,430 E alguém pode me dizer por quê? 1668 01:18:59,430 --> 01:19:05,650 O que está acontecendo em foo e maio poderia potencialmente resultar em algo ruim, 1669 01:19:05,650 --> 01:19:06,770 e que isso é chamado? 1670 01:19:06,770 --> 01:19:07,270 Sim. 1671 01:19:07,270 --> 01:19:10,391 AUDIÊNCIA: Se o argumento de que é passado é mais de 12 caracteres, 1672 01:19:10,391 --> 01:19:11,454 pode transbordar. 1673 01:19:11,454 --> 01:19:12,370 MARIA ZLATKOVA: Certo. 1674 01:19:12,370 --> 01:19:14,180 Perfeito. 1675 01:19:14,180 --> 01:19:15,384 Como é chamado? 1676 01:19:15,384 --> 01:19:16,300 Você acabou de mencionar isso. 1677 01:19:16,300 --> 01:19:16,840 >> AUDIÊNCIA: Buffer overflow. 1678 01:19:16,840 --> 01:19:18,381 >> MARIA ZLATKOVA: Yup, estouro de buffer. 1679 01:19:18,381 --> 01:19:21,230 Então, isso é algo que nós se referem como buffer overflow. 1680 01:19:21,230 --> 01:19:25,500 E vemos que dentro de foo, nós definimos nosso buffer, c, 1681 01:19:25,500 --> 01:19:27,240 com um tamanho de 12. 1682 01:19:27,240 --> 01:19:32,680 No entanto, no principal, não o fazemos verificar em qualquer maneira em tudo 1683 01:19:32,680 --> 01:19:36,480 se o modo que argv1-- foi o segundo argumento. 1684 01:19:36,480 --> 01:19:39,630 Nós não verificar se o de tamanho que é conveniente. 1685 01:19:39,630 --> 01:19:43,380 >> Então, se nós tivemos uma user especialmente malicioso 1686 01:19:43,380 --> 01:19:47,170 que colocar em algum argumento de que era mais do que 12, e, em seguida, potencialmente 1687 01:19:47,170 --> 01:19:50,850 além dos limites do que argumento, tinha algum código executável 1688 01:19:50,850 --> 01:19:55,570 que ele estava tentando fazer algo ruim com isso; depois disso, o que aconteceria, 1689 01:19:55,570 --> 01:19:59,310 iria substituir o retorno endereço da função foo, 1690 01:19:59,310 --> 01:20:04,370 fazendo com que a função de quando retornando para executar esse código. 1691 01:20:04,370 --> 01:20:07,540 E então as coisas ruins podem acontecer. 1692 01:20:07,540 --> 01:20:09,850 Será que isto faz sentido para todos? 1693 01:20:09,850 --> 01:20:12,424 >> E como podemos proteger contra isso? 1694 01:20:12,424 --> 01:20:13,090 Alguma sugestão? 1695 01:20:13,090 --> 01:20:16,480 1696 01:20:16,480 --> 01:20:21,890 Basicamente, dentro de potencialmente foo, como 1697 01:20:21,890 --> 01:20:28,294 podemos verificar para certificar- que isso não pode acontecer? 1698 01:20:28,294 --> 01:20:33,879 >> AUDIÊNCIA: Se o tamanho 12 é excedido, você iria alocar memória adicional? 1699 01:20:33,879 --> 01:20:37,170 MARIA ZLATKOVA: Sugestão é, alocar memória adicional do tamanho excedido. 1700 01:20:37,170 --> 01:20:39,800 Na verdade, podemos fazer algo um muito mais simples do que bem. 1701 01:20:39,800 --> 01:20:44,870 Podemos apenas obter o comprimento da corda do argumento de que é digitado, 1702 01:20:44,870 --> 01:20:48,590 verifique se que é menos que ou igual a 12-- 1703 01:20:48,590 --> 01:20:50,790 que é o que nós queremos que ele ser, porque nós não queremos 1704 01:20:50,790 --> 01:20:52,373 -lo a exceder os limites da nossa buffer. 1705 01:20:52,373 --> 01:20:55,690 E então, se isso não acontecer, nós pode trabalhar com o argumento. 1706 01:20:55,690 --> 01:21:00,296 E, em seguida, se isso acontecer, nós queremos realmente para amarelo g potencialmente ao usuário. 1707 01:21:00,296 --> 01:21:01,670 Mas isto é como nós faria isso. 1708 01:21:01,670 --> 01:21:02,443 Sim. 1709 01:21:02,443 --> 01:21:04,360 >> AUDIÊNCIA: Poderia você explicar real rápido memcpy? 1710 01:21:04,360 --> 01:21:05,443 MARIA ZLATKOVA: Oh, desculpe. 1711 01:21:05,443 --> 01:21:06,040 Sim. 1712 01:21:06,040 --> 01:21:11,290 Memcpy toma o que quer que é-- muito, OK. 1713 01:21:11,290 --> 01:21:15,850 Memcpy leva tudo o que é no bar, o que quer que é passado 1714 01:21:15,850 --> 01:21:18,050 para foo como o argumento de linha de comando. 1715 01:21:18,050 --> 01:21:19,440 Por isso, vai levar argv1. 1716 01:21:19,440 --> 01:21:21,420 Argv1 é chamado de bar aqui. 1717 01:21:21,420 --> 01:21:24,453 Por isso, vai tomar bar e ele vai copiá-lo em c. 1718 01:21:24,453 --> 01:21:25,402 >> AUDIÊNCIA: OK. 1719 01:21:25,402 --> 01:21:28,360 MARIA ZLATKOVA: E ele vai copy-- o terceiro argumento refere-se apenas 1720 01:21:28,360 --> 01:21:30,601 de quanto ele vai copiar para c. 1721 01:21:30,601 --> 01:21:31,142 AUDIÊNCIA: Ah. 1722 01:21:31,142 --> 01:21:33,030 Então essa é a cópia de tudo isso, então. 1723 01:21:33,030 --> 01:21:34,310 >> MARIA ZLATKOVA: Sim, ele está copiando tudo isso. 1724 01:21:34,310 --> 01:21:34,810 Sim. 1725 01:21:34,810 --> 01:21:38,400 1726 01:21:38,400 --> 01:21:41,910 Em primeiro lugar, certifique-se o bar não é igual a nulo, porque isso é um ponteiro. 1727 01:21:41,910 --> 01:21:44,680 Então nós começamos o comprimento da corda de bar. 1728 01:21:44,680 --> 01:21:47,530 Temos certeza de que é inferior ou igual a 12. 1729 01:21:47,530 --> 01:21:50,070 E então, porque nós temos a certeza, podemos, na verdade, 1730 01:21:50,070 --> 01:21:53,122 memcpy e ter certeza de que está tudo OK. 1731 01:21:53,122 --> 01:21:53,705 Alguma pergunta? 1732 01:21:53,705 --> 01:21:56,280 1733 01:21:56,280 --> 01:21:58,690 Ótimo. 1734 01:21:58,690 --> 01:22:00,400 Eu tenho duas perguntas de verdadeiro ou falso. 1735 01:22:00,400 --> 01:22:05,470 Alguém pode me dizer imediatamente se estas são verdadeiras ou falsas? 1736 01:22:05,470 --> 01:22:07,460 Sim, é falsa. 1737 01:22:07,460 --> 01:22:07,960 Exatamente. 1738 01:22:07,960 --> 01:22:09,330 Ambos são falsas. 1739 01:22:09,330 --> 01:22:12,682 Então, usando uma única senha nunca é realmente uma boa idéia 1740 01:22:12,682 --> 01:22:14,890 porque se alguém sabe sua senha, eles podem simplesmente 1741 01:22:14,890 --> 01:22:16,260 acessar todas as suas outras contas. 1742 01:22:16,260 --> 01:22:19,260 E, em seguida, ícones não fazer nada para garantir a segurança. 1743 01:22:19,260 --> 01:22:24,900 Devemos geralmente procuram HTTPS em vez de HTTP ea URL. 1744 01:22:24,900 --> 01:22:28,560 >> E alguns outros tipos de ataques que já mencionados, 1745 01:22:28,560 --> 01:22:31,390 que David tenha mencionado em palestra, os ataques de injeção SQL. 1746 01:22:31,390 --> 01:22:37,310 Já vimos que, se o don't-- Função de consulta CS50 garante que SQL 1747 01:22:37,310 --> 01:22:39,530 ataques de injeção não pode ocorrer. 1748 01:22:39,530 --> 01:22:42,640 Mas se não estivéssemos usando CS50, Citação, fecha aspas "na consulta," 1749 01:22:42,640 --> 01:22:46,830 nós teríamos que ter certeza de que o entrada do usuário não é realmente alguma SQL 1750 01:22:46,830 --> 01:22:49,670 consulta que fará com que todas nossas mesas para ser descartado 1751 01:22:49,670 --> 01:22:54,070 ou algo de ruim acontecer com nosso banco de dados. 1752 01:22:54,070 --> 01:22:56,790 >> Seqüestro de sessão é outro tipo de ataque 1753 01:22:56,790 --> 01:23:05,940 que acontece quando algum mau pessoa usa a sessão de alguma vítima 1754 01:23:05,940 --> 01:23:08,740 ID para acessar as informações de login. 1755 01:23:08,740 --> 01:23:13,620 Assim, um exemplo muito trivial de que é como se nós temos um computador público, 1756 01:23:13,620 --> 01:23:21,120 em seguida, a má pessoa faz login e, em seguida, eles têm cookies que são salvos. 1757 01:23:21,120 --> 01:23:23,380 E os cookies não mudar para a sessão. 1758 01:23:23,380 --> 01:23:27,620 >> Em seguida, temos a vítima entrar e, em seguida, entrar no site. 1759 01:23:27,620 --> 01:23:30,290 Os cookies não mudar para uma determinada sessão. 1760 01:23:30,290 --> 01:23:33,060 E, em seguida, a vítima acessa o o site e, em seguida, sai. 1761 01:23:33,060 --> 01:23:36,190 E, em seguida, a pessoa que vai para trás em seguida, pode ainda utilizar a sua ID da sessão 1762 01:23:36,190 --> 01:23:37,430 para acessar suas informações. 1763 01:23:37,430 --> 01:23:40,050 Então esse é um exemplo de como isso poderia acontecer. 1764 01:23:40,050 --> 01:23:45,570 >> E então eu não me preocuparia muito sobre o código específico ou nada 1765 01:23:45,570 --> 01:23:49,270 como aquele que poderia causar isso, mas ter algum tipo de idéia do que 1766 01:23:49,270 --> 01:23:51,400 as variáveis ​​envolvidas neste são. 1767 01:23:51,400 --> 01:23:53,897 E, em seguida, manipular cabeçalho é um outro tipo de dados de ataque 1768 01:23:53,897 --> 01:23:55,230 que tem David falou sobre. 1769 01:23:55,230 --> 01:23:59,730 E isso só se refere a o que pode acontecer quando 1770 01:23:59,730 --> 01:24:04,300 a resposta, o HTTP resposta dentro de nosso cabeçalho 1771 01:24:04,300 --> 01:24:05,720 não é higienizado adequadamente. 1772 01:24:05,720 --> 01:24:14,340 >> E qualquer um dos fields-- por exemplo, Se alguém substitui um dos cabeçalho 1773 01:24:14,340 --> 01:24:18,860 valores para conter algo mais do que o que devem contain-- e, na verdade, 1774 01:24:18,860 --> 01:24:22,720 conter, por exemplo, um 200 Código de status OK, então eles 1775 01:24:22,720 --> 01:24:26,890 poderia fazer mal intencionado coisas quando não é suposto. 1776 01:24:26,890 --> 01:24:30,815 Mas eu não me preocuparia muito muito sobre o código específico 1777 01:24:30,815 --> 01:24:34,110 que poderia causar este, apenas uma espécie de entendimento 1778 01:24:34,110 --> 01:24:37,290 de alto nível coisas assim. 1779 01:24:37,290 --> 01:24:39,570 >> Eu acho que isso é tudo que temos de cobrir. 1780 01:24:39,570 --> 01:24:40,090 Incrível. 1781 01:24:40,090 --> 01:24:43,310 Alguém tem alguma dúvida sobre qualquer das coisas que nós abrangidos? 1782 01:24:43,310 --> 01:24:44,213 Sim. 1783 01:24:44,213 --> 01:24:48,077 >> AUDIÊNCIA: Então uma espécie de pergunta mais logístico. 1784 01:24:48,077 --> 01:24:53,400 O conteúdo é focado principalmente para as coisas segundo questionário 1? 1785 01:24:53,400 --> 01:24:55,730 >> MARIA ZLATKOVA: Então, pergunta é, é o conteúdo 1786 01:24:55,730 --> 01:24:59,720 voltada principalmente para as coisas segundo questionário 1? 1787 01:24:59,720 --> 01:25:06,070 Assim, o foco é sobre depois questionário 1, com excepção 1788 01:25:06,070 --> 01:25:10,914 que temos de nos concentrar em coisas em pset5 e um monte de as estruturas de dados 1789 01:25:10,914 --> 01:25:11,580 que nós cobrimos. 1790 01:25:11,580 --> 01:25:14,300 E nós não podemos dizer que nós pode ignorar qualquer coisa antes 1791 01:25:14,300 --> 01:25:17,120 que porque constrói em cima dele também. 1792 01:25:17,120 --> 01:25:21,845 >> Assim, o foco em que, além de material de pset5 como incluindo ligações listas, pilhas, 1793 01:25:21,845 --> 01:25:23,720 filas, e tudo que Hannah passou. 1794 01:25:23,720 --> 01:25:24,050 >> HANNAH BLUMBERG: Certo. 1795 01:25:24,050 --> 01:25:27,450 Sim, nós fomos sobre todo o material C no início, muito rapidamente. 1796 01:25:27,450 --> 01:25:29,090 Mas certifique-se de rever isso. 1797 01:25:29,090 --> 01:25:32,700 Vá para trás e ver o quiz 0 avaliação. 1798 01:25:32,700 --> 01:25:36,110 >> Um par notas mais logísticos, apenas enquanto nós temos a sua atenção. 1799 01:25:36,110 --> 01:25:39,100 Nós vamos ter o horário de expediente ambos na segunda-feira e terça-feira noite. 1800 01:25:39,100 --> 01:25:41,540 Eles vão estar em MD 119. 1801 01:25:41,540 --> 01:25:44,220 Isso é tudo no site, de modo se você não ouvi-lo, não se preocupe. 1802 01:25:44,220 --> 01:25:45,266 >> MARIA ZLATKOVA: 8:30-11:00. 1803 01:25:45,266 --> 01:25:46,260 >> HANNAH BLUMBERG: Sim, 8:30-11:00. 1804 01:25:46,260 --> 01:25:46,910 Estaremos lá. 1805 01:25:46,910 --> 01:25:48,368 Estaremos lá para responder perguntas. 1806 01:25:48,368 --> 01:25:49,480 É muito frio e divertido. 1807 01:25:49,480 --> 01:25:53,240 Vocês podem perguntar qualquer dúvida que você tem no questionário 1. 1808 01:25:53,240 --> 01:25:55,740 E questionário 1 é no Quarta-feira, então boa sorte. 1809 01:25:55,740 --> 01:25:59,770 Se você tiver alguma dúvida, talvez vir falar-nos até aqui one-on-one. 1810 01:25:59,770 --> 01:26:00,880 Frio. 1811 01:26:00,880 --> 01:26:01,630 Muito obrigado. 1812 01:26:01,630 --> 01:26:02,880 >> MARIA ZLATKOVA: Muito obrigado, rapazes. 1813 01:26:02,880 --> 01:26:03,480 >> AUDIÊNCIA: Yay. 1814 01:26:03,480 --> 01:26:05,930 >> [Aplausos] 1815 01:26:05,930 --> 01:26:07,530