1 00:00:00,000 --> 00:00:08,070 2 00:00:08,070 --> 00:00:10,430 >> RJ AQUINO: Vamos apenas começar. 3 00:00:10,430 --> 00:00:12,310 Portanto, este é um quiz. 4 00:00:12,310 --> 00:00:14,890 Aqui estão algumas informações de alto nível. 5 00:00:14,890 --> 00:00:19,915 A página Sobre para o teste é neste URL, já não CS50.net, embora isso 6 00:00:19,915 --> 00:00:21,080 continuará a funcionar. 7 00:00:21,080 --> 00:00:26,920 É CS50.harvard.edu/quizzes/2013/1. 8 00:00:26,920 --> 00:00:31,070 É a grande página Sobre, dizendo-lhe onde e quando, ou seja, próxima quarta-feira 9 00:00:31,070 --> 00:00:32,100 em um monte de quartos. 10 00:00:32,100 --> 00:00:36,120 E até a próxima quarta-feira, eu significa daqui a dois dias. 11 00:00:36,120 --> 00:00:37,890 Toda esta informação está lá. 12 00:00:37,890 --> 00:00:39,110 Mas é cumulativo. 13 00:00:39,110 --> 00:00:43,790 >> Então, tudo a partir da primeira metade do ano é potencialmente no questionário, 14 00:00:43,790 --> 00:00:50,780 porque você não pode realmente fazer avançada coisas em C sem se as condições e 15 00:00:50,780 --> 00:00:51,920 loops e semelhantes. 16 00:00:51,920 --> 00:00:55,580 Mas haverá uma ênfase no material coberto desde quiz 0, 17 00:00:55,580 --> 00:00:59,570 começando com estruturas e Arquivo I / O. É tipicamente mais 18 00:00:59,570 --> 00:01:01,620 desafiador do que quiz 0. 19 00:01:01,620 --> 00:01:03,870 A pontuação média é tipicamente menor. 20 00:01:03,870 --> 00:01:05,980 Estude bastante. 21 00:01:05,980 --> 00:01:09,340 >> Enquanto você está estudando, não se esqueça de usar CS50/discuss para postar suas perguntas 22 00:01:09,340 --> 00:01:10,830 e ler perguntas de outras pessoas. 23 00:01:10,830 --> 00:01:13,550 Então, se você não tiver alguma dúvida, faça o login e leia 24 00:01:13,550 --> 00:01:14,580 perguntas dos seus amigos. 25 00:01:14,580 --> 00:01:16,560 Eles provavelmente estão boas perguntas. 26 00:01:16,560 --> 00:01:17,730 E responder aos questionários de prática. 27 00:01:17,730 --> 00:01:20,750 Fomos dando quizzes para sete ou oito anos. 28 00:01:20,750 --> 00:01:22,180 Eles estão todos online. 29 00:01:22,180 --> 00:01:25,540 Questões futuras são semelhantes para velhas questões. 30 00:01:25,540 --> 00:01:26,550 É assim que fazê-los. 31 00:01:26,550 --> 00:01:27,740 >> O teste ainda não existe. 32 00:01:27,740 --> 00:01:28,670 Nenhum de nós tê-lo visto. 33 00:01:28,670 --> 00:01:32,496 Mas ele vai olhar como quizzes anteriores. 34 00:01:32,496 --> 00:01:36,500 Para esta sessão de avaliação, esta não é uma lista exaustiva de tópicos. 35 00:01:36,500 --> 00:01:40,740 Você não pode apenas assistir a este e, em seguida, ser perfeitamente pronto para o quiz. 36 00:01:40,740 --> 00:01:43,330 De outro modo, não seria que muito de um quiz. 37 00:01:43,330 --> 00:01:46,270 E isso também não é necessariamente tudo o que você precisa saber sobre qualquer 38 00:01:46,270 --> 00:01:46,970 determinado tópico. 39 00:01:46,970 --> 00:01:50,520 Era para expô-lo às coisas cobrimos, lembrá-lo que nós 40 00:01:50,520 --> 00:01:53,070 coberto, e a maneira pela que cobria. 41 00:01:53,070 --> 00:01:57,030 Mas você vai ter que ir mais longe e mais profunda quando você estuda a dupla verificação 42 00:01:57,030 --> 00:02:00,230 que você sabe tudo sobre um determinado tema e que você tenha preenchido 43 00:02:00,230 --> 00:02:03,320 todos os cantos que estavam coberto de aula. 44 00:02:03,320 --> 00:02:07,980 >> As notas do quiz dizer-lhe para ir para o notas escriba, assistir vídeos de aula. 45 00:02:07,980 --> 00:02:10,155 Essa é uma boa maneira de ter certeza que você tem cobriu todas as suas bases. 46 00:02:10,155 --> 00:02:12,670 47 00:02:12,670 --> 00:02:17,340 Então, para começar, quando eu fiz isso slides, eu tentei colocar onde eu encontrei 48 00:02:17,340 --> 00:02:18,350 informações. 49 00:02:18,350 --> 00:02:22,890 Assim, para arquivo I / O, por exemplo, Semana 7, Segunda-feira da palestra, eo postou 50 00:02:22,890 --> 00:02:27,960 Seção 6 e Conjunto de Problemas todos têm informações sobre File I / O. Eu fiz 51 00:02:27,960 --> 00:02:28,840 isso para cada tópico. 52 00:02:28,840 --> 00:02:33,010 Portanto, aqueles slides de título pode ser útil para você. 53 00:02:33,010 --> 00:02:38,950 >> Portanto, temos aqui File I / O. Lembre-se, em Conjunto de Problemas 5, usamos fopen, fclose, 54 00:02:38,950 --> 00:02:41,210 fwrite, fread e fseek. 55 00:02:41,210 --> 00:02:48,090 Tendo recuperado 30ish JPEGs e ter redimensionado e mexeu com 56 00:02:48,090 --> 00:02:50,320 bitmaps, você deve estar bastante familiarizados com estas funções 57 00:02:50,320 --> 00:02:51,830 e como eles funcionam. 58 00:02:51,830 --> 00:02:54,420 Se você não está familiarizado, definitivamente revê-los. 59 00:02:54,420 --> 00:02:56,860 E certifique-se de compreender o que os diferentes argumentos são, 60 00:02:56,860 --> 00:02:58,260 quando eles são usados. 61 00:02:58,260 --> 00:03:03,620 >> Mas os erros relacionadas a arquivos comuns você pode ser perguntado sobre - 62 00:03:03,620 --> 00:03:07,270 bem, se você esqueceu de verificar se fopen realmente trabalhou antes de ir para 63 00:03:07,270 --> 00:03:08,350 modificar um arquivo. 64 00:03:08,350 --> 00:03:09,760 Isso poderia ser ruim. 65 00:03:09,760 --> 00:03:13,560 Se você esqueceu de um arquivo fclose que você fopened, que é semelhante ao 66 00:03:13,560 --> 00:03:14,400 um vazamento de memória. 67 00:03:14,400 --> 00:03:15,980 Isso é muito ruim. 68 00:03:15,980 --> 00:03:18,670 E esquecendo-se de verificar se você tem chegou ao final do arquivo antes de você 69 00:03:18,670 --> 00:03:19,790 começar a escrever para ele. 70 00:03:19,790 --> 00:03:22,320 >> Então, se você diz, hey, eu estou em o fim do ficheiro. 71 00:03:22,320 --> 00:03:23,750 Dá-me mais 5 bytes. 72 00:03:23,750 --> 00:03:27,370 Bem, isso provavelmente não vai funciona do jeito que você espera. 73 00:03:27,370 --> 00:03:30,930 Isso é realmente dele para File I / O, porque fizemos tanto dele 74 00:03:30,930 --> 00:03:32,300 com o conjunto de problemas. 75 00:03:32,300 --> 00:03:36,000 Então, se você entendeu o que estava acontecendo Problema em Set 5, lembre-se das bitmats 76 00:03:36,000 --> 00:03:40,090 e os JPEGs, então você está provavelmente todos definido para File I / O. Se isso é um pouco 77 00:03:40,090 --> 00:03:44,770 difusa, definitivamente rever esse problema definir e material associado. 78 00:03:44,770 --> 00:03:51,110 >> As estruturas foram o tema que estavam no linha entre 0 e quiz quiz 1. 79 00:03:51,110 --> 00:03:53,090 Não muito fazer o corte para Quiz 0. 80 00:03:53,090 --> 00:03:57,040 Então, eles vão ser definitivamente na Teste 1, Semana 7, segunda-feira. 81 00:03:57,040 --> 00:03:58,150 O que é um struct? 82 00:03:58,150 --> 00:04:00,250 Aqui nós mostramos uma estrutura. 83 00:04:00,250 --> 00:04:03,140 É como um novo tipo. 84 00:04:03,140 --> 00:04:07,940 É como um recipiente para vários campos. 85 00:04:07,940 --> 00:04:12,970 >> Neste caso, temos declarado um struct aluno que tem dois campos - 86 00:04:12,970 --> 00:04:17,750 uma seqüência que estamos chamando o nome e um int que estamos chamando idade. 87 00:04:17,750 --> 00:04:21,450 Então, quando eu passar em torno de estudantes ou eu modificar os estudantes, eu vou ser capaz de 88 00:04:21,450 --> 00:04:24,430 acessar seu nome e sua idade. 89 00:04:24,430 --> 00:04:26,670 Vamos dar uma olhada em algum código para isso. 90 00:04:26,670 --> 00:04:29,090 Aqui vemos que eu tenho declarado um estudante s, assim como 91 00:04:29,090 --> 00:04:30,300 Declaro qualquer variável - 92 00:04:30,300 --> 00:04:32,430 int x, int y, et cetera. 93 00:04:32,430 --> 00:04:34,180 >> Aqui está o aluno s. 94 00:04:34,180 --> 00:04:37,370 Ele começa com nada em seus campos. 95 00:04:37,370 --> 00:04:38,240 Então, vamos defini-las. 96 00:04:38,240 --> 00:04:40,681 Você define campos de uma estrutura com ponto. 97 00:04:40,681 --> 00:04:43,780 Então, eu disse aqui que s.name = RJ. 98 00:04:43,780 --> 00:04:46,470 E S.age = 21. 99 00:04:46,470 --> 00:04:48,500 Você também pode atualizar campos da mesma maneira que você atualize 100 00:04:48,500 --> 00:04:49,550 o valor de uma variável. 101 00:04:49,550 --> 00:04:53,270 Então, eu quero mudar meu nome de RJ com sem períodos para RJ escrito o 102 00:04:53,270 --> 00:04:54,540 maneira correta. 103 00:04:54,540 --> 00:04:58,890 Seria s.name = RJ, a mesma como dissemos originalmente. 104 00:04:58,890 --> 00:05:00,030 E então você pode acessá-los. 105 00:05:00,030 --> 00:05:00,930 >> Então, nós defini-las. 106 00:05:00,930 --> 00:05:01,840 Nós atualizamos eles. 107 00:05:01,840 --> 00:05:03,890 Você também pode acessá-los no mesmo caminho. 108 00:05:03,890 --> 00:05:09,330 Então, aqui, eu estou imprimindo RJ É de 21 anos de idade. 109 00:05:09,330 --> 00:05:14,700 E eu estou acessando esses valores com s.name e S.age. 110 00:05:14,700 --> 00:05:17,040 De modo que está acessando estruturas com a notação de ponto. 111 00:05:17,040 --> 00:05:17,850 Yep, questionar? 112 00:05:17,850 --> 00:05:21,176 >> AUDIÊNCIA: Existe uma razão para o slide anterior que você não colocou 113 00:05:21,176 --> 00:05:24,848 aluno na linha superior, como typedef aluno struct e depois 114 00:05:24,848 --> 00:05:25,840 aluno no final? 115 00:05:25,840 --> 00:05:29,040 >> RJ AQUINO: Então, a pergunta era, em esse slide, nós tipicamente vistos 116 00:05:29,040 --> 00:05:32,400 typedef struct nó e, em seguida, o campos da struct e 117 00:05:32,400 --> 00:05:34,250 em seguida, o nó de palavra. 118 00:05:34,250 --> 00:05:37,790 E como é que aqui eu não disse, typedef estudante estrutura e, em seguida, o 119 00:05:37,790 --> 00:05:39,820 campos da struct e estudante? 120 00:05:39,820 --> 00:05:44,310 A razão é que eu não preciso acessá-lo dentro da estrutura. 121 00:05:44,310 --> 00:05:46,270 Então, não há problema em deixá-lo sem um nome. 122 00:05:46,270 --> 00:05:49,210 Posso deixá-lo como um struct anônimo. 123 00:05:49,210 --> 00:05:53,130 >> A razão por que fazê-lo por listas ligadas e coisas é porque dentro de você precisar 124 00:05:53,130 --> 00:05:55,360 fazer referência a uma estrela nós struct. 125 00:05:55,360 --> 00:05:58,220 Assim, a estrutura tem que ter um nome, para que você possa acessá-lo mais tarde. 126 00:05:58,220 --> 00:05:59,540 É um detalhe menor. 127 00:05:59,540 --> 00:06:04,750 Mas você costuma ver typedef struct chaves, se você não precisa 128 00:06:04,750 --> 00:06:08,720 o nome e typedef struct algum nome seguido por chaves se quiser 129 00:06:08,720 --> 00:06:09,520 Preciso do nome. 130 00:06:09,520 --> 00:06:12,070 Então essa é uma boa pergunta. 131 00:06:12,070 --> 00:06:17,000 >> E nesse ponto, que tendem a modificar estruturas e passar em torno de estruturas de 132 00:06:17,000 --> 00:06:18,680 referência, não por valor. 133 00:06:18,680 --> 00:06:21,940 Então vamos passar em torno de ponteiros para estruturas em vez de passar ao redor do 134 00:06:21,940 --> 00:06:23,150 instrui si. 135 00:06:23,150 --> 00:06:28,050 Então você está com muita freqüência vai ser utilizando, neste caso, o estudante ou * 136 00:06:28,050 --> 00:06:34,150 struct node * ou nó * vez a estudantes ou nós. 137 00:06:34,150 --> 00:06:39,350 Então, aqui, eu disse, OK, a variável ptr vai ser o endereço de s. 138 00:06:39,350 --> 00:06:45,570 Vai ser o ponteiro para o aluno RJ 139 00:06:45,570 --> 00:06:48,965 >> Assim, podemos chegar a esses campos o mesmo que nós temos qualquer coisa. 140 00:06:48,965 --> 00:06:51,460 Primeiro, ID referenciar o ponteiro para obter a estrutura. 141 00:06:51,460 --> 00:06:55,530 Isso é * ptr e depois um ponto e, em seguida, a idade. 142 00:06:55,530 --> 00:06:58,790 Assim, para acessar o campo, e eu tenho atualizado que agora a 22, porque, vamos 143 00:06:58,790 --> 00:07:00,860 por exemplo, que era meu aniversário. 144 00:07:00,860 --> 00:07:03,990 Há uma sintaxe de atalho utilizando a seta aqui. 145 00:07:03,990 --> 00:07:07,060 Idade seta Então ptr é apenas o mesmo que * ptr.age. 146 00:07:07,060 --> 00:07:10,150 147 00:07:10,150 --> 00:07:11,550 Agora, isso é algo que você vai ter para memorizar e lembrar. 148 00:07:11,550 --> 00:07:15,010 >> Você usou muito em pset6, o pset ortográfico. 149 00:07:15,010 --> 00:07:18,350 Mas isso é realmente o que está acontecendo por baixo do capô. 150 00:07:18,350 --> 00:07:20,500 É dereferencing o ponteiro e depois acessá-lo. 151 00:07:20,500 --> 00:07:21,432 Pergunta? 152 00:07:21,432 --> 00:07:22,682 >> AUDIÊNCIA: [inaudível]. 153 00:07:22,682 --> 00:07:25,860 154 00:07:25,860 --> 00:07:28,060 >> RJ AQUINO: Então por que estamos usando ponteiros como estruturas em vez de o 155 00:07:28,060 --> 00:07:29,500 instrui a si mesmos? 156 00:07:29,500 --> 00:07:33,740 A razão seria se você está passando uma estrutura para uma função, você provavelmente 157 00:07:33,740 --> 00:07:36,900 quer passar em torno de apenas 4 ou menos bytes que representam o cursor, como o 158 00:07:36,900 --> 00:07:40,375 oposição à 30 ou potencialmente 40 bytes, que são a estrutura. 159 00:07:40,375 --> 00:07:44,410 Então passando algo a uma função é mais fácil quando a coisa 160 00:07:44,410 --> 00:07:48,230 é menor em curto. 161 00:07:48,230 --> 00:07:49,074 Pergunta? 162 00:07:49,074 --> 00:07:53,026 >> AUDIÊNCIA: Você pode ter mencionado isso no início, mas existem 163 00:07:53,026 --> 00:07:56,000 outros slides para cima no [inaudível]? 164 00:07:56,000 --> 00:07:58,960 >> RJ AQUINO: Esses slides será depois da sessão de revisão. 165 00:07:58,960 --> 00:08:00,210 Nós vamos publicá-las no site. 166 00:08:00,210 --> 00:08:02,450 167 00:08:02,450 --> 00:08:06,870 Movendo assim por diante e se movendo ligeiramente mais rápido, vamos falar sobre os dados 168 00:08:06,870 --> 00:08:07,350 estruturas. 169 00:08:07,350 --> 00:08:08,040 Há um monte. 170 00:08:08,040 --> 00:08:10,080 Cobrimos um monte deles. 171 00:08:10,080 --> 00:08:12,500 Veja o que você deve entender sobre a estrutura de dados. 172 00:08:12,500 --> 00:08:15,590 >> Você realmente deve entender em um alto nível que cada estrutura é. 173 00:08:15,590 --> 00:08:21,190 Você pode explicar em Inglês para o seu amigo que não tomou como CS50 174 00:08:21,190 --> 00:08:25,580 estamos organizando os nossos dados e por que tinha estar usando algo assim? 175 00:08:25,580 --> 00:08:26,990 Isso é coisa de uma. 176 00:08:26,990 --> 00:08:29,650 Coisa dois, entender a implementação. 177 00:08:29,650 --> 00:08:34,270 Assim, entender como usar essas coisas em C. E nós vamos estar passando por isso. 178 00:08:34,270 --> 00:08:39,030 >> E, em seguida, coisa de três seria conhecer a tempos de execução e as limitações do 179 00:08:39,030 --> 00:08:40,470 várias estruturas que você está usando. 180 00:08:40,470 --> 00:08:44,059 Assim, entendo por que você usaria um de hash de tabela em vez de uma matriz. 181 00:08:44,059 --> 00:08:49,570 Entenda como rápido, em média, acessando uma tabela hash é. 182 00:08:49,570 --> 00:08:54,010 Entenda o que as operações são rápidas em lista ligada, mas lento em matrizes e 183 00:08:54,010 --> 00:08:56,080 vice-versa. 184 00:08:56,080 --> 00:08:59,780 Então, para entender isso, você vai ter que entender Big-O notação apenas para saber 185 00:08:59,780 --> 00:09:01,310 como falar sobre estes os tipos de coisas. 186 00:09:01,310 --> 00:09:02,700 E vamos falar sobre isso. 187 00:09:02,700 --> 00:09:06,040 >> Então a primeira coisa, listas ligadas. 188 00:09:06,040 --> 00:09:07,770 Aqui está uma foto de alto nível de uma lista ligada. 189 00:09:07,770 --> 00:09:08,830 Mostramos isso na sala de aula. 190 00:09:08,830 --> 00:09:11,670 Nós normalmente temos 10 pessoas de pé no palco. 191 00:09:11,670 --> 00:09:16,790 Mas nós temos uma série de nós, onde cada nó tem algum valor e um ponteiro 192 00:09:16,790 --> 00:09:18,610 para seu próximo valor. 193 00:09:18,610 --> 00:09:21,730 Então, para começar a partir de um nó para o outro, você basta dizer, me dê o próximo nó. 194 00:09:21,730 --> 00:09:22,530 Você tem esse nó. 195 00:09:22,530 --> 00:09:23,770 Dê-me o próximo nó. 196 00:09:23,770 --> 00:09:24,400 Você tem esse nó. 197 00:09:24,400 --> 00:09:28,790 Dê-me o nó seguinte e assim por diante até que não haja nenhum nó esquerdo. 198 00:09:28,790 --> 00:09:31,850 >> Assim, continuam a falar sobre -lo em um nível elevado. 199 00:09:31,850 --> 00:09:34,100 É muito fácil de inserir coisas em uma lista encadeada. 200 00:09:34,100 --> 00:09:36,010 Se você não se importa com a ordem, você pode apenas deixá-lo cair 201 00:09:36,010 --> 00:09:36,840 logo no início. 202 00:09:36,840 --> 00:09:38,520 É tempo constante. 203 00:09:38,520 --> 00:09:39,900 Mas é difícil encontrar um valor. 204 00:09:39,900 --> 00:09:43,060 Se você está tentando fazer, é sete na minha lista? 205 00:09:43,060 --> 00:09:44,740 Você tem que passar por cada valor único. 206 00:09:44,740 --> 00:09:45,680 É este o sete? 207 00:09:45,680 --> 00:09:46,610 É este o sete? 208 00:09:46,610 --> 00:09:47,770 É este o sete? 209 00:09:47,770 --> 00:09:48,690 É este o sete? 210 00:09:48,690 --> 00:09:49,830 Uma e outra vez. 211 00:09:49,830 --> 00:09:51,520 E isso é O (n). 212 00:09:51,520 --> 00:09:53,800 Assim, ao estudar para o quiz, compare isso com matrizes. 213 00:09:53,800 --> 00:09:57,010 214 00:09:57,010 --> 00:09:58,220 >> Tudo bem? 215 00:09:58,220 --> 00:09:59,220 As luzes se fraca. 216 00:09:59,220 --> 00:10:01,110 OK. 217 00:10:01,110 --> 00:10:02,400 Quando é que uma lista ligada melhor? 218 00:10:02,400 --> 00:10:04,640 Quando é uma matriz melhor? 219 00:10:04,640 --> 00:10:06,670 Então, vamos olhar para alguns códigos. 220 00:10:06,670 --> 00:10:08,960 Aqui é um nó potencial. 221 00:10:08,960 --> 00:10:09,770 É um struct. 222 00:10:09,770 --> 00:10:12,220 Tem um int n, que será o nosso valor. 223 00:10:12,220 --> 00:10:17,780 E tem um nó struct * seguinte, que é nossa ponteiro para o próximo nó. 224 00:10:17,780 --> 00:10:23,040 Então, aqui, podemos ver que aconteceu ter colocado um int em nosso nó. 225 00:10:23,040 --> 00:10:27,850 Mas se esta fosse uma lista ligada de carvão estrelas ou uma lista encadeada de carros alegóricos, que 226 00:10:27,850 --> 00:10:28,820 totalmente poderia fazer isso também. 227 00:10:28,820 --> 00:10:33,110 >> Lembre-se na pset6, você provavelmente teve um lista ligada de estrelas de char ou apenas 228 00:10:33,110 --> 00:10:34,360 matrizes de caracteres estáticos. 229 00:10:34,360 --> 00:10:37,370 230 00:10:37,370 --> 00:10:39,040 Vamos dar uma olhada aqui em uma operação. 231 00:10:39,040 --> 00:10:43,570 Por isso, queremos inserir uma nova n em nossa lista encadeada. 232 00:10:43,570 --> 00:10:48,940 Começamos com um ponteiro cabeça que é um ponteiro para esse nó que tem o 233 00:10:48,940 --> 00:10:53,460 valor de n e um lado de um ponteiro que aponta para esse nó é um valor de 234 00:10:53,460 --> 00:10:57,760 n e um ao lado do nulo, porque é o último nó. 235 00:10:57,760 --> 00:11:00,440 Assim, no interesse de tempo, eu vou colocar todo o código na tela. 236 00:11:00,440 --> 00:11:03,130 E nós vamos atravessá-la algumas linhas de cada vez. 237 00:11:03,130 --> 00:11:05,790 >> Então, aqui está o código. 238 00:11:05,790 --> 00:11:07,560 Espero que seja legível. 239 00:11:07,560 --> 00:11:11,275 A primeira coisa que fazemos é nós malloc um novo nó. 240 00:11:11,275 --> 00:11:15,105 Por isso, faz um apontador para um novo nó não tem nada muito definido 241 00:11:15,105 --> 00:11:16,450 em cima dele ainda. 242 00:11:16,450 --> 00:11:19,580 Nós certifique-se de que o novo nó não é nulo. 243 00:11:19,580 --> 00:11:22,220 Caso contrário, temos que desistir. 244 00:11:22,220 --> 00:11:27,680 Assim, tendo verificado que, agora definir os valores no nó. 245 00:11:27,680 --> 00:11:31,520 Então nós colocamos o novo n em nosso campo n. 246 00:11:31,520 --> 00:11:36,050 E nós definir o próximo ponteiro para apontar para a cabeça original, de modo que podemos 247 00:11:36,050 --> 00:11:38,900 agora ter inserido este nó em nossa lista. 248 00:11:38,900 --> 00:11:44,600 >> Finalmente, temos o ponto diretor global ao nosso novo nó, de modo que, se fôssemos 249 00:11:44,600 --> 00:11:50,300 começar a cabeça, nós estaríamos neste novo primeiro nó em vez de 250 00:11:50,300 --> 00:11:51,560 o antigo primeiro nó. 251 00:11:51,560 --> 00:11:55,320 E quando sai esta função, o novo nó variável não existir mais, 252 00:11:55,320 --> 00:11:57,130 pois foi local para a função. 253 00:11:57,130 --> 00:11:59,770 Então este é o estado do mundo. 254 00:11:59,770 --> 00:12:03,570 Nosso diretor global aponta para o nosso novo primeiro nó, o que aponta para o nosso 255 00:12:03,570 --> 00:12:06,346 primeiro nó original, que pontos para o nó depois disso. 256 00:12:06,346 --> 00:12:09,790 >> Essa foi a inserção. 257 00:12:09,790 --> 00:12:12,150 Espero que tenha sido relativamente simples de seguir. 258 00:12:12,150 --> 00:12:14,300 Em caso de dúvida, tirar uma foto. 259 00:12:14,300 --> 00:12:17,820 Então, eu acho que falar sobre listas ligadas e olhando 260 00:12:17,820 --> 00:12:19,870 código é muito não é útil. 261 00:12:19,870 --> 00:12:23,790 Considerando a olhar para uma imagem de um ligado lista permite-me a pensar, oh, tão 262 00:12:23,790 --> 00:12:24,970 Eu tenho esse nó aqui. 263 00:12:24,970 --> 00:12:28,980 Mas se eu atualizar esse ponteiro, ele acaba desconectado. 264 00:12:28,980 --> 00:12:34,340 E eu esqueci onde o nó passa. 265 00:12:34,340 --> 00:12:35,390 E o código sai. 266 00:12:35,390 --> 00:12:37,830 E você tem vários nós que estão desconectados. 267 00:12:37,830 --> 00:12:39,970 E você não acabar com a lista que você deseja. 268 00:12:39,970 --> 00:12:43,320 >> Então, se você desenhar a imagem e fazê-lo passo a passo, com sorte, você vai ver 269 00:12:43,320 --> 00:12:46,840 a ordem correta das coisas em termos de atualizar os ponteiros para certificar-se de 270 00:12:46,840 --> 00:12:48,830 que a lista vem junto. 271 00:12:48,830 --> 00:12:51,240 Insert é relativamente simples. 272 00:12:51,240 --> 00:12:55,210 A uma mais complicada seria inserção em uma lista ordenada. 273 00:12:55,210 --> 00:12:59,980 A função mais complicado é apagar e encontrar, assim que olhar através de uma lista de 274 00:12:59,980 --> 00:13:03,030 ver se algo está lá. 275 00:13:03,030 --> 00:13:07,220 Talvez você fez isso em pset6 quando você tem em sua tabela hash e você disse, 276 00:13:07,220 --> 00:13:10,460 bem, é a palavra maçã na minha lista ligada? 277 00:13:10,460 --> 00:13:11,440 >> Então, você já pode ter feito isso. 278 00:13:11,440 --> 00:13:15,530 Mas, definitivamente, refrescar sua memória e tentar localizar e reimplementar 279 00:13:15,530 --> 00:13:19,150 reimplementar apagar para uma lista ligada. 280 00:13:19,150 --> 00:13:22,850 Nota lateral Fun, também duplamente vinculada listas, onde você tem 281 00:13:22,850 --> 00:13:27,490 ponteiros que apontam para a frente e para trás, de modo que você poderia ir para o 282 00:13:27,490 --> 00:13:29,270 próximo nó e o nó anterior. 283 00:13:29,270 --> 00:13:33,860 E havia uma pergunta sobre o do ano passado teste desse tipo, falando 284 00:13:33,860 --> 00:13:36,190 sobre listas duplamente ligadas. 285 00:13:36,190 --> 00:13:40,070 >> Agora, isso é uma estrutura que está relativamente familiarizados, porque a maioria 286 00:13:40,070 --> 00:13:42,520 de vocês provavelmente usou em pset6. 287 00:13:42,520 --> 00:13:45,680 Aqui está um que é um pouco menos familiar. 288 00:13:45,680 --> 00:13:51,020 Como uma nota lateral, eu acho que é um Teste principalmente mais difícil do que quiz 0, porque 289 00:13:51,020 --> 00:13:54,600 as coisas que você está fazendo, você não ter feito tanto. 290 00:13:54,600 --> 00:13:58,100 Para colocar isso de outra forma, para Quiz 0, você tinha escrito um monte de C. E nós 291 00:13:58,100 --> 00:13:58,880 perguntou-lhe sobre C. 292 00:13:58,880 --> 00:14:02,310 >> Para Teste 1, vamos perguntar-lhe sobre PHP e JavaScript, o que você 293 00:14:02,310 --> 00:14:03,490 não ter escrito tanto. 294 00:14:03,490 --> 00:14:07,590 Vamos perguntar-lhe sobre C-código que você não tenha escrito tanto, 295 00:14:07,590 --> 00:14:09,130 este material avançado C. 296 00:14:09,130 --> 00:14:11,520 Então, definitivamente, a prática do que coisas falou em palestra que 297 00:14:11,520 --> 00:14:15,260 não necessariamente fazer sobre o conjunto de problemas. 298 00:14:15,260 --> 00:14:17,870 >> Falando nisso, você não escreveu uma pilha sobre um conjunto de problemas. 299 00:14:17,870 --> 00:14:19,610 Mas foi na palestra. 300 00:14:19,610 --> 00:14:22,530 Aqui está a imagem de alto nível pilhas que mostramos a cada ano. 301 00:14:22,530 --> 00:14:26,180 É a pilha de bandejas em a sala de jantar Mather. 302 00:14:26,180 --> 00:14:30,570 Em um nível alto, pilhas são um último in, first out estrutura de dados. 303 00:14:30,570 --> 00:14:32,040 Isso significa que você está indo para colocar as coisas em - 304 00:14:32,040 --> 00:14:36,400 1, 3, 7, 12, 14, 0 negativo. 305 00:14:36,400 --> 00:14:39,180 A única coisa que eu não poderia ter disse - negativo 3, 0. 306 00:14:39,180 --> 00:14:40,250 Você coloca todas essas coisas dentro 307 00:14:40,250 --> 00:14:42,940 E o último que você colocou no é o primeiro um que vai sair. 308 00:14:42,940 --> 00:14:44,170 >> Então você tem duas operações - 309 00:14:44,170 --> 00:14:45,260 push e pop. 310 00:14:45,260 --> 00:14:49,180 Todos os colocando em que eu era gesticulando como esta são empurrão. 311 00:14:49,180 --> 00:14:52,020 E então quando eu chegar no grab algo ou chegar em cima para pegar 312 00:14:52,020 --> 00:14:53,940 alguma coisa, que é pop. 313 00:14:53,940 --> 00:14:55,540 Então, nós estamos indo para implementar pilhas. 314 00:14:55,540 --> 00:14:57,870 E nós lhes mostrou em palestra utilização de arrays. 315 00:14:57,870 --> 00:14:59,550 Mas você pode fazê-las usando listas ligadas. 316 00:14:59,550 --> 00:15:01,770 Uma pilha é um conceitual de dados estrutura, não como um 317 00:15:01,770 --> 00:15:03,760 uma aplicação específica. 318 00:15:03,760 --> 00:15:06,420 >> Então, o que isso parece? 319 00:15:06,420 --> 00:15:07,970 Seria algo mais ou menos como este. 320 00:15:07,970 --> 00:15:10,840 Você teria um tamanho inteiro. 321 00:15:10,840 --> 00:15:16,000 E você tem um conjunto de valores que estamos chamando bandejas, porque isso é 322 00:15:16,000 --> 00:15:18,570 o que a imagem era para nós - int bandejas - 323 00:15:18,570 --> 00:15:21,740 e mais um pouco a capacidade máxima. 324 00:15:21,740 --> 00:15:27,100 Então, o que levaria Look Like? 325 00:15:27,100 --> 00:15:33,250 Bem, se nós temos uma pilha s, em seguida, para empurrar algo sobre s, obteríamos 326 00:15:33,250 --> 00:15:34,620 o tamanho de s. 327 00:15:34,620 --> 00:15:42,270 E isso seria o próximo local aberto da nossa matriz. 328 00:15:42,270 --> 00:15:50,510 Então, se temos três coisas em nossa pilha, em seguida, as bandejas 3 seria o próximo 329 00:15:50,510 --> 00:15:54,290 local aberto, porque 0, 1, e 2 já está preenchido. 330 00:15:54,290 --> 00:16:01,790 >> Então vamos colocar o valor em s.trays [s.size], o terceiro lugar. 331 00:16:01,790 --> 00:16:06,290 E então nós incrementar s.size a dizer, hey, tivemos três coisas antes. 332 00:16:06,290 --> 00:16:07,400 Agora, nós temos quatro. 333 00:16:07,400 --> 00:16:10,180 Então da próxima vez você empurra, você está vai colocar algo em 4. 334 00:16:10,180 --> 00:16:15,560 Ou da próxima vez que aparecer, você vai a olhar para 3 em vez de 4 ou o que seja. 335 00:16:15,560 --> 00:16:18,000 E então nós vamos retornar true para digamos, hey, nós conseguimos. 336 00:16:18,000 --> 00:16:19,160 Isso funcionou. 337 00:16:19,160 --> 00:16:22,060 Como regra geral, se uma função que é deve retornar true ou 338 00:16:22,060 --> 00:16:26,370 falsa sempre retorna true, você pode ter feito algo errado. 339 00:16:26,370 --> 00:16:28,350 Então, isso funciona? 340 00:16:28,350 --> 00:16:32,400 >> Bem, ele funciona bem para um, e 2 e 3, e 4, e cinco. 341 00:16:32,400 --> 00:16:34,640 Mas digamos que eu chegar ao meu capacidade. 342 00:16:34,640 --> 00:16:38,750 Eu, em seguida, correr para um problema, porque se o tamanho é a mesma como a capacidade, eu sou 343 00:16:38,750 --> 00:16:43,340 agora a tentar colocar algo em um array onde eu não tenho espaço. 344 00:16:43,340 --> 00:16:46,980 Então, uma pequena seleção para corrigir isso. 345 00:16:46,980 --> 00:16:51,630 Se s.size == CAPACIDADE, retornar false. 346 00:16:51,630 --> 00:16:54,130 Caso contrário, vá e faça o que nós fizemos. 347 00:16:54,130 --> 00:16:55,660 Então o que mais poderíamos pedir cerca de pilhas? 348 00:16:55,660 --> 00:16:56,460 O que mais você deve estudar? 349 00:16:56,460 --> 00:16:57,690 O que mais você deve praticar? 350 00:16:57,690 --> 00:17:01,030 >> Bem, a implementação de pop. 351 00:17:01,030 --> 00:17:02,370 Nós já fizemos empurrão. 352 00:17:02,370 --> 00:17:04,280 Eu vou corrigir isso. 353 00:17:04,280 --> 00:17:08,180 A implementação não-matriz, onde você usa uma lista ligada, talvez. 354 00:17:08,180 --> 00:17:09,390 A implementação não int. 355 00:17:09,390 --> 00:17:10,940 Fizemos ints aqui. 356 00:17:10,940 --> 00:17:11,880 Mas poderia ter sido carros alegóricos. 357 00:17:11,880 --> 00:17:13,010 Eu poderia ter sido strings. 358 00:17:13,010 --> 00:17:14,290 Poderia ter sido estrelas de caracteres. 359 00:17:14,290 --> 00:17:17,960 Olhe para quizzes últimos para os tipos de perguntas que você pediu sobre pilhas. 360 00:17:17,960 --> 00:17:20,000 >> Eu vou dizer que nós cobrimos pilhas em torno o mesmo que nós cobrimos eles em 361 00:17:20,000 --> 00:17:20,540 ano passado. 362 00:17:20,540 --> 00:17:24,400 Assim, as perguntas do questionário deveria ser uma boa indicação. 363 00:17:24,400 --> 00:17:27,010 Avançando ainda mais rápido, as filas. 364 00:17:27,010 --> 00:17:28,200 Eles são como pilhas. 365 00:17:28,200 --> 00:17:29,960 Mas eles são first in, first out. 366 00:17:29,960 --> 00:17:33,530 Se você é britânico, fila a palavra provavelmente fez muito sentido para você. 367 00:17:33,530 --> 00:17:36,390 Caso contrário, você pode ter ouvido falar dele como uma linha. 368 00:17:36,390 --> 00:17:38,120 Eles funcionam como a linha na loja da Apple. 369 00:17:38,120 --> 00:17:40,740 A primeira pessoa a mostrar-se às 3:00 na parte da manhã é a primeira 370 00:17:40,740 --> 00:17:42,880 pessoa a comprar o seu iPad. 371 00:17:42,880 --> 00:17:44,260 >> Portanto, temos duas operações - 372 00:17:44,260 --> 00:17:45,720 enfileiramento e dequeue. 373 00:17:45,720 --> 00:17:47,560 Enqueue coloca alguém na linha. 374 00:17:47,560 --> 00:17:50,070 Desenfileiramento puxa o primeiro pessoa fora da linha. 375 00:17:50,070 --> 00:17:52,640 Mais uma vez, podemos implementar isto com uma matriz. 376 00:17:52,640 --> 00:17:54,880 Então, qual é o que struct mostrou na palestra? 377 00:17:54,880 --> 00:17:57,660 Foi um presente. 378 00:17:57,660 --> 00:17:59,300 Mais uma vez, os números. 379 00:17:59,300 --> 00:18:02,020 Mais uma vez, o tamanho ea essa coisa nova frente. 380 00:18:02,020 --> 00:18:04,880 Porque é que existe uma coisa chamada frente? 381 00:18:04,880 --> 00:18:07,050 É o índice do próximo elemento para retirar da fila. 382 00:18:07,050 --> 00:18:12,210 É só manter internamente o controle de o primeiro cara a mostrar-se, de modo que nós 383 00:18:12,210 --> 00:18:15,005 pode retirá-lo quando precisamos. 384 00:18:15,005 --> 00:18:19,322 >> Definitivamente olhar para anotações de aula e tentar para implementar enfileiramento e dequeue 385 00:18:19,322 --> 00:18:21,700 ao estudar para o quiz. 386 00:18:21,700 --> 00:18:23,190 Coisas importantes para se pensar. 387 00:18:23,190 --> 00:18:27,260 Envolvendo em torno se a frente mais a tamanho acaba maior do que a capacidade. 388 00:18:27,260 --> 00:18:32,670 Mais uma vez, se a sua estrutura é completa, você vai ter um problema. 389 00:18:32,670 --> 00:18:34,780 Hash tabelas que você já viu antes. 390 00:18:34,780 --> 00:18:39,820 A maioria de vocês provavelmente implementado estes em pset6. 391 00:18:39,820 --> 00:18:44,210 É uma estrutura que visa a O (1) inserção de tempo constante e S (1) 392 00:18:44,210 --> 00:18:46,430 pesquisa de tempo constante. 393 00:18:46,430 --> 00:18:49,760 >> Em CS50, implementamos este como um conjunto de listas ligadas. 394 00:18:49,760 --> 00:18:53,690 O componente chave para uma tabela hash é a função hash. 395 00:18:53,690 --> 00:18:58,350 Por isso, converte a sua entrada, vamos dizer, uma palavra de dicionário, em um número, 396 00:18:58,350 --> 00:18:59,560 qual vai ser o nosso índice. 397 00:18:59,560 --> 00:19:01,410 E nós vamos usar esse índice em nossa matriz. 398 00:19:01,410 --> 00:19:05,374 Então, aqui está uma foto bonitinha de study.50.net. 399 00:19:05,374 --> 00:19:08,060 Jogamos todas as palavras em nossa função hash. 400 00:19:08,060 --> 00:19:10,950 E a função de hash nos diz onde colocar essas palavras. 401 00:19:10,950 --> 00:19:15,650 >> Isso tudo é grande na terra onde só há uma palavra para cada slot. 402 00:19:15,650 --> 00:19:20,480 Mas, como você se lembra de pset6, não são mais palavras do que slots. 403 00:19:20,480 --> 00:19:23,080 Então o que acontece quando você obter uma colisão? 404 00:19:23,080 --> 00:19:26,730 Em vez de armazenar um valor de, vamos dizer, tabela hash 3, você 405 00:19:26,730 --> 00:19:27,990 armazenar uma lista ligada. 406 00:19:27,990 --> 00:19:32,900 E assim, em vez de ter melão aqui, você teria uma lista ligada, 407 00:19:32,900 --> 00:19:34,190 onde o primeiro nó é melão. 408 00:19:34,190 --> 00:19:35,260 E o próximo nó é gato. 409 00:19:35,260 --> 00:19:38,970 E o terceiro nó é colisão, vamos dizer, porque todas essas palavras começam 410 00:19:38,970 --> 00:19:41,110 com C. 411 00:19:41,110 --> 00:19:42,700 >> Assim, a maioria de vocês fez isso por pset6. 412 00:19:42,700 --> 00:19:45,685 Se você não fez uma tabela hash em pset6 e você tentou algo parecido 413 00:19:45,685 --> 00:19:47,720 uma trie, definitivamente rever tabelas hash. 414 00:19:47,720 --> 00:19:50,650 Se você fez isso de pset6, definitivamente rever tabelas hash. 415 00:19:50,650 --> 00:19:53,610 E se você fez isso de pset6 e isso não aconteceu trabalhar muito bem e você 416 00:19:53,610 --> 00:19:56,150 tinha um monte de problemas com ele, definitivamente rever tabelas hash. 417 00:19:56,150 --> 00:20:01,610 Assim, a lição é realmente definitivamente rever tabelas hash. 418 00:20:01,610 --> 00:20:07,130 >> A grande minoria de que você tentou fora tenta sobre pset6. 419 00:20:07,130 --> 00:20:08,570 Imagem de alto nível. 420 00:20:08,570 --> 00:20:15,150 É algo como este, onde cada nó possui um conjunto de crianças, onde cada 421 00:20:15,150 --> 00:20:17,100 criança corresponde a uma letra. 422 00:20:17,100 --> 00:20:20,520 E cada nó também diz: hey, eu sou uma palavra. 423 00:20:20,520 --> 00:20:25,933 Portanto, neste exemplo, a palavra Maxwell, se você seguir o M para o A para o 424 00:20:25,933 --> 00:20:28,530 X-W-E-L-L e depois segui-lo mais uma vez. 425 00:20:28,530 --> 00:20:32,800 E você tem este símbolo, delta, que que significam a dizer isso é uma palavra. 426 00:20:32,800 --> 00:20:34,780 Então Maxwell é uma palavra. 427 00:20:34,780 --> 00:20:38,430 Estes são deltas todo significante que as coisas são palavras e que 428 00:20:38,430 --> 00:20:40,360 as coisas não são. 429 00:20:40,360 --> 00:20:46,400 >> Assim, em pset6, os dados que armazenamos ao lado de qualquer um dos nossos nós foi "Eu sou um 430 00:20:46,400 --> 00:20:52,630 palavra. "E a coisa legal sobre tentativas é demonstrar que a inserção e 431 00:20:52,630 --> 00:20:55,080 lookup em O (comprimento de uma palavra). 432 00:20:55,080 --> 00:20:59,450 Então, só para passar por Maxwell, é M-A-X-W-E-L-L. Assim, sete ou oito - 433 00:20:59,450 --> 00:21:00,360 Eu não posso contar - 434 00:21:00,360 --> 00:21:03,920 passos para chegar até o fim e verificar as coisas. 435 00:21:03,920 --> 00:21:06,800 Implementação tão rápida aqui. 436 00:21:06,800 --> 00:21:10,230 Rob passou por uma associada listar em seu pós-morte. 437 00:21:10,230 --> 00:21:11,600 Portanto, verifique isso. 438 00:21:11,600 --> 00:21:11,720 Desculpe. 439 00:21:11,720 --> 00:21:13,240 Passou por uma trie em seu pós-morte. 440 00:21:13,240 --> 00:21:14,260 Portanto, verifique isso. 441 00:21:14,260 --> 00:21:24,410 >> Mas você tem basicamente cada nó tem 27 ponteiros para os próximos nós e um 442 00:21:24,410 --> 00:21:27,050 Boolean estou eu uma palavra. 443 00:21:27,050 --> 00:21:31,530 Confira postmortem de Rob por quanto isso realmente é implementado. 444 00:21:31,530 --> 00:21:34,750 Nossa estrutura final, nossas árvores e árvores de busca binária. 445 00:21:34,750 --> 00:21:41,530 Então, olhando para estes, estas foram cobertas mais recentemente, Semana 8, segunda-feira. 446 00:21:41,530 --> 00:21:46,960 Uma árvore é semelhante a uma trie, exceto que você não necessariamente têm 27 nós em 447 00:21:46,960 --> 00:21:47,500 cada ponto. 448 00:21:47,500 --> 00:21:52,820 E você não tem esses dados a cada passo que significa se o - 449 00:21:52,820 --> 00:21:54,030 o caminho não importa. 450 00:21:54,030 --> 00:22:00,870 Considerando uma trie, o caminho de cima para inferior, Maxwell, foi importante para nós. 451 00:22:00,870 --> 00:22:05,270 >> Mas cada nó tem múltipla crianças, talvez. 452 00:22:05,270 --> 00:22:07,290 Nós temos um pouco mais de vocabulário. 453 00:22:07,290 --> 00:22:09,530 A raiz da árvore está no topo. 454 00:22:09,530 --> 00:22:12,520 E nós dizemos que a própria bottommost os nós que não têm 455 00:22:12,520 --> 00:22:14,530 crianças são folhas. 456 00:22:14,530 --> 00:22:18,040 Assim como uma trie, uma árvore é uma estrutura de nós. 457 00:22:18,040 --> 00:22:21,490 Um tipo comum de árvore que vamos falar é uma árvore binária, onde 458 00:22:21,490 --> 00:22:26,040 cada nó não tem filhos ou uma criança ou duas crianças. 459 00:22:26,040 --> 00:22:28,890 Portanto, esta imagem aqui não é uma árvore binária, porque 460 00:22:28,890 --> 00:22:32,890 nó 3 tem três filhos. 461 00:22:32,890 --> 00:22:38,140 >> Mas se tivéssemos de ignorar aqueles, o resto de que é uma árvore binária porque 462 00:22:38,140 --> 00:22:43,200 demonstra a propriedade que cada nó tem zero, um ou dois filhos. 463 00:22:43,200 --> 00:22:46,400 Então, como podemos expressar isso no código? 464 00:22:46,400 --> 00:22:51,460 Poderíamos ter um nó onde cada nó tem um número inteiro dentro do mesmo, bem 465 00:22:51,460 --> 00:22:55,590 como um ponteiro para a árvore à esquerda e um ponteiro para a árvore no 466 00:22:55,590 --> 00:22:59,510 direita, de modo que os dois filhos. 467 00:22:59,510 --> 00:23:00,880 Como isso é útil? 468 00:23:00,880 --> 00:23:05,740 Bem, se fizermos regras sobre onde nós colocar nós, podemos tornar a pesquisa mais rápida. 469 00:23:05,740 --> 00:23:10,630 >> Portanto, há um conceito de uma pesquisa binária árvore, em que todos os nós da 470 00:23:10,630 --> 00:23:14,420 subárvore esquerda tem um valor menor que o nó que estamos olhando. 471 00:23:14,420 --> 00:23:17,880 E todos nós na subárvore direita ter um valor maior 472 00:23:17,880 --> 00:23:18,660 que o nó raiz. 473 00:23:18,660 --> 00:23:20,670 Agora, que se parece com um monte de palavras. 474 00:23:20,670 --> 00:23:23,770 Vou colocá-lo dentro de dupla citações e mostrar uma foto. 475 00:23:23,770 --> 00:23:27,010 Então, aqui está um exemplo de uma árvore de busca binária. 476 00:23:27,010 --> 00:23:28,770 Veja que começamos com 10. 477 00:23:28,770 --> 00:23:31,780 Tudo o que o lado esquerdo da 10 é menor do que. 478 00:23:31,780 --> 00:23:33,130 E tudo para a direita é maior do que isso. 479 00:23:33,130 --> 00:23:37,620 >> Mas mais do que isso, cada nó a árvore expressa essa propriedade. 480 00:23:37,620 --> 00:23:42,110 Assim, o nó 7 tem um 3 a para a esquerda e um 9 para a direita. 481 00:23:42,110 --> 00:23:44,440 Assim, todos aqueles que são menores do que 10. 482 00:23:44,440 --> 00:23:50,470 Mas olhando para apenas aqueles, o 7 tem 3 à sua esquerda e 9 para a sua direita. 483 00:23:50,470 --> 00:23:56,100 E da mesma forma, à direita, 15 tem 14 à sua esquerda e 50 à direita. 484 00:23:56,100 --> 00:24:03,770 Assim, os três nós por lá, 15, 14, e 50 anos, são também uma árvore binária válido 485 00:24:03,770 --> 00:24:05,480 ou uma árvore de busca binária válido. 486 00:24:05,480 --> 00:24:07,250 E todos eles são maiores do que 10. 487 00:24:07,250 --> 00:24:08,960 Então, eles estão autorizados a estar à direita lá. 488 00:24:08,960 --> 00:24:09,940 Existe uma pergunta? 489 00:24:09,940 --> 00:24:12,580 >> AUDIÊNCIA: Como você lida quando você tem dois setes? 490 00:24:12,580 --> 00:24:12,850 >> RJ AQUINO: Yeah. 491 00:24:12,850 --> 00:24:16,550 Como você lida com dois valores que são os mesmos? 492 00:24:16,550 --> 00:24:21,465 Algumas árvores de busca binária dizer que você ignorar duplicatas, porque o objetivo é 493 00:24:21,465 --> 00:24:24,280 só para dizer, eu já vi essas coisas até agora. 494 00:24:24,280 --> 00:24:28,120 Algumas árvores de busca binária pode-se dizer tem uma contagem dentro do nó. 495 00:24:28,120 --> 00:24:32,000 Outros podem dizer que tudo o que esquerda é menor do que ou igual a. 496 00:24:32,000 --> 00:24:33,470 E tudo para a direita é maior do que. 497 00:24:33,470 --> 00:24:36,520 >> Ela só depende do que o problema é que você está resolvendo. 498 00:24:36,520 --> 00:24:40,840 Assim, em um dicionário, por exemplo, você não se preocupam com duplicatas. 499 00:24:40,840 --> 00:24:41,490 Você iria jogá-los fora. 500 00:24:41,490 --> 00:24:44,719 Mas algum outro problema que você pode cuidar. 501 00:24:44,719 --> 00:24:49,242 >> AUDIÊNCIA: É possível ter 1 para a esquerda, de 15, o qual 502 00:24:49,242 --> 00:24:50,590 é inferior a 10? 503 00:24:50,590 --> 00:24:51,885 >> RJ AQUINO: Não. 504 00:24:51,885 --> 00:24:56,570 Se o 14 aqui foram um 1, este seria não ser uma árvore de busca binária válida, 505 00:24:56,570 --> 00:25:00,840 porque tudo à direita 10 tem de ser maior do que ele. 506 00:25:00,840 --> 00:25:02,300 E vamos ver o porquê. 507 00:25:02,300 --> 00:25:07,960 Se na terra de busca meu objetivo é para encontrar 14, eu começo na raiz. 508 00:25:07,960 --> 00:25:08,500 Então eu olho. 509 00:25:08,500 --> 00:25:08,710 OK. 510 00:25:08,710 --> 00:25:10,670 Vamos começar na raiz. 511 00:25:10,670 --> 00:25:12,500 Olhe para 10. 512 00:25:12,500 --> 00:25:16,050 >> Bem, 14, o nosso alvo, é maior do que 10. 513 00:25:16,050 --> 00:25:17,370 Por isso, deve-se à direita. 514 00:25:17,370 --> 00:25:21,780 Isto é muito semelhante ao conjunto do telefone coisa livro que fizemos, o binário 515 00:25:21,780 --> 00:25:23,720 pesquisar lá. 516 00:25:23,720 --> 00:25:26,430 Mas, em vez de procurar binário em uma matriz, estamos binário 517 00:25:26,430 --> 00:25:28,490 busca nesta árvore. 518 00:25:28,490 --> 00:25:31,260 Então, ainda estamos à procura de 14. 519 00:25:31,260 --> 00:25:32,480 Bem, 14 é menor do que 15. 520 00:25:32,480 --> 00:25:36,430 Então, se é na nossa árvore, deve estar num determinado local. 521 00:25:36,430 --> 00:25:39,680 Deve ser à direita do 10 e para a esquerda, de 15. 522 00:25:39,680 --> 00:25:42,250 >> E, assim, verificar este nó. 523 00:25:42,250 --> 00:25:45,790 E yay, nós encontramos 14. 524 00:25:45,790 --> 00:25:46,760 Eu não estou indo para atravessá-la. 525 00:25:46,760 --> 00:25:48,090 Mas aqui está o código. 526 00:25:48,090 --> 00:25:49,690 Na verdade, é relativamente simples, 527 00:25:49,690 --> 00:25:52,630 porque este é recursivo. 528 00:25:52,630 --> 00:25:55,420 O que poderíamos pedir para você fazer em um teste? 529 00:25:55,420 --> 00:25:57,000 Poderíamos pedir-lhe para escrever este código. 530 00:25:57,000 --> 00:25:59,170 Poderíamos pedir-lhe para olhar para este código e modificar o código e explicar o que 531 00:25:59,170 --> 00:26:00,210 que está fazendo. 532 00:26:00,210 --> 00:26:00,390 É. 533 00:26:00,390 --> 00:26:00,770 Pergunta? 534 00:26:00,770 --> 00:26:04,240 >> AUDIÊNCIA: São esses slides vai ser disponibilizados como estavam da última vez? 535 00:26:04,240 --> 00:26:04,740 >> RJ AQUINO: sim. 536 00:26:04,740 --> 00:26:06,460 Então, esses slides vai definitivamente ser postado. 537 00:26:06,460 --> 00:26:08,640 >> AUDIÊNCIA: Eles estão realmente postado agora no site. 538 00:26:08,640 --> 00:26:10,020 David acabou de fazer isso. 539 00:26:10,020 --> 00:26:12,720 >> RJ AQUINO: Os slides são agora no site. 540 00:26:12,720 --> 00:26:16,420 Eu provavelmente vou consertar um par de os erros de digitação Notei e corrigi-los. 541 00:26:16,420 --> 00:26:19,940 Mas há uma corrente versão no site. 542 00:26:19,940 --> 00:26:21,820 Outros coisas que poderíamos pedir-lhe para fazer - 543 00:26:21,820 --> 00:26:23,790 escrever inserção. 544 00:26:23,790 --> 00:26:27,490 Escreva uma versão iterativa do função recursiva que acabei de mostrar 545 00:26:27,490 --> 00:26:32,520 ou falar sobre essas coisas, como em parágrafos, em palavras, em frases. 546 00:26:32,520 --> 00:26:35,760 Comparando-se os tempos de execução e explicando o que você gostaria de usar um binário 547 00:26:35,760 --> 00:26:39,200 árvore de busca para em vez de um Tabela de Hash, por exemplo. 548 00:26:39,200 --> 00:26:43,580 >> Assim, entender estas estruturas em um nível muito profundo. 549 00:26:43,580 --> 00:26:47,440 Entenda como escrevê-los, como usá-los, como falar sobre eles. 550 00:26:47,440 --> 00:26:50,270 E você vai estar tudo pronto. 551 00:26:50,270 --> 00:26:50,630 Pergunta? 552 00:26:50,630 --> 00:26:55,070 >> AUDIÊNCIA: Quando você está escrevendo o árvore binária de busca, como você 553 00:26:55,070 --> 00:27:01,460 determinar o valor de torná-lo como a raiz? 554 00:27:01,460 --> 00:27:06,120 >> RJ AQUINO: Então, a pergunta era: o que valor que você acha que a raiz? 555 00:27:06,120 --> 00:27:08,760 Dependendo do seu código, você pode ter uma raiz global. 556 00:27:08,760 --> 00:27:14,290 Então você pode ter provavelmente tinha em pset6 uma tabela hash global. 557 00:27:14,290 --> 00:27:18,640 Ou você pode passar a raiz como um argumento. 558 00:27:18,640 --> 00:27:23,810 Portanto, esta função de pesquisa aqui recebe um argumento um nó *. 559 00:27:23,810 --> 00:27:27,420 E assim que o nó tiver que ser olhando é o que você está tratando 560 00:27:27,420 --> 00:27:31,510 como a sua raiz quando você passá-lo dentro 561 00:27:31,510 --> 00:27:32,320 E eu estou pronto. 562 00:27:32,320 --> 00:27:33,480 Esses são os meus slides. 563 00:27:33,480 --> 00:27:35,940 A próxima pessoa pode vir de swap em um laptop e microfone. 564 00:27:35,940 --> 00:27:47,390 565 00:27:47,390 --> 00:27:49,760 >> ROB BOWDEN: Eu acho que eu poderia ter interpretado essa questão de forma diferente. 566 00:27:49,760 --> 00:27:53,826 Mas eu interpretei isso como, se você tiver os números 1, 2 e 3, como nós 567 00:27:53,826 --> 00:27:56,720 saber para fazer 2 a raiz em oposição a uma ou três? 568 00:27:56,720 --> 00:27:59,480 Se fizermos 2 a raiz, então é bem 1 e 3 à esquerda e à direita. 569 00:27:59,480 --> 00:28:04,610 Mas se um é a raiz, então é uma ao topo, dois da direita, 3 para a direita. 570 00:28:04,610 --> 00:28:10,880 Então, por padrão, você não sabe o que fazer a raiz. 571 00:28:10,880 --> 00:28:15,400 E para qualquer algoritmo que estamos esperando dar-lhe, assim, a primeira coisa que você 572 00:28:15,400 --> 00:28:16,680 inserção seria a raiz. 573 00:28:16,680 --> 00:28:19,890 Ou nós dar-lhe uma árvore binária que já existente, que tem uma raiz. 574 00:28:19,890 --> 00:28:24,760 Mas outros algoritmos existe tal que a raiz será atualizado, de modo que se você 575 00:28:24,760 --> 00:28:28,370 acabar na situação em que é 1, 2, 3, ele vai atualizar automaticamente para 576 00:28:28,370 --> 00:28:30,900 fazer 2 a nova raiz, de modo que ele ainda está bem equilibrada. 577 00:28:30,900 --> 00:28:33,750 578 00:28:33,750 --> 00:28:34,833 >> ANGELA LI: Cool. 579 00:28:34,833 --> 00:28:36,170 Ei, pessoal. 580 00:28:36,170 --> 00:28:37,810 Eu sou Angela. 581 00:28:37,810 --> 00:28:42,490 E eu vou terminar o nosso C e, em seguida, entrar em alguns dos nossos web 582 00:28:42,490 --> 00:28:43,120 tecnologias - 583 00:28:43,120 --> 00:28:46,570 HTTP, HTML e CSS. 584 00:28:46,570 --> 00:28:49,610 Então a primeira coisa é tampão ataques de estouro. 585 00:28:49,610 --> 00:28:53,070 Então, vamos dar uma olhada neste código. 586 00:28:53,070 --> 00:28:54,260 É muito simples. 587 00:28:54,260 --> 00:28:55,460 Há uma função foo. 588 00:28:55,460 --> 00:28:56,990 E ele não retorna nada. 589 00:28:56,990 --> 00:29:00,950 Mas é preciso em um ponteiro para uma string chamada bar. 590 00:29:00,950 --> 00:29:04,920 >> E vai declarar esta buffer, que é um personagem 591 00:29:04,920 --> 00:29:07,690 matriz que tem 12 slots. 592 00:29:07,690 --> 00:29:11,730 E ele usa memcpy, que é apenas um função que copia de um endereço 593 00:29:11,730 --> 00:29:12,910 em outra. 594 00:29:12,910 --> 00:29:19,400 Então, isso está tentando copiar para nosso buffer de qualquer 595 00:29:19,400 --> 00:29:21,140 bar está apontando. 596 00:29:21,140 --> 00:29:24,640 Então, alguma idéia do que está errado com esse código? 597 00:29:24,640 --> 00:29:27,568 598 00:29:27,568 --> 00:29:30,830 >> AUDIÊNCIA: Se a barra é mais longa do que C, que irá substituir. 599 00:29:30,830 --> 00:29:31,520 >> ANGELA LI: Sim, exatamente. 600 00:29:31,520 --> 00:29:34,200 Nós não temos nenhuma garantia de que a barra vai ser menor do que 12. 601 00:29:34,200 --> 00:29:36,080 Nós apenas fizemos um número arbitrário 12. 602 00:29:36,080 --> 00:29:38,380 E nós ficamos tipo, vamos esperar que nossa entrada for inferior a 603 00:29:38,380 --> 00:29:40,440 12 caracteres. 604 00:29:40,440 --> 00:29:46,320 Assim, em um mundo ideal, se a nossa entrada é sempre como esperado, então nós vamos chegar 605 00:29:46,320 --> 00:29:47,550 algo como, Olá. 606 00:29:47,550 --> 00:29:48,920 Isso é menos de 12 caracteres. 607 00:29:48,920 --> 00:29:51,870 Ele é lido em char c. 608 00:29:51,870 --> 00:29:53,280 E, então, fazer algo com ele. 609 00:29:53,280 --> 00:29:54,800 Realmente não importa. 610 00:29:54,800 --> 00:29:59,740 >> Mas uma pessoa mal-intencionada pode fazer algo mais como este, onde eles 611 00:29:59,740 --> 00:30:04,760 dá-nos tudo o bar está apontando para, ele vai apontar para este enorme variedade 612 00:30:04,760 --> 00:30:06,280 de apenas de um. 613 00:30:06,280 --> 00:30:10,680 E este é o caminho mais longo do que 12. 614 00:30:10,680 --> 00:30:13,830 Então, ele vai percorrer todo o caminho até aqui para que o retorno 615 00:30:13,830 --> 00:30:15,420 endereço costumava ser. 616 00:30:15,420 --> 00:30:17,860 Então, digamos que esta função é chamado foo. 617 00:30:17,860 --> 00:30:20,970 Talvez foo foi chamado por algum outro função, que foi chamado por principal. 618 00:30:20,970 --> 00:30:24,890 Então, quando foo está sendo executado, ele precisa saber para onde voltar. 619 00:30:24,890 --> 00:30:29,130 >> Se foo foi chamado por uma função chamada baz, tem que saber que é 620 00:30:29,130 --> 00:30:30,250 tem que voltar para Baz. 621 00:30:30,250 --> 00:30:34,040 E é isso que este endereço de retorno aqui está nos dizendo. 622 00:30:34,040 --> 00:30:38,340 Mas se substituí-lo com algum outro endereço, neste caso, esta é uma 623 00:30:38,340 --> 00:30:42,650 representação do discurso na início deste buffer, então 624 00:30:42,650 --> 00:30:45,240 o que realmente vai acontecer é que em vez de voltar para trás para baz, 625 00:30:45,240 --> 00:30:48,470 que chamou a nossa função, é apenas indo para ir para a frente este código. 626 00:30:48,470 --> 00:30:53,930 >> E se isso estava lá porque um malicioso cara veio e hackers 627 00:30:53,930 --> 00:30:56,820 injetado isso, então talvez esse valor do de um não é realmente de um. 628 00:30:56,820 --> 00:31:02,030 E ele é realmente apenas o código que quebra seu computador ou algo assim. 629 00:31:02,030 --> 00:31:05,930 Então, para ficar na defensiva sobre esse tipo de coisa, você tem que assumir que nunca 630 00:31:05,930 --> 00:31:09,120 entrada do usuário um certo quantidade de caracteres. 631 00:31:09,120 --> 00:31:13,310 Por exemplo, quando você estava fazendo ortográfico, lhe foi dito que as palavras eram 632 00:31:13,310 --> 00:31:15,580 só vai ser 40 caracteres máximo de comprimento. 633 00:31:15,580 --> 00:31:16,570 E isso era bom. 634 00:31:16,570 --> 00:31:20,150 >> Mas se não, então você teria que certifique-se apenas de ler em 45 635 00:31:20,150 --> 00:31:21,520 caracteres de cada vez. 636 00:31:21,520 --> 00:31:24,430 Caso contrário, você pode substituir seu buffer. 637 00:31:24,430 --> 00:31:26,140 Qualquer dúvida sobre isso. 638 00:31:26,140 --> 00:31:26,733 É. 639 00:31:26,733 --> 00:31:28,850 >> AUDIÊNCIA: Você poderia apenas falar um pouco mais sobre isso? 640 00:31:28,850 --> 00:31:29,790 >> ANGELA LI: Desculpe. 641 00:31:29,790 --> 00:31:31,040 Sim. 642 00:31:31,040 --> 00:31:32,813 643 00:31:32,813 --> 00:31:35,870 >> AUDIÊNCIA: O microfone é apenas para vídeo. 644 00:31:35,870 --> 00:31:37,640 Vou tentar e projeto. 645 00:31:37,640 --> 00:31:39,900 Oi, pessoal. 646 00:31:39,900 --> 00:31:40,920 SUP? 647 00:31:40,920 --> 00:31:45,330 Então, vamos passar por cima de algumas coisas no Biblioteca CS50, o que você está usando 648 00:31:45,330 --> 00:31:49,072 todo o semestre, principalmente para obter a entrada do usuário. 649 00:31:49,072 --> 00:31:53,140 Como você sabe, você incluir o CS50 biblioteca apenas fazendo CS50.h, que 650 00:31:53,140 --> 00:31:55,660 contém todos os protótipos do funções que você pode usar, como 651 00:31:55,660 --> 00:31:58,640 GetString e GetInt e GetFloat, et cetera. 652 00:31:58,640 --> 00:32:02,870 E há essa linha no CS50 biblioteca que define uma string, que 653 00:32:02,870 --> 00:32:05,380 Vocês todos já sabem é apenas um char *. 654 00:32:05,380 --> 00:32:07,900 >> Mas vamos dar uma olhada em GetString como funciona. 655 00:32:07,900 --> 00:32:10,010 Esta é uma versão muito resumida. 656 00:32:10,010 --> 00:32:15,090 Você pode puxar para cima os arquivos de biblioteca CS50 de, eu acho, manuals.CS50.net. 657 00:32:15,090 --> 00:32:16,750 E você pode ler a função real. 658 00:32:16,750 --> 00:32:19,330 Mas isso cobre algumas das as peças importantes. 659 00:32:19,330 --> 00:32:23,870 Então, nós criamos alguns tampão com alguma capacidade. 660 00:32:23,870 --> 00:32:27,570 E o que fazemos é pegar um personagem em um momento de padrão n. 661 00:32:27,570 --> 00:32:30,910 É aí que a entradas do usuário texto no console. 662 00:32:30,910 --> 00:32:33,430 >> E assim vamos ler em um caráter, desde que ele não é um novo 663 00:32:33,430 --> 00:32:37,220 linha e não é o fim do arquivo, o que é a extremidade de entrada padrão. 664 00:32:37,220 --> 00:32:45,690 E, para cada personagem que lemos em, se que o personagem acaba de adicionar 665 00:32:45,690 --> 00:32:50,120 para o número de caracteres que lemos e que é mais do que a nossa capacidade, 666 00:32:50,120 --> 00:32:53,490 então o que fazemos é apenas redimensionar nossa tampão de modo que é o dobro do tempo. 667 00:32:53,490 --> 00:32:56,950 Então, novamente, este proteger contra tampão ataques de estouro, porque você leu em 668 00:32:56,950 --> 00:32:58,315 um personagem de cada vez. 669 00:32:58,315 --> 00:33:02,290 E se em algum momento você ler em muito muitos, basta expandir o seu buffer. 670 00:33:02,290 --> 00:33:03,330 Você multiplica por dois. 671 00:33:03,330 --> 00:33:05,510 E então você tem mais espaço. 672 00:33:05,510 --> 00:33:09,120 >> Caso contrário, basta adicionar um personagem para o buffer. 673 00:33:09,120 --> 00:33:15,080 E depois que você já leu em toda a caracteres, que irá diminuir o buffer 674 00:33:15,080 --> 00:33:18,510 de volta para o tamanho normal, adicionar um terminador nulo, e depois voltar. 675 00:33:18,510 --> 00:33:21,880 676 00:33:21,880 --> 00:33:24,960 Agora, vamos olhar para GetInt. 677 00:33:24,960 --> 00:33:27,700 Vocês podem ler isso? 678 00:33:27,700 --> 00:33:30,710 Eu posso ampliar um pouco. 679 00:33:30,710 --> 00:33:33,410 680 00:33:33,410 --> 00:33:34,660 Eu não sei como os computadores funcionam. 681 00:33:34,660 --> 00:33:40,840 682 00:33:40,840 --> 00:33:41,270 Nunca mente. 683 00:33:41,270 --> 00:33:42,520 Não pode ampliar corretamente. 684 00:33:42,520 --> 00:33:47,500 685 00:33:47,500 --> 00:33:48,770 >> Isso é realmente difícil. 686 00:33:48,770 --> 00:33:49,180 Sinto muito. 687 00:33:49,180 --> 00:33:51,490 Vamos olhar para isso. 688 00:33:51,490 --> 00:33:57,140 Então, o que faz é GetInt ele lê primeiro em uma série de GetString, que 689 00:33:57,140 --> 00:33:59,250 temos implementado antes. 690 00:33:59,250 --> 00:34:02,945 E a parte mais importante a notar aqui é se essa partilha que ele acaba 691 00:34:02,945 --> 00:34:06,400 leitura é como não realmente uma corda, então nós apenas voltar para INT_MAX 692 00:34:06,400 --> 00:34:09,409 representar o fracasso. 693 00:34:09,409 --> 00:34:12,645 Por que voltar INT_MAX vez de negativo 1 ou 1? 694 00:34:12,645 --> 00:34:13,895 Alguma ideia? 695 00:34:13,895 --> 00:34:16,853 696 00:34:16,853 --> 00:34:19,350 >> AUDIÊNCIA: [inaudível] 1 negativo em um. 697 00:34:19,350 --> 00:34:20,070 >> ANGELA LI: Sim, exatamente. 698 00:34:20,070 --> 00:34:24,560 Então você é muito mais provável que apenas quer na entrada 1 ou negativo 1, quando solicitado 699 00:34:24,560 --> 00:34:27,469 para um enésimo e tudo Maxes enésima. 700 00:34:27,469 --> 00:34:27,969 É enorme. 701 00:34:27,969 --> 00:34:29,690 Você provavelmente não vai usá-lo. 702 00:34:29,690 --> 00:34:32,690 Então, isso é como uma decisão de projeto para certifique-se que você não acidentalmente 703 00:34:32,690 --> 00:34:38,540 retornará um erro ou você não voltar 1, que pode ser analisado 704 00:34:38,540 --> 00:34:41,199 como uma resposta correta. 705 00:34:41,199 --> 00:34:45,110 Assim, se uma linha não existir, voltamos INT-MAX. 706 00:34:45,110 --> 00:34:48,090 Caso contrário, vamos usar sscanf, que é como scanf. 707 00:34:48,090 --> 00:34:49,449 Mas ele lê a partir de uma string. 708 00:34:49,449 --> 00:34:54,310 >> E nós temos esta formatado string, que é% i% c. 709 00:34:54,310 --> 00:34:57,440 E nós tentamos e combinar isso com tudo o que o usuário nos deu. 710 00:34:57,440 --> 00:35:01,420 Queremos que o número de coisas combinadas a ser 1, o que significa que somente 711 00:35:01,420 --> 00:35:04,940 realmente quero corresponder a um número inteiro rodeado por talvez branco 712 00:35:04,940 --> 00:35:06,840 espaço, talvez não. 713 00:35:06,840 --> 00:35:10,710 Neste caso, se você colocar em alguma coisa como bar, bar não corresponde em tudo, 714 00:35:10,710 --> 00:35:14,400 porque é necessário que haja um inteiro no início. 715 00:35:14,400 --> 00:35:17,060 Por isso, nunca sscan virou 0. 716 00:35:17,060 --> 00:35:19,640 Então você não retornar isso. 717 00:35:19,640 --> 00:35:23,850 >> Alternativamente, se você colocar em alguma coisa como 1, 2, 3, A, B, C, que jogos 718 00:35:23,850 --> 00:35:27,180 tanto o número inteiro mas também o personagem depois. 719 00:35:27,180 --> 00:35:29,990 Assim sscanf retornará 2, que também não é ideal. 720 00:35:29,990 --> 00:35:34,620 Você não quer 1, 2, 3, A, B, C e ser um int válido. 721 00:35:34,620 --> 00:35:36,990 Então isso também não funciona. 722 00:35:36,990 --> 00:35:38,530 Mas digamos que você coloca em algo como 50. 723 00:35:38,530 --> 00:35:42,460 Isso vai coincidir com o% i, o que significa ele vai ter lido no n. 724 00:35:42,460 --> 00:35:44,790 E agora, n conterá o número 50. 725 00:35:44,790 --> 00:35:46,110 E então você pode devolvê-lo. 726 00:35:46,110 --> 00:35:49,270 >> Caso contrário, você bateu em Repetir. 727 00:35:49,270 --> 00:35:55,790 E então ele só vai outra vez até você recebe uma entrada adequada do usuário. 728 00:35:55,790 --> 00:35:56,891 Qualquer dúvida sobre isso? 729 00:35:56,891 --> 00:36:02,182 >> AUDIÊNCIA: Então, se você fosse para imprimir o valor da GetInt em [inaudível] 730 00:36:02,182 --> 00:36:06,250 seria apenas o número inteiro e máximo? 731 00:36:06,250 --> 00:36:07,440 >> ANGELA LI: Yeah. 732 00:36:07,440 --> 00:36:11,780 Então, se você usar GetInt, você deve assumir que você não quer max enésimo para 733 00:36:11,780 --> 00:36:15,328 ser uma entrada válida, porque você está indo supor que isso era ruim. 734 00:36:15,328 --> 00:36:27,740 >> AUDIÊNCIA: Se não tivéssemos char c e alguém colocou em 1, 2, 3, Sam, seria 735 00:36:27,740 --> 00:36:29,430 ainda trabalhar para 1, 2, 3? 736 00:36:29,430 --> 00:36:29,750 >> ANGELA LI: Eu acho que ele iria trabalhar. 737 00:36:29,750 --> 00:36:33,340 Mas você não quer que a 123Sam ser uma entrada válida por um usuário. 738 00:36:33,340 --> 00:36:34,670 Isso não é realmente um int. 739 00:36:34,670 --> 00:36:36,840 Por isso, não parece justo analisá-lo como um int. 740 00:36:36,840 --> 00:36:40,910 741 00:36:40,910 --> 00:36:42,160 OK. 742 00:36:42,160 --> 00:36:45,800 Nesse caso, vamos passar para a internet. 743 00:36:45,800 --> 00:36:49,120 Então HTTP não é uma linguagem. 744 00:36:49,120 --> 00:36:56,060 HTTP é apenas o conjunto de normas para como você enviar as coisas de clientes, 745 00:36:56,060 --> 00:36:57,280 isso é você, para os servidores. 746 00:36:57,280 --> 00:36:59,730 Isso é outras pessoas na web. 747 00:36:59,730 --> 00:37:02,900 >> Então HTTP significa Hypertext Transfer Protocol. 748 00:37:02,900 --> 00:37:04,610 É o coração ea alma de toda a web. 749 00:37:04,610 --> 00:37:07,050 A parte de hipertexto apenas refere-se ao HTML. 750 00:37:07,050 --> 00:37:10,690 A transferência é clientes como você vai enviar pedidos de 751 00:37:10,690 --> 00:37:13,060 servidores, que dão respostas. 752 00:37:13,060 --> 00:37:16,380 E o protocolo é apenas, como é que você espera que um servidor se comportar? 753 00:37:16,380 --> 00:37:19,960 E como você deve se comportar de tal forma que você pode simplificar este 754 00:37:19,960 --> 00:37:21,920 processo de comunicação? 755 00:37:21,920 --> 00:37:26,650 >> Assim, solicitações HTTP parecem muito com isso. 756 00:37:26,650 --> 00:37:28,070 GET é o tipo de solicitação. 757 00:37:28,070 --> 00:37:31,220 Vocês têm visto solicitações GET e solicitações POST. 758 00:37:31,220 --> 00:37:36,690 Essa segunda coisa lá, / mim, isso é apenas o URI ou a URL de onde você 759 00:37:36,690 --> 00:37:38,140 quero ir para dentro do hospedeiro. 760 00:37:38,140 --> 00:37:44,140 Portanto, este pedido está pedindo o página, como www.facebook.com / mim. 761 00:37:44,140 --> 00:37:45,300 E é uma solicitação GET. 762 00:37:45,300 --> 00:37:51,020 E então este HTTP/1.1, que é apenas a versão do HTTP que você está usando. 763 00:37:51,020 --> 00:37:55,020 É quase sempre 1.1. 764 00:37:55,020 --> 00:37:56,880 >> E depois há um bando de outras coisas também. 765 00:37:56,880 --> 00:38:02,510 Você pode realmente ver estes se abrir o seu console quando você está 766 00:38:02,510 --> 00:38:03,770 navegar na web. 767 00:38:03,770 --> 00:38:07,290 Respostas parecido mais como este. 768 00:38:07,290 --> 00:38:09,620 A parte superior é, de novo, o tipo de HTTP que você está usando 769 00:38:09,620 --> 00:38:12,310 seguido por um código de estado. 770 00:38:12,310 --> 00:38:14,700 Então 200 OK é tudo deu certo. 771 00:38:14,700 --> 00:38:16,200 Aqui é o seu conteúdo. 772 00:38:16,200 --> 00:38:17,390 Seu conteúdo vai seguir. 773 00:38:17,390 --> 00:38:21,730 E então ele vai dizer que tipo de conteúdo e de outras coisas também. 774 00:38:21,730 --> 00:38:24,620 >> Os códigos de status, há alguns mais importantes que você deve saber. 775 00:38:24,620 --> 00:38:26,460 200 OK é como ouro de tudo. 776 00:38:26,460 --> 00:38:28,490 Tudo funciona. 777 00:38:28,490 --> 00:38:29,710 403 Proibido. 778 00:38:29,710 --> 00:38:32,910 Isso você provavelmente já viu se você esqueceu chmod algo corretamente. 779 00:38:32,910 --> 00:38:34,510 Isso significa que você não tem as permissões corretas para 780 00:38:34,510 --> 00:38:36,210 acessar esse no servidor. 781 00:38:36,210 --> 00:38:38,110 É como se, não, você não pode vê-lo. 782 00:38:38,110 --> 00:38:39,780 404 significa que coisa não existe. 783 00:38:39,780 --> 00:38:40,400 Não foi encontrado. 784 00:38:40,400 --> 00:38:41,640 Você provavelmente já viu muito isso. 785 00:38:41,640 --> 00:38:45,510 >> 500 Internal Server Error é geralmente como algo deu errado no lado 786 00:38:45,510 --> 00:38:46,460 do servidor. 787 00:38:46,460 --> 00:38:50,830 Então, quando você estava implementando pset7, se você tivesse erros do PHP, você poderia 788 00:38:50,830 --> 00:38:53,890 realmente ir para a página e ver um todo monte de coisas PHP erro. 789 00:38:53,890 --> 00:38:56,900 Mas isso normalmente não acontece, porque sites realmente não quer 790 00:38:56,900 --> 00:38:58,830 dizer-lhe por que seu site está quebrado. 791 00:38:58,830 --> 00:39:03,370 Eles provavelmente vou voltar a 500 Internal Server Error. 792 00:39:03,370 --> 00:39:06,120 >> E depois há 418 eu sou um bule de chá. 793 00:39:06,120 --> 00:39:07,910 Há toda uma história sobre por que isso é uma coisa. 794 00:39:07,910 --> 00:39:09,860 Mas você pode ler sobre isso em seu próprio tempo. 795 00:39:09,860 --> 00:39:11,450 Há todo um conjunto de outros códigos de status também. 796 00:39:11,450 --> 00:39:12,700 Mas estes são os você deveria saber. 797 00:39:12,700 --> 00:39:15,660 798 00:39:15,660 --> 00:39:18,610 Então vamos falar sobre HTML. 799 00:39:18,610 --> 00:39:22,180 HTML, lembre-se, não é um linguagem de programação. 800 00:39:22,180 --> 00:39:23,510 É uma linguagem de marcação. 801 00:39:23,510 --> 00:39:25,210 Isso significa que ele descreve o conteúdo. 802 00:39:25,210 --> 00:39:30,440 Diz-lhe que um documento HTML parece como ou não é o que parece 803 00:39:30,440 --> 00:39:32,230 mas como ele está estruturado. 804 00:39:32,230 --> 00:39:36,110 >> Por isso, define uma estrutura e semântica das páginas da web. 805 00:39:36,110 --> 00:39:37,830 É como se, este é um parágrafo. 806 00:39:37,830 --> 00:39:40,060 Esta é uma lista ordenada. 807 00:39:40,060 --> 00:39:42,360 Isto é como uma seção da minha página. 808 00:39:42,360 --> 00:39:43,260 Aqui está o título. 809 00:39:43,260 --> 00:39:44,310 Ele faz coisas assim. 810 00:39:44,310 --> 00:39:48,770 Não estilo nada disso, porque isso é o que você faz em CSS. 811 00:39:48,770 --> 00:39:50,270 E parece que uma série etiquetas de aninhadas. 812 00:39:50,270 --> 00:39:54,720 Assim, a utilização de um exemplo de uma base realmente Página HTML, você tem o DOCTYPE 813 00:39:54,720 --> 00:39:56,720 declaração lá em cima. 814 00:39:56,720 --> 00:40:00,940 >> Esta declaração DOCTYPE é dizendo, estamos usando HTML5. 815 00:40:00,940 --> 00:40:03,370 Então você tem a tag grande HTML. 816 00:40:03,370 --> 00:40:05,230 Ele contém uma cabeça e um corpo. 817 00:40:05,230 --> 00:40:06,970 Dentro da cabeça, você tem o título. 818 00:40:06,970 --> 00:40:12,950 Isso é o que se passa no título barra do seu navegador. 819 00:40:12,950 --> 00:40:15,810 Temos uma tag link que liga em uma folha de estilo externa. 820 00:40:15,810 --> 00:40:19,880 E então nós temos um script que puxa a partir de um JavaScript externo bem. 821 00:40:19,880 --> 00:40:23,750 >> E, em seguida, no interior do nosso corpo é realmente o que é mostrado na página. 822 00:40:23,750 --> 00:40:28,210 Temos um parágrafo e, em seguida, um imagem dentro desse número. 823 00:40:28,210 --> 00:40:32,000 Este é um retrato de gatinhos. 824 00:40:32,000 --> 00:40:35,840 Observe que a imagem tag se fecha. 825 00:40:35,840 --> 00:40:41,760 Então, em vez de abrir com uma imagem e depois fazer outro / imagem, 826 00:40:41,760 --> 00:40:47,500 só tem esta pequena barra aqui, que a fecha. 827 00:40:47,500 --> 00:40:53,670 E a tag de imagem também tem essa chave atributo valor chamado alt. 828 00:40:53,670 --> 00:40:56,970 Esse é o texto alternativo que acontece quando você passa o mouse sobre ele. 829 00:40:56,970 --> 00:41:03,170 >> A maioria dos elementos HTML têm algum valor da chave coisas que você pode dar isso, vários 830 00:41:03,170 --> 00:41:04,420 personalização. 831 00:41:04,420 --> 00:41:06,230 832 00:41:06,230 --> 00:41:08,705 É. 833 00:41:08,705 --> 00:41:09,955 >> AUDIÊNCIA: [inaudível]. 834 00:41:09,955 --> 00:41:17,510 835 00:41:17,510 --> 00:41:19,680 >> ANGELA LI: Bem, por isso é uma atributo da marca. 836 00:41:19,680 --> 00:41:25,320 Portanto, se você estava usando jQuery, você poderia fazer select image.getAttribute. 837 00:41:25,320 --> 00:41:27,930 E então você pode procurar obter o atributo alt. 838 00:41:27,930 --> 00:41:31,040 E ele vai te dar gatinhos. 839 00:41:31,040 --> 00:41:37,400 Se você se lembrar formulários em HTML, entrada elementos terá atributos de nome. 840 00:41:37,400 --> 00:41:41,870 E é isso que o PHP usa para enviar pedidos quando um formulário é enviado. 841 00:41:41,870 --> 00:41:44,762 842 00:41:44,762 --> 00:41:50,064 >> AUDIÊNCIA: Você mencionou algo sobre como se você usa ou Kittens.jpg 843 00:41:50,064 --> 00:41:54,410 algo que tem o que faltava pastas de arquivos ou outros arquivos? 844 00:41:54,410 --> 00:41:54,750 >> ANGELA LI: sim. 845 00:41:54,750 --> 00:41:57,010 Então, isso é o que se chama um parente caminho, porque eu não estou dando 846 00:41:57,010 --> 00:41:58,740 lhe o caminho completo. 847 00:41:58,740 --> 00:42:05,160 Isto é como quando em C, se você fizer fopen algum arquivo, se você hi.txt fopen, que 848 00:42:05,160 --> 00:42:09,190 hi.txt deverá estar na mesma diretório, a menos que você dar-lhe um mais 849 00:42:09,190 --> 00:42:11,530 caminho complexo. 850 00:42:11,530 --> 00:42:14,900 >> AUDIÊNCIA: Então você pode especificar qual pasta [inaudível]? 851 00:42:14,900 --> 00:42:17,660 >> ANGELA LI: Yeah. 852 00:42:17,660 --> 00:42:19,370 E você pode olhar para cima como fazer isso. 853 00:42:19,370 --> 00:42:23,480 Mas se eu queria ficar fora Kittens.jpg do diretório pai, eu faria 854 00:42:23,480 --> 00:42:24,730 .. / Kittens.jpg. 855 00:42:24,730 --> 00:42:29,680 856 00:42:29,680 --> 00:42:30,930 É. 857 00:42:30,930 --> 00:42:32,960 858 00:42:32,960 --> 00:42:33,760 Desculpe. 859 00:42:33,760 --> 00:42:34,045 É. 860 00:42:34,045 --> 00:42:35,700 Oh homem, eu esqueci a pergunta. 861 00:42:35,700 --> 00:42:36,460 Qual foi a pergunta? 862 00:42:36,460 --> 00:42:39,570 Ah, a pergunta era é, Kittens.jpg Espera-se que estar no mesmo diretório? 863 00:42:39,570 --> 00:42:40,630 E, neste caso, é. 864 00:42:40,630 --> 00:42:44,030 Mas você também pode dar-lhe um certo caminho de tal modo que ele não tem que ser. 865 00:42:44,030 --> 00:42:47,100 866 00:42:47,100 --> 00:42:48,350 Bom? 867 00:42:48,350 --> 00:42:50,190 868 00:42:50,190 --> 00:42:51,350 >> CSS. 869 00:42:51,350 --> 00:42:55,420 Então, CSS, como HTML, não é uma linguagem de programação. 870 00:42:55,420 --> 00:42:58,250 CSS é apenas uma série de regras de estilo. 871 00:42:58,250 --> 00:43:00,130 Fica para Cascading Style Sheets. 872 00:43:00,130 --> 00:43:03,910 E você usá-lo em conjunto com HTML para páginas de estilo. 873 00:43:03,910 --> 00:43:08,140 Portanto, há três maneiras você pode incluí-lo. 874 00:43:08,140 --> 00:43:11,950 Uma maneira que você pode fazer é na cabeça parte do seu HTML, você pode apenas 875 00:43:11,950 --> 00:43:15,410 abrir uma marca de estilo e depois ficar algumas regras CSS lá. 876 00:43:15,410 --> 00:43:16,759 É muito OK. 877 00:43:16,759 --> 00:43:17,228 É. 878 00:43:17,228 --> 00:43:21,449 >> AUDIÊNCIA: Você poderia colocar aqueles marcas de estilo no meio, vamos 879 00:43:21,449 --> 00:43:22,860 digamos, corpo e / corpo. 880 00:43:22,860 --> 00:43:27,400 E então você seria styling só no corpo. 881 00:43:27,400 --> 00:43:28,840 >> ANGELA LI: Você poderia. 882 00:43:28,840 --> 00:43:29,590 Ele vai trabalhar. 883 00:43:29,590 --> 00:43:33,990 Mas você não deve, porque estilo é tipo de metadados que deve ir 884 00:43:33,990 --> 00:43:35,890 o chefe do seu documento. 885 00:43:35,890 --> 00:43:38,280 Corpo realmente deve conter apenas o que está realmente indo para 886 00:43:38,280 --> 00:43:39,420 aparecer na sua página. 887 00:43:39,420 --> 00:43:42,155 >> AUDIÊNCIA: Então você colocaria estilo em sua cabeça para o estilo do 888 00:43:42,155 --> 00:43:43,930 toda a página web, certo? 889 00:43:43,930 --> 00:43:44,300 >> ANGELA LI: Yeah. 890 00:43:44,300 --> 00:43:50,470 Então, colocar estilo aqui, essas regras CSS se aplicará a toda a página com base em 891 00:43:50,470 --> 00:43:52,100 seus seletores. 892 00:43:52,100 --> 00:43:57,090 Portanto, a melhor maneira de o fazer é, ao invés de ter uma marca de estilo em sua cabeça, 893 00:43:57,090 --> 00:44:00,430 você tem este link para um estilo externo folha como eu mostrei no 894 00:44:00,430 --> 00:44:01,980 exemplo anterior. 895 00:44:01,980 --> 00:44:05,920 O que isto significa é que tenta e encontra o arquivo style.css e, em seguida, puxa- 896 00:44:05,920 --> 00:44:08,470 e em que utiliza como o estilos para a página. 897 00:44:08,470 --> 00:44:10,500 E seu style.css faria basta olhar assim. 898 00:44:10,500 --> 00:44:13,330 Seria apenas um monte de CSS. 899 00:44:13,330 --> 00:44:16,210 >> E, finalmente, há uma outra maneira que você pode incluir CSS, o que você realmente 900 00:44:16,210 --> 00:44:17,480 não deve nunca fazer. 901 00:44:17,480 --> 00:44:18,950 É um estilo in-line chamada. 902 00:44:18,950 --> 00:44:22,650 E assim qualquer elemento HTML pode também tirar um atributo de estilo. 903 00:44:22,650 --> 00:44:26,320 E então, nesse atributo de estilo, você pode dar-lhe as regras de CSS. 904 00:44:26,320 --> 00:44:29,140 Portanto, neste caso, seja qual for div Estou definir bem aqui, ele vai 905 00:44:29,140 --> 00:44:32,580 tem um fundo preto e uma cor de texto branco. 906 00:44:32,580 --> 00:44:35,620 Mas você não deve fazer isso, porque o que isso é que coloca o seu estilo 907 00:44:35,620 --> 00:44:36,850 dentro do seu HTML. 908 00:44:36,850 --> 00:44:40,530 >> E eu sei que nós temos falado sobre HTML é estrutura e CSS é o estilo. 909 00:44:40,530 --> 00:44:42,790 Se você fizer isso, ele mistura los juntos. 910 00:44:42,790 --> 00:44:44,550 E não é muito limpo. 911 00:44:44,550 --> 00:44:45,800 Portanto, não faça isso. 912 00:44:45,800 --> 00:44:47,690 913 00:44:47,690 --> 00:44:52,100 Usando um exemplo de CSS, lá em cima, nós basta selecionar o corpo do HTML 914 00:44:52,100 --> 00:44:52,380 documentário. 915 00:44:52,380 --> 00:44:55,110 E nós somos como, tudo de vai ser Comic Sans. 916 00:44:55,110 --> 00:44:57,290 Eu também não recomendo isso. 917 00:44:57,290 --> 00:44:59,940 Mas você pode fazer isso. 918 00:44:59,940 --> 00:45:03,140 >> A segunda regra aqui, vai para selecionar o elemento no 919 00:45:03,140 --> 00:45:04,880 página com ID principal. 920 00:45:04,880 --> 00:45:11,690 Assim, qualquer elemento HTML, eu disse ID = Principal, eu vou dar um que 921 00:45:11,690 --> 00:45:16,020 Margem de 20 pixels e alinhar tudo, todo o texto, para o centro. 922 00:45:16,020 --> 00:45:19,030 A última coisa que escolhe por classe CSS. 923 00:45:19,030 --> 00:45:24,450 Assim, qualquer elemento na página que eu dei uma classe de seção, eu vou fazê-lo 924 00:45:24,450 --> 00:45:26,602 uma cor de fundo de luz azul. 925 00:45:26,602 --> 00:45:29,380 926 00:45:29,380 --> 00:45:30,040 Yep. 927 00:45:30,040 --> 00:45:30,700 Isso é tudo que eu tenho. 928 00:45:30,700 --> 00:45:30,890 Pergunta? 929 00:45:30,890 --> 00:45:34,020 >> AUDIÊNCIA: O que a hashtag antes principal fazer? 930 00:45:34,020 --> 00:45:36,310 >> ANGELA LI: A pergunta é, o que faz a hashtag antes afazeres principal? 931 00:45:36,310 --> 00:45:40,770 Neste caso, o hash CSS significa selecionar por ID. 932 00:45:40,770 --> 00:45:47,490 Então, se eu tinha algum elemento HTML, como divId = principais, esta regra CSS seleciona 933 00:45:47,490 --> 00:45:49,260 a coisa com ID principal. 934 00:45:49,260 --> 00:45:53,940 E de igual modo, o período em frente seção é selecionar por classe de CSS ou 935 00:45:53,940 --> 00:45:56,558 selecionar por classe de HTML. 936 00:45:56,558 --> 00:46:00,940 >> AUDIÊNCIA: Por que há um tem antes 6 em cor de fundo? 937 00:46:00,940 --> 00:46:01,270 >> ANGELA LI: Yeah. 938 00:46:01,270 --> 00:46:03,360 Então a questão é, por que há um hash antes do 6? 939 00:46:03,360 --> 00:46:05,320 Isto é diferente do que hash. 940 00:46:05,320 --> 00:46:09,500 Isto significa que você está dando uma cor hexadecimal. 941 00:46:09,500 --> 00:46:14,260 Assim, as cores hexadecimais, isso só representa uma cor. 942 00:46:14,260 --> 00:46:17,860 E você se lembra quando triplos RGB você fez o pset forense? 943 00:46:17,860 --> 00:46:18,770 Isto é semelhante. 944 00:46:18,770 --> 00:46:21,590 Os dois primeiros dígitos representam quanto vermelho é a cor. 945 00:46:21,590 --> 00:46:23,260 O segundo dois representam quanto verde. 946 00:46:23,260 --> 00:46:25,450 E o terceiro representa quanto azul. 947 00:46:25,450 --> 00:46:30,060 E o hash é que isso vai para representar uma cor. 948 00:46:30,060 --> 00:46:35,660 >> Assim, qualquer coisa desde 0, 0, 0, 0, 0, 0 -se a F, F, M, F, M, F é válido. 949 00:46:35,660 --> 00:46:39,550 É um pouco de cor válidos que podem ser apresentada pelo seu browser. 950 00:46:39,550 --> 00:46:39,790 Pergunta? 951 00:46:39,790 --> 00:46:43,590 >> AUDIÊNCIA: Qual é a diferença entre usando por ID e por classe? 952 00:46:43,590 --> 00:46:46,470 >> ANGELA LI: A pergunta é o que é a diferença entre 953 00:46:46,470 --> 00:46:48,950 usando por ID e classe? 954 00:46:48,950 --> 00:46:54,390 Você pode ter apenas um elemento de uma Documento HTML que tem um determinado ID. 955 00:46:54,390 --> 00:46:58,660 Assim, apenas uma coisa na minha página é permitido ter ID principal. 956 00:46:58,660 --> 00:47:02,580 Então você usá-lo para isso é o cabeçalho. 957 00:47:02,580 --> 00:47:03,850 Esta é a navegação. 958 00:47:03,850 --> 00:47:05,230 Este é o rodapé. 959 00:47:05,230 --> 00:47:09,070 Classes são diferentes, porque você pode aplicar aulas a tantos elementos HTML 960 00:47:09,070 --> 00:47:10,100 como você quer. 961 00:47:10,100 --> 00:47:15,860 >> Assim, por exemplo, eu fiz parte da classe, porque provavelmente há mais de um 962 00:47:15,860 --> 00:47:17,540 seção na minha página. 963 00:47:17,540 --> 00:47:20,200 Você só está autorizado a ter o maior número elementos na página com o mesmo 964 00:47:20,200 --> 00:47:23,190 classe, mas apenas uma com um certo ID. 965 00:47:23,190 --> 00:47:25,600 >> AUDIÊNCIA: Então, o ponto representa a classe? 966 00:47:25,600 --> 00:47:26,090 >> ANGELA LI: Yeah. 967 00:47:26,090 --> 00:47:27,380 Um ponto representa uma classe. 968 00:47:27,380 --> 00:47:29,990 969 00:47:29,990 --> 00:47:31,540 Legal. 970 00:47:31,540 --> 00:47:32,370 Isso é tudo que eu tenho, rapazes. 971 00:47:32,370 --> 00:47:33,544 Obrigado. 972 00:47:33,544 --> 00:48:13,380 >> [Aplausos] 973 00:48:13,380 --> 00:48:14,290 >> ZAMYLA CHAN: Oi, todo mundo. 974 00:48:14,290 --> 00:48:14,880 Estou Zamyla. 975 00:48:14,880 --> 00:48:18,830 Eu vou fazer a cobertura PHP, MVC, SQL e hoje. 976 00:48:18,830 --> 00:48:22,350 977 00:48:22,350 --> 00:48:26,110 Uma grande parte do material que eu vou estar cobertura vai ser muito bonito 978 00:48:26,110 --> 00:48:29,100 direito de pset7. 979 00:48:29,100 --> 00:48:29,700 Tudo bem. 980 00:48:29,700 --> 00:48:31,180 Então o que é PHP? 981 00:48:31,180 --> 00:48:35,150 PHP significa PHP Hypertext Preprocessor. 982 00:48:35,150 --> 00:48:38,740 Por isso, em si mesmo, é um recursiva nome, o que é muito legal. 983 00:48:38,740 --> 00:48:42,220 PHP é uma linguagem de script do lado do servidor, e fornece a infra-estrutura 984 00:48:42,220 --> 00:48:44,610 e os fundamentos lógicos do nosso site. 985 00:48:44,610 --> 00:48:48,520 >> Então, Angela falou muito sobre o HTML e CSS que fará com que a estrutura 986 00:48:48,520 --> 00:48:49,530 do site. 987 00:48:49,530 --> 00:48:53,210 Mas e se você quiser mudar isso conteúdo dinamicamente ou se ele varia 988 00:48:53,210 --> 00:48:55,240 com base no utilizador ou certas condições? 989 00:48:55,240 --> 00:48:57,060 É aí que vem dentro PHP 990 00:48:57,060 --> 00:49:02,610 Agora, normalmente, PHP pode levar alguns menos linhas para implementar a mesma coisa 991 00:49:02,610 --> 00:49:07,380 em C. Isso porque PHP lida com a memória gestão para o programador, 992 00:49:07,380 --> 00:49:11,170 ao contrário de nós ter que malloc livre, coisas desse tipo. 993 00:49:11,170 --> 00:49:15,430 >> Mas desde o PHP é uma interpretação linguagem, tipicamente, pode executar 994 00:49:15,430 --> 00:49:19,540 um pouco mais devagar do que C, a qual é uma linguagem compilada. 995 00:49:19,540 --> 00:49:23,150 Porque nós estamos movendo programação línguas, vamos olhar para a forma como o 996 00:49:23,150 --> 00:49:24,570 sintaxe será diferente. 997 00:49:24,570 --> 00:49:28,770 Vamos ter muito cuidado para não se confundem com isso. 998 00:49:28,770 --> 00:49:33,750 Então, com a sintaxe do PHP, se você é incorporação de seu PHP dentro de um HTML 999 00:49:33,750 --> 00:49:40,430 arquivo ou dentro de um arquivo php. si mesmo, você precisa colocar o código no aberto 1000 00:49:40,430 --> 00:49:45,270 PHP e as tags PHP fechados como seguinte, como na tela. 1001 00:49:45,270 --> 00:49:46,660 >> Variáveis ​​em PHP. 1002 00:49:46,660 --> 00:49:51,490 Cada variável única terá início com o sinal $, seguido do nome de 1003 00:49:51,490 --> 00:49:53,150 sua variável. 1004 00:49:53,150 --> 00:49:56,530 Agora, as variáveis ​​em PHP são vagamente digitado, o que significa que você não precisa 1005 00:49:56,530 --> 00:50:00,030 para indicar que o tipo de dados é quando você está declarando isso. 1006 00:50:00,030 --> 00:50:03,505 No entanto, isso não significa que eles não tem qualquer tipo de todo. 1007 00:50:03,505 --> 00:50:09,370 Então, se eu declarar uma variável e apenas definir ele igual a 1, e então eu declarar 1008 00:50:09,370 --> 00:50:15,140 outra variável, defina-o igual a "1", e, em seguida, um outro 1.0, bem como, 1009 00:50:15,140 --> 00:50:19,410 dependendo do tipo de igualdade operadores que eu uso, se eu quiser comparar 1010 00:50:19,410 --> 00:50:21,830 em todos os tipos, então eles vão ser iguais. 1011 00:50:21,830 --> 00:50:25,570 Mas se eu quero ter certeza de que o tipos são iguais, PHP ainda pode fazer 1012 00:50:25,570 --> 00:50:28,690 que, mesmo que não indicam que tipo é quando nós 1013 00:50:28,690 --> 00:50:31,170 primeiro fazer o arquivo. 1014 00:50:31,170 --> 00:50:33,990 >> Agora, em PHP, apesar de sermos comutação de programação 1015 00:50:33,990 --> 00:50:39,360 linguagens de C, ainda temos a nossa fiel se a condição, tal como este. 1016 00:50:39,360 --> 00:50:43,270 Nós ainda temos os nossos laços enquanto, apenas como este, onde você colocou no seu 1017 00:50:43,270 --> 00:50:47,300 condição e, em seguida, o corpo do ciclo. 1018 00:50:47,300 --> 00:50:50,360 E depois também temos o nosso loop for, que normalmente se parece com isso. 1019 00:50:50,360 --> 00:50:55,330 Então, se eu queria fazer uma iteração sobre todos Série de Exercícios nove e submeter e chamar um 1020 00:50:55,330 --> 00:50:58,960 submitPset função, então eu posso fazer isso aqui, o que vocês têm tudo 1021 00:50:58,960 --> 00:50:59,830 feito por este ponto. 1022 00:50:59,830 --> 00:51:01,080 Parabéns, pelo caminho. 1023 00:51:01,080 --> 00:51:04,560 1024 00:51:04,560 --> 00:51:07,550 >> Para a câmera, as pessoas disse, obrigado. 1025 00:51:07,550 --> 00:51:11,220 Agora, se você não quer apenas usar esse loop for, então o PHP na verdade também 1026 00:51:11,220 --> 00:51:13,580 tem coisas chamados loops foreach. 1027 00:51:13,580 --> 00:51:22,210 Então, se eu tivesse um array de inteiros, 0 a 8, armazenados nas Série de Exercícios matriz, 1028 00:51:22,210 --> 00:51:27,290 então eu poderia ter um loop foreach que itera sobre todos os números em Série de Exercícios. 1029 00:51:27,290 --> 00:51:30,640 E então eu poderia chamar o mesmo funcionar oito vezes, 1030 00:51:30,640 --> 00:51:31,910 assim como eu fiz antes. 1031 00:51:31,910 --> 00:51:36,480 Então, isso para cada circuito é bom, porque você não tem que se você não sabe 1032 00:51:36,480 --> 00:51:39,470 o comprimento exato da matriz que você ter, em seguida, usando esse loop foreach 1033 00:51:39,470 --> 00:51:42,800 vai cuidar disso para você. 1034 00:51:42,800 --> 00:51:45,410 >> Então eu fiz Série de Exercícios como uma matriz. 1035 00:51:45,410 --> 00:51:46,700 Vamos olhar para isso. 1036 00:51:46,700 --> 00:51:51,290 Arrays em PHP normalmente são as mesmas que os que temos em C, onde 1037 00:51:51,290 --> 00:51:52,960 você pode declarar um array. 1038 00:51:52,960 --> 00:51:59,200 E aqui, eu posso declarar uma matriz vazia e, em seguida, construir-se dinamicamente usando 1039 00:51:59,200 --> 00:52:00,850 índices como inteiros. 1040 00:52:00,850 --> 00:52:04,140 Assim, o índice 0, eu estou indo para armazenar um inteiro denominado 1. 1041 00:52:04,140 --> 00:52:09,210 No índice 1 da minha lista, eu vou para armazenar o valor de 2. 1042 00:52:09,210 --> 00:52:12,670 E no terceiro, mas o índice de segundo número, eu vou 1043 00:52:12,670 --> 00:52:14,870 armazenar o número 12. 1044 00:52:14,870 --> 00:52:17,250 >> Agora, isso é bom na medida em que funciona, funciona bem. 1045 00:52:17,250 --> 00:52:21,310 Mas dizer isso é importante para mim o que cada índice se mantém. 1046 00:52:21,310 --> 00:52:24,500 Para mim, o índice 0 significa o quão muitos gatos que tenho. 1047 00:52:24,500 --> 00:52:27,400 E o índice de 1 significa como muitas corujas que eu tenho. 1048 00:52:27,400 --> 00:52:29,450 E o próximo significa quantos cães. 1049 00:52:29,450 --> 00:52:34,140 Bem, então é para especificar que, em vez de ter de se lembrar 0 refere-se a 1050 00:52:34,140 --> 00:52:38,090 gatos e 1 a corujas, eu posso usar arrays associativos, o que significa que 1051 00:52:38,090 --> 00:52:42,260 em vez de inteiros como os meus índices, Eu posso realmente usar cordas. 1052 00:52:42,260 --> 00:52:43,290 >> Então, isso é bastante útil. 1053 00:52:43,290 --> 00:52:47,130 E você, basicamente, apenas substituído os inteiros com strings. 1054 00:52:47,130 --> 00:52:50,074 E aí você tem um array associativo. 1055 00:52:50,074 --> 00:52:51,930 É. 1056 00:52:51,930 --> 00:52:55,800 >> AUDIÊNCIA: Existe uma razão pela qual não há um sublinhado para o segundo 1057 00:52:55,800 --> 00:52:58,750 parte, porque a minha lista tem a matriz. 1058 00:52:58,750 --> 00:53:01,330 >> ZAMYLA CHAN: A questão foi, é Existe uma razão pela qual há uma 1059 00:53:01,330 --> 00:53:03,320 sublinhado entre meu e lista? 1060 00:53:03,320 --> 00:53:03,610 Não. 1061 00:53:03,610 --> 00:53:06,878 É assim que eu estou nomeando minha variável. 1062 00:53:06,878 --> 00:53:11,670 >> AUDIÊNCIA: No primeiro linha, é uma palavra. 1063 00:53:11,670 --> 00:53:12,560 >> ZAMYLA CHAN: As minhas desculpas. 1064 00:53:12,560 --> 00:53:13,410 Eu vou corrigir isso. 1065 00:53:13,410 --> 00:53:13,620 É. 1066 00:53:13,620 --> 00:53:15,460 Eles devem ser o mesmo nome da variável. 1067 00:53:15,460 --> 00:53:16,710 Boa captura. 1068 00:53:16,710 --> 00:53:19,640 1069 00:53:19,640 --> 00:53:19,950 OK. 1070 00:53:19,950 --> 00:53:22,610 Então, vamos seguir em frente para string concatenação. 1071 00:53:22,610 --> 00:53:27,500 Se eu quisesse tomar duas cordas, então eu posso concatenar-los 1072 00:53:27,500 --> 00:53:28,550 com o operador ponto. 1073 00:53:28,550 --> 00:53:32,440 Então, se eu tenho Milo como um primeiro nome Banana e como um último nome, então 1074 00:53:32,440 --> 00:53:35,430 concatenação com o operador ponto e em seguida, colocar um espaço entre 1075 00:53:35,430 --> 00:53:39,210 vai fazer uma seqüência que contém Milo Banana, o que eu posso then echo ou, 1076 00:53:39,210 --> 00:53:41,280 em vez disso, imprimir. 1077 00:53:41,280 --> 00:53:44,465 >> Falando de eco, vamos falar sobre alguns útil - 1078 00:53:44,465 --> 00:53:44,920 oops. 1079 00:53:44,920 --> 00:53:46,030 Sinto muito. 1080 00:53:46,030 --> 00:53:52,920 Algumas funções PHP úteis. 1081 00:53:52,920 --> 00:53:56,240 Portanto, temos a - 1082 00:53:56,240 --> 00:53:57,444 dificuldades técnicas. 1083 00:53:57,444 --> 00:53:58,694 Um segundo. 1084 00:53:58,694 --> 00:54:16,960 1085 00:54:16,960 --> 00:54:19,550 A enviei. 1086 00:54:19,550 --> 00:54:22,320 Problemas do PowerPoint. 1087 00:54:22,320 --> 00:54:29,200 E estamos de volta com funções PHP. 1088 00:54:29,200 --> 00:54:32,010 1089 00:54:32,010 --> 00:54:35,150 E estamos de volta com funções PHP. 1090 00:54:35,150 --> 00:54:39,890 >> Portanto, temos a função de exigir, quando se você passar em um arquivo, aqui está é apenas 1091 00:54:39,890 --> 00:54:43,300 um exemplo de um arquivo que Eu poderia passar dentro 1092 00:54:43,300 --> 00:54:47,605 Então, que irá incluir o código PHP a partir desse arquivo que eu indicar. 1093 00:54:47,605 --> 00:54:49,940 E vai avaliar que dentro 1094 00:54:49,940 --> 00:54:54,450 Então, nós também temos o eco, o que é um paralelo para printf. 1095 00:54:54,450 --> 00:54:57,710 Exit é um paralelo de quebrar, que sai do bloco de 1096 00:54:57,710 --> 00:54:58,570 código que você está dentro 1097 00:54:58,570 --> 00:55:03,180 E, em seguida, verifica vazios se uma determinada variável é como nulo ou zero ou 1098 00:55:03,180 --> 00:55:08,482 tudo o que é equiparado a ser vazio. 1099 00:55:08,482 --> 00:55:09,438 É. 1100 00:55:09,438 --> 00:55:15,341 >> AUDIÊNCIA: Para a concatenação operador ponto um, em PHP, é que o 1101 00:55:15,341 --> 00:55:20,158 mesmo que em JavaScript onde ele está usando o ponto para concatenação significa mais? 1102 00:55:20,158 --> 00:55:27,440 Assim, o nome completo, você poderia ter dólar primeiro sinal + e, em seguida, + durar? 1103 00:55:27,440 --> 00:55:27,720 >> ZAMYLA CHAN: Yeah. 1104 00:55:27,720 --> 00:55:32,150 Portanto, a questão era saber se no PHP nós pode usar a mesma concatenação 1105 00:55:32,150 --> 00:55:33,890 como em JavaScript com as vantagens. 1106 00:55:33,890 --> 00:55:35,410 E José vai entrar nisso mais tarde. 1107 00:55:35,410 --> 00:55:36,620 Eu acho que ele tem um slide sobre isso. 1108 00:55:36,620 --> 00:55:37,570 Na verdade, é diferente. 1109 00:55:37,570 --> 00:55:41,310 Assim, em JavaScript, você precisa usar a mais para concatenar strings. 1110 00:55:41,310 --> 00:55:43,280 E em PHP, você tem que usar o operador ponto. 1111 00:55:43,280 --> 00:55:44,530 Então, eles são diferentes. 1112 00:55:44,530 --> 00:55:46,680 1113 00:55:46,680 --> 00:55:46,910 >> OK. 1114 00:55:46,910 --> 00:55:49,500 Portanto, agora que nós cobrimos tudo este PHP, onde faz 1115 00:55:49,500 --> 00:55:50,490 realmente vir a calhar? 1116 00:55:50,490 --> 00:55:54,470 Bem, ele vem a calhar quando nós pode combiná-lo com o nosso HTML. 1117 00:55:54,470 --> 00:55:59,550 Assim, o nosso PHP nos dará o poder de alterar o conteúdo HTML de uma página antes de 1118 00:55:59,550 --> 00:56:00,000 seu carregamento. 1119 00:56:00,000 --> 00:56:04,270 Assim, com base em diferentes condições, geralmente o usuário específico que é 1120 00:56:04,270 --> 00:56:07,520 logado, podemos mostrar informações diferentes. 1121 00:56:07,520 --> 00:56:08,800 Linda, você tem uma pergunta? 1122 00:56:08,800 --> 00:56:15,510 >> AUDIÊNCIA: Você pode concatenar um inteiro também? 1123 00:56:15,510 --> 00:56:16,760 >> ZAMYLA CHAN: Sim, você pode. 1124 00:56:16,760 --> 00:56:19,530 1125 00:56:19,530 --> 00:56:23,270 Portanto, a questão era se você puder concatenar inteiros ou outra 1126 00:56:23,270 --> 00:56:28,920 variable.s agora, passamos para MVC, que é um paradigma que foi utilizado em 1127 00:56:28,920 --> 00:56:33,380 pset7 e um monte de web designers usam para organizar o código nos arquivos 1128 00:56:33,380 --> 00:56:34,490 em seu site. 1129 00:56:34,490 --> 00:56:35,870 M significa Model. 1130 00:56:35,870 --> 00:56:41,450 E, basicamente, arquivos de modelo tratará com interações com o banco de dados. 1131 00:56:41,450 --> 00:56:44,640 Ver arquivos, eles se relacionam com o estética do website. 1132 00:56:44,640 --> 00:56:47,550 E as alças Controlador solicitações dos usuários, analisa 1133 00:56:47,550 --> 00:56:49,230 dados, faz outra lógica. 1134 00:56:49,230 --> 00:56:52,520 >> Em pset7, combinamos o modelo eo controlador. 1135 00:56:52,520 --> 00:56:55,880 E nós só chamou os controladores e colocá-los no diretório público. 1136 00:56:55,880 --> 00:57:01,730 E os arquivos de visão, podemos usá-los como modelos no diretório de modelos. 1137 00:57:01,730 --> 00:57:07,260 Portanto, este diagrama aqui representa também o mesmo tipo de divisão com o 1138 00:57:07,260 --> 00:57:10,510 modelo eo controlador em roxo aqui no lado esquerdo e 1139 00:57:10,510 --> 00:57:12,770 o ponto de vista do lado direito. 1140 00:57:12,770 --> 00:57:16,020 Portanto, este é um esquema que alguns de vocês pode ter visto no horário de expediente ou 1141 00:57:16,020 --> 00:57:19,130 diagramas que estávamos desenho como você foram descobrir seu pset. 1142 00:57:19,130 --> 00:57:25,030 >> Então, aqui, em um determinado controlador, um modelo controlador, que têm funções 1143 00:57:25,030 --> 00:57:30,490 que se relacionam com a consulta SQL banco de dados, a execução de lógica PHP. 1144 00:57:30,490 --> 00:57:32,370 Talvez você olhar para cima um estoque no Yahoo! 1145 00:57:32,370 --> 00:57:34,590 Finanças. 1146 00:57:34,590 --> 00:57:37,390 Ou talvez, você teria apenas que verificar para ver se o usuário tinha apresentado um 1147 00:57:37,390 --> 00:57:40,250 formar já antes de ter visitou sua página. 1148 00:57:40,250 --> 00:57:43,390 E então você tornaria Uma forma aqui. 1149 00:57:43,390 --> 00:57:48,210 Depois que a forma tinha sido apresentado pelo usuário, a ação que foi 1150 00:57:48,210 --> 00:57:53,470 especificada na tag HTML do formulário indicaria a página que 1151 00:57:53,470 --> 00:57:55,620 retorna os dados para. 1152 00:57:55,620 --> 00:57:59,460 >> Então, toda essa informação seria enviado de volta para seu controlador. 1153 00:57:59,460 --> 00:58:02,620 Então você provavelmente faria um pouco mais lógica em que e talvez executar alguns 1154 00:58:02,620 --> 00:58:06,510 mais consultas no banco de dados SQL e então, finalmente, chegar a um bem 1155 00:58:06,510 --> 00:58:11,930 set repleto de informações que você faria passar em algum outro modelo 1156 00:58:11,930 --> 00:58:13,950 que exibia essa informação. 1157 00:58:13,950 --> 00:58:17,030 Agora, como é que vamos realmente embalar que as informações acima? 1158 00:58:17,030 --> 00:58:23,980 Bem, nós temos uma função chamada de renderização que estava no arquivo functions.php em 1159 00:58:23,980 --> 00:58:29,950 pset7, onde você passar o nome de um ficheiro, o nome de um modelo. 1160 00:58:29,950 --> 00:58:32,160 >> E então você também passar em uma matriz associativa. 1161 00:58:32,160 --> 00:58:37,150 E assim que a matriz associativa representa a informação diferente 1162 00:58:37,150 --> 00:58:39,040 que você quer passar dentro 1163 00:58:39,040 --> 00:58:43,460 Agora, o que vai ser constante em Nestes exemplos é que as teclas ou, 1164 00:58:43,460 --> 00:58:47,070 em vez disso, as chaves do associativo matrizes, essas são o que vai ser 1165 00:58:47,070 --> 00:58:51,050 Espera-se ser constante pelo modelo, porque ele sabe que precisa 1166 00:58:51,050 --> 00:58:53,990 algo chamado mensagem ou chamado nome. 1167 00:58:53,990 --> 00:58:56,940 E então as coisas do lado direito, o valores reais, portanto, neste caso, quem é 1168 00:58:56,940 --> 00:59:00,750 um bom menino e Milo, aqueles vão ser os valores que estão mudando 1169 00:59:00,750 --> 00:59:05,610 que o controlador muda a cada vez ou com base em uma determinada condição e 1170 00:59:05,610 --> 00:59:07,120 que passará dentro 1171 00:59:07,120 --> 00:59:12,790 >> Então, aqui em modelos, vemos que está usando caracteres especiais em HTML, 1172 00:59:12,790 --> 00:59:16,370 o que só significa basicamente que nós queremos para obter a seqüência de pares que a 1173 00:59:16,370 --> 00:59:17,580 usuário colocar dentro 1174 00:59:17,580 --> 00:59:20,880 E queremos substituir mensagem lá. 1175 00:59:20,880 --> 00:59:26,110 Então quando nós realmente ver o arquivo, o específico 1176 00:59:26,110 --> 00:59:28,700 informação é passada dentro 1177 00:59:28,700 --> 00:59:33,850 Note-se que a chave de como tornar os trabalhos é que as chaves do associativo 1178 00:59:33,850 --> 00:59:37,170 matrizes, as variáveis ​​se tornam nomes aqui. 1179 00:59:37,170 --> 00:59:40,720 E assim os valores de chave, que na matriz associativa torna-se então o 1180 00:59:40,720 --> 00:59:41,970 valor da variável. 1181 00:59:41,970 --> 00:59:44,800 1182 00:59:44,800 --> 00:59:46,040 >> Agora, vamos passar para SQL. 1183 00:59:46,040 --> 00:59:48,010 Fica para Structured Query Language. 1184 00:59:48,010 --> 00:59:50,460 E assim, esta é apenas uma programação linguagem projetada 1185 00:59:50,460 --> 00:59:51,880 para o gerenciamento de bancos de dados. 1186 00:59:51,880 --> 00:59:56,860 E veio a calhar para nós nosso site finanças pset7. 1187 00:59:56,860 --> 01:00:00,510 Essencialmente, é apenas uma maneira fácil de controlar e gerenciar objetos e tabelas 1188 01:00:00,510 --> 01:00:02,070 e ligá-los entre si. 1189 01:00:02,070 --> 01:00:06,860 Agora, pense em seu banco de dados SQL basicamente como um arquivo do Excel, talvez, 1190 01:00:06,860 --> 01:00:10,040 com várias folhas com guias. 1191 01:00:10,040 --> 01:00:13,820 >> Assim, você poderá ter várias tabelas, talvez, que foi ligado a um outro. 1192 01:00:13,820 --> 01:00:19,420 E muito parecido com o Excel, temos um monte de a funcionalidade que nós queremos. 1193 01:00:19,420 --> 01:00:22,300 Por exemplo, podemos selecionar determinadas linhas. 1194 01:00:22,300 --> 01:00:24,110 Podemos inserir informações. 1195 01:00:24,110 --> 01:00:25,560 Podemos atualizar linhas. 1196 01:00:25,560 --> 01:00:27,440 E nós também pode excluir as coisas. 1197 01:00:27,440 --> 01:00:30,920 1198 01:00:30,920 --> 01:00:36,560 >> O SQL selecionar trabalhos de seleção de linhas ou uma fileira de colunas especificadas de uma 1199 01:00:36,560 --> 01:00:39,640 de banco de dados que correspondem a um determinado critérios que você indicar. 1200 01:00:39,640 --> 01:00:44,930 Então aqui quando vejo select * from bruxos onde a casa = Corvinal, então 1201 01:00:44,930 --> 01:00:48,340 Estou selecionando *, o que significa que eu sou selecionar cada coluna única em que 1202 01:00:48,340 --> 01:00:56,340 linha da tabela assistentes, mas somente se a coluna é igual a casa Corvinal. 1203 01:00:56,340 --> 01:00:57,840 Agora, isso é pura ou SQL. 1204 01:00:57,840 --> 01:01:02,680 Então, se eu fui para o phpMyAdmin, que é a forma específica que usamos para gerenciar 1205 01:01:02,680 --> 01:01:07,040 nossos bancos de dados SQL, então eu poderia inserir que no site do phpMyAdmin. 1206 01:01:07,040 --> 01:01:08,290 E isso seria executado. 1207 01:01:08,290 --> 01:01:11,280 >> Mas nós realmente queremos fazer que no lado do PHP. 1208 01:01:11,280 --> 01:01:12,580 Então, como vamos fazer isso? 1209 01:01:12,580 --> 01:01:20,180 Bem, nós usamos a função de consulta, que basicamente executa a consulta SQL. 1210 01:01:20,180 --> 01:01:21,830 Usando? 1211 01:01:21,830 --> 01:01:25,850 como um espaço reservado, podemos passar em certos valores para a nossa cadeia que nós 1212 01:01:25,850 --> 01:01:26,920 deseja substituir. 1213 01:01:26,920 --> 01:01:32,110 Por isso, talvez eu estou armazenando diferente valores na curr_house, que 1214 01:01:32,110 --> 01:01:34,400 representa a casa atual que eu estou passando. 1215 01:01:34,400 --> 01:01:39,040 Então, eu posso passar isso como um espaço reservado com o ponto de interrogação. 1216 01:01:39,040 --> 01:01:43,290 E então eu vou basicamente executar o mesma coisa que eu fiz antes, com exceção 1217 01:01:43,290 --> 01:01:45,550 agora, estou em PHP. 1218 01:01:45,550 --> 01:01:51,300 >> E consulta retornará um array associativo. 1219 01:01:51,300 --> 01:01:53,470 E eu vou guardá-lo em linhas. 1220 01:01:53,470 --> 01:01:56,880 Agora, a consulta pode sempre falhar. 1221 01:01:56,880 --> 01:02:02,870 Talvez a consulta SQL não pôde executar porque não existe a tabela. 1222 01:02:02,870 --> 01:02:04,310 Ou talvez, a coluna não existe. 1223 01:02:04,310 --> 01:02:05,400 Algo deu errado. 1224 01:02:05,400 --> 01:02:08,170 Bem, nesse caso, você vai querer fazer Certifique-se que você verifique se o 1225 01:02:08,170 --> 01:02:09,700 consulta retornou falso. 1226 01:02:09,700 --> 01:02:15,590 E isso é usando o triplo é igual a operação não. 1227 01:02:15,590 --> 01:02:19,660 >> E então eu me desculpo, que é outra Função CS50, passando uma mensagem. 1228 01:02:19,660 --> 01:02:23,435 E se você olhar para pedir desculpas, tudo o que realmente faz é tornar apology.php. 1229 01:02:23,435 --> 01:02:26,100 1230 01:02:26,100 --> 01:02:26,410 É. 1231 01:02:26,410 --> 01:02:29,630 >> AUDIÊNCIA: Você poderia explicar o que é que estrela faz entre seleção e de? 1232 01:02:29,630 --> 01:02:30,710 >> ZAMYLA CHAN: Sim, absolutamente. 1233 01:02:30,710 --> 01:02:35,220 Então, a estrela no meio de seleção e de significa que eu quero selecionar o conjunto 1234 01:02:35,220 --> 01:02:37,440 linha inteira da minha mesa. 1235 01:02:37,440 --> 01:02:41,900 Eu poderia ter indicado selecione nome, ano, casa. 1236 01:02:41,900 --> 01:02:46,160 E eu só iria pegar esses três colunas na minha mesa. 1237 01:02:46,160 --> 01:02:51,560 Mas se eu disser select *, então eu vou ter tudo nessa coluna. 1238 01:02:51,560 --> 01:02:53,760 Então eu vou te na parte de trás primeiro. 1239 01:02:53,760 --> 01:02:57,656 >> AUDIÊNCIA: Então, isso ainda é em SQL, certo? 1240 01:02:57,656 --> 01:02:59,610 É esta consulta ou isso é PHP? 1241 01:02:59,610 --> 01:03:00,550 >> ZAMYLA CHAN: Estamos em uma consulta. 1242 01:03:00,550 --> 01:03:01,940 Portanto, esta é em PHP. 1243 01:03:01,940 --> 01:03:06,280 Então, usando a consulta função PHP, estamos executando uma consulta SQL. 1244 01:03:06,280 --> 01:03:11,988 1245 01:03:11,988 --> 01:03:15,364 >> AUDIÊNCIA: É algo em SQL maiúsculas e minúsculas, como selecionar 1246 01:03:15,364 --> 01:03:17,834 ou assistentes ou casa? 1247 01:03:17,834 --> 01:03:20,050 >> ZAMYLA CHAN: É qualquer coisa em SQL maiúsculas de minúsculas? 1248 01:03:20,050 --> 01:03:21,760 Eu acredito que sim. 1249 01:03:21,760 --> 01:03:24,620 Acredito que SELECT e DO E onde estão maiúsculas de minúsculas. 1250 01:03:24,620 --> 01:03:25,535 Não? 1251 01:03:25,535 --> 01:03:27,500 >> ROB BOWDEN: Então, é o oposto. 1252 01:03:27,500 --> 01:03:32,030 Os nomes das colunas e os meios de mesa, todos esses são case-sensitive. 1253 01:03:32,030 --> 01:03:35,470 Mas qualquer uma das principais palavras do MySQL, como SELECT, FROM e WHERE, aqueles que não são 1254 01:03:35,470 --> 01:03:36,140 maiúsculas de minúsculas. 1255 01:03:36,140 --> 01:03:36,420 OK. 1256 01:03:36,420 --> 01:03:37,780 Assim, o oposto do que eu disse. 1257 01:03:37,780 --> 01:03:40,420 Assim, todas as palavras-chave do MySQL - 1258 01:03:40,420 --> 01:03:42,670 selecionar, a partir de onde - aqueles não são case-sensitive. 1259 01:03:42,670 --> 01:03:44,630 Mas tudo o resto é. 1260 01:03:44,630 --> 01:03:45,210 OK. 1261 01:03:45,210 --> 01:03:46,500 Você na frente. 1262 01:03:46,500 --> 01:03:52,041 >> AUDIÊNCIA: Se eu tenho R $ linhas em termos de mais de uma linha, isso significa que é 1263 01:03:52,041 --> 01:03:53,640 só se torna uma matriz associativa? 1264 01:03:53,640 --> 01:03:59,550 >> ZAMYLA CHAN: Então, a questão era se as linhas tem mais de uma linha em que, se 1265 01:03:59,550 --> 01:04:01,800 se torna uma matriz associativa? 1266 01:04:01,800 --> 01:04:05,680 Por isso, é um conjunto de associativo matrizes já. 1267 01:04:05,680 --> 01:04:10,730 Assim, mesmo se houver apenas uma linha voltou, então você tem que ir para 1268 01:04:10,730 --> 01:04:12,690 0 índice de que resultam. 1269 01:04:12,690 --> 01:04:15,316 E então você tem que primeira linha. 1270 01:04:15,316 --> 01:04:17,482 Sim, Belinda? 1271 01:04:17,482 --> 01:04:21,258 >> AUDIÊNCIA: Quando você usa ===, é este o único exemplo? 1272 01:04:21,258 --> 01:04:22,210 Ou existem outros? 1273 01:04:22,210 --> 01:04:26,815 >> ZAMYLA CHAN: Então, neste caso, === é uma comparação entre os tipos. 1274 01:04:26,815 --> 01:04:29,870 1275 01:04:29,870 --> 01:04:34,050 Desculpe. === É um comparador que compara os tipos. 1276 01:04:34,050 --> 01:04:37,620 E então == compara em todos os tipos. 1277 01:04:37,620 --> 01:04:41,620 >> AUDIÊNCIA: Você pode explicar o que linhas é nesta situação? 1278 01:04:41,620 --> 01:04:45,120 É linha de dados? 1279 01:04:45,120 --> 01:04:48,100 >> ZAMYLA CHAN: No próximo slide, eu sou vai explicar o que é linhas. 1280 01:04:48,100 --> 01:04:49,890 Então, se você não se importa segurando fora disso. 1281 01:04:49,890 --> 01:04:50,620 E então você pelas costas? 1282 01:04:50,620 --> 01:04:54,699 >> AUDIÊNCIA: Para funções como consulta, prestar e pedir desculpas [inaudível]? 1283 01:04:54,699 --> 01:04:59,050 1284 01:04:59,050 --> 01:05:03,050 >> ZAMYLA CHAN: A questão era se estas funções - consulta, pedir desculpas, 1285 01:05:03,050 --> 01:05:04,510 e render - 1286 01:05:04,510 --> 01:05:05,930 são comuns em PHP. 1287 01:05:05,930 --> 01:05:09,460 Estes são os que CS50 escreveu para pset7. 1288 01:05:09,460 --> 01:05:09,910 E Jay? 1289 01:05:09,910 --> 01:05:15,333 >> AUDIÊNCIA: Quando você precisa dizer $ _SESSION, É que apenas para IDs? 1290 01:05:15,333 --> 01:05:17,310 Ou você poderia ter dito isso aqui? 1291 01:05:17,310 --> 01:05:23,440 >> ZAMYLA CHAN: Então, a pergunta era, quando usamos $ _SESSION, que foi de algum 1292 01:05:23,440 --> 01:05:25,290 variável global que estamos usando. 1293 01:05:25,290 --> 01:05:32,080 Aqui esta variável vai ser local para a nossa função. 1294 01:05:32,080 --> 01:05:36,588 Então, estamos apenas declarando uma nova variável. 1295 01:05:36,588 --> 01:05:38,460 >> AUDIÊNCIA: Como pedir desculpas implementado? 1296 01:05:38,460 --> 01:05:40,960 >> ZAMYLA CHAN: A pergunta era: como é pedir desculpas implementado? 1297 01:05:40,960 --> 01:05:44,180 E eu acho que isso é realmente uma bonita boas práticas para vocês para entrar em 1298 01:05:44,180 --> 01:05:49,260 a seção functions.php e olhar para pedir desculpas e ver como você poderia ter 1299 01:05:49,260 --> 01:05:50,670 feito isso sozinho. 1300 01:05:50,670 --> 01:05:55,620 Assim eu posso deixar isso para você, mas apenas dizer que, se você olhar para pedir desculpas, 1301 01:05:55,620 --> 01:06:02,110 em seguida, leva a mensagem que você submetidos a pedir desculpas, e então ele 1302 01:06:02,110 --> 01:06:06,570 torna essa mensagem. 1303 01:06:06,570 --> 01:06:08,240 Mais alguma pergunta? 1304 01:06:08,240 --> 01:06:08,710 Eu amo perguntas. 1305 01:06:08,710 --> 01:06:09,555 Assim, mantê-los próximos. 1306 01:06:09,555 --> 01:06:11,888 >> AUDIÊNCIA: [inaudível] 1307 01:06:11,888 --> 01:06:13,840 echo ou print lá? 1308 01:06:13,840 --> 01:06:15,900 >> ZAMYLA CHAN: A pergunta era: não poderíamos simplesmente ter colocado 1309 01:06:15,900 --> 01:06:17,000 echo ou print lá. 1310 01:06:17,000 --> 01:06:19,710 Assim que teria feito algo ligeiramente diferente. 1311 01:06:19,710 --> 01:06:23,750 Isso teria impresso consulta Falha em que - 1312 01:06:23,750 --> 01:06:27,420 Bem, agora, estamos na verdade em nosso controller. 1313 01:06:27,420 --> 01:06:30,350 Então, nós realmente não têm HTML criado aqui. 1314 01:06:30,350 --> 01:06:34,946 Apologize tornando apologize.php na verdade redireciona para apology.php. 1315 01:06:34,946 --> 01:06:39,560 1316 01:06:39,560 --> 01:06:42,200 OK. 1317 01:06:42,200 --> 01:06:45,880 >> Então, agora, vamos continuar a abordar a questão de mais cedo sobre o que 1318 01:06:45,880 --> 01:06:47,330 é realmente linhas. 1319 01:06:47,330 --> 01:06:51,960 Bem, consulta retornará uma matriz de linhas. 1320 01:06:51,960 --> 01:06:55,020 E cada linha é representada por uma matriz associativa. 1321 01:06:55,020 --> 01:07:02,840 Então, se eu tiver executado alguma consulta SQL e Eu tenho guardado o resultado em linhas, em seguida, 1322 01:07:02,840 --> 01:07:07,850 usando um loop foreach, a matriz nome é o primeiro a chegar - linhas. 1323 01:07:07,850 --> 01:07:13,170 E então eu vou chamar cada linha em que $ row. 1324 01:07:13,170 --> 01:07:20,060 >> Então iteração sobre isso, então eu posso acessar coluna o nome da linha dado, 1325 01:07:20,060 --> 01:07:22,340 coluna do ano, ea casa da coluna. 1326 01:07:22,340 --> 01:07:28,010 Note que eu não teria sido capaz de fazer isso com linhas, porque o índice linhas 1327 01:07:28,010 --> 01:07:29,290 nome não existe. 1328 01:07:29,290 --> 01:07:31,970 Linhas é apenas um conjunto de arrays associativos. 1329 01:07:31,970 --> 01:07:34,870 Então você tem dois níveis de lá. 1330 01:07:34,870 --> 01:07:37,170 Depois de ter a matriz de linhas, você tem que entrar nisso. 1331 01:07:37,170 --> 01:07:39,110 E então você pode acessar as colunas. 1332 01:07:39,110 --> 01:07:41,636 Será que isso deixar claro? 1333 01:07:41,636 --> 01:07:42,520 Sim, em frente? 1334 01:07:42,520 --> 01:07:45,490 >> AUDIÊNCIA: [inaudível] abrir suportes para [inaudível]? 1335 01:07:45,490 --> 01:07:46,220 >> ZAMYLA CHAN: Perdoe-me? 1336 01:07:46,220 --> 01:07:49,740 >> AUDIÊNCIA: Os colchetes abertos. 1337 01:07:49,740 --> 01:07:52,420 >> ZAMYLA CHAN: Estes aqui? 1338 01:07:52,420 --> 01:07:58,520 Isso é que me permite incluir essa variável. 1339 01:07:58,520 --> 01:07:58,670 É. 1340 01:07:58,670 --> 01:08:01,900 >> AUDIÊNCIA: Ao imprimir, é você imprimir o código HTML? 1341 01:08:01,900 --> 01:08:03,110 >> ZAMYLA CHAN: sim. 1342 01:08:03,110 --> 01:08:07,720 Quando imprimo, este aqui é dentro meu modelo agora, para 1343 01:08:07,720 --> 01:08:10,310 meu ponto de vista do método de MVC. 1344 01:08:10,310 --> 01:08:12,750 Então, eu estou imprimindo no HTML. 1345 01:08:12,750 --> 01:08:16,670 >> AUDIÊNCIA: Então se fomos para desenvolvedor ferramentas após a execução deste, poderíamos 1346 01:08:16,670 --> 01:08:17,160 que, na verdade, em código? 1347 01:08:17,160 --> 01:08:18,410 >> ZAMYLA CHAN: Isso é uma grande pergunta, sim. 1348 01:08:18,410 --> 01:08:22,359 Então, se você foi para as ferramentas de desenvolvimento no Firefox usando Firebug ou 1349 01:08:22,359 --> 01:08:26,109 Chrome, então sim, você poderia ver o HTML específico. 1350 01:08:26,109 --> 01:08:28,470 Por isso, não iria mostrar $ linha ["Nome"]. 1351 01:08:28,470 --> 01:08:32,524 Ele iria mostrar o que nome é nessa linha. 1352 01:08:32,524 --> 01:08:36,268 >> AUDIÊNCIA: Apenas uma questão geral, o que são tr e td definido como? 1353 01:08:36,268 --> 01:08:37,672 Por que nós [inaudível]? 1354 01:08:37,672 --> 01:08:41,850 1355 01:08:41,850 --> 01:08:44,814 >> ZAMYLA CHAN: tr linha da tabela, mesa depois de td coluna. 1356 01:08:44,814 --> 01:08:48,060 1357 01:08:48,060 --> 01:08:49,310 OK. 1358 01:08:49,310 --> 01:08:55,771 1359 01:08:55,771 --> 01:08:56,835 >> AUDIÊNCIA: Sim, é os dados da tabela. 1360 01:08:56,835 --> 01:08:58,770 >> ZAMYLA CHAN: dados da tabela. 1361 01:08:58,770 --> 01:08:59,894 É. 1362 01:08:59,894 --> 01:09:08,670 >> AUDIÊNCIA: É uma linha em que o linha é tratada como uma coluna? 1363 01:09:08,670 --> 01:09:08,910 >> ZAMYLA CHAN: Desculpe. 1364 01:09:08,910 --> 01:09:10,570 Você pode repetir? 1365 01:09:10,570 --> 01:09:14,450 >> AUDIÊNCIA: Como você visualizar linhas? 1366 01:09:14,450 --> 01:09:16,310 >> ZAMYLA CHAN: Como você visualize linhas em que tipo de forma? 1367 01:09:16,310 --> 01:09:21,796 Você está falando sobre estes linhas aqui ou as linhas de tr? 1368 01:09:21,796 --> 01:09:22,630 >> AUDIÊNCIA: As linhas. 1369 01:09:22,630 --> 01:09:25,229 >> ZAMYLA CHAN: Essas linhas aqui? 1370 01:09:25,229 --> 01:09:28,620 Eu visualizar isso como Eu executar a minha consulta. 1371 01:09:28,620 --> 01:09:38,729 E diz, OK, eu tenho ou 0 a n quantidade de linhas que correspondem aos critérios 1372 01:09:38,729 --> 01:09:40,510 que você tinha consultado. 1373 01:09:40,510 --> 01:09:43,740 Então, eu tenho um número de linhas. 1374 01:09:43,740 --> 01:09:51,450 Assim, as linhas, as linhas $, lojas de cada uma dessas linhas em um array. 1375 01:09:51,450 --> 01:09:58,110 Assim, mesmo que seja apenas um deles, é ainda um conjunto de linhas que combinem com ele. 1376 01:09:58,110 --> 01:10:03,010 >> Então, por exemplo, este é semelhante a quando você buscada 1377 01:10:03,010 --> 01:10:05,390 o cache dos usuários. 1378 01:10:05,390 --> 01:10:10,810 E os critérios de lá era o lugar onde ID é igual a ID da sessão. 1379 01:10:10,810 --> 01:10:14,250 Realmente é apenas uma linha que poderia corresponder. 1380 01:10:14,250 --> 01:10:18,960 Mas ainda linhas de voltar uma linha. 1381 01:10:18,960 --> 01:10:22,620 Então você teria que ir para linhas, índice 0, cache de índice para 1382 01:10:22,620 --> 01:10:26,195 realmente chegar ao seu cache. 1383 01:10:26,195 --> 01:10:29,650 >> AUDIÊNCIA: É a função de impressão em eco a mesma coisa? 1384 01:10:29,650 --> 01:10:30,670 >> ZAMYLA CHAN: sim. 1385 01:10:30,670 --> 01:10:31,190 Sim. 1386 01:10:31,190 --> 01:10:33,304 Imprimir um eco da mesma. 1387 01:10:33,304 --> 01:10:42,400 >> AUDIÊNCIA: É o loop foreach o única forma de índice em linhas? 1388 01:10:42,400 --> 01:10:46,110 >> ZAMYLA CHAN: É um loop foreach a única maneira que você pode 1389 01:10:46,110 --> 01:10:47,030 iterar através de linhas? 1390 01:10:47,030 --> 01:10:47,180 Não. 1391 01:10:47,180 --> 01:10:51,000 Você também pode usar um loop for, desde que você sabe que o comprimento 1392 01:10:51,000 --> 01:10:53,024 de série da linha. 1393 01:10:53,024 --> 01:10:58,500 >> AUDIÊNCIA: Você poderia acessá-lo usando uma linha como [inaudível]? 1394 01:10:58,500 --> 01:11:01,640 >> ZAMYLA CHAN: Então você não pode acessá-lo apenas usando linha se você não tem um 1395 01:11:01,640 --> 01:11:05,160 loop foreach, desde que você não declarou linha. 1396 01:11:05,160 --> 01:11:08,150 1397 01:11:08,150 --> 01:11:09,660 Sim. 1398 01:11:09,660 --> 01:11:10,810 Sim, no branco. 1399 01:11:10,810 --> 01:11:13,990 >> AUDIÊNCIA: Então o que tr e td fazer? 1400 01:11:13,990 --> 01:11:16,790 >> ZAMYLA CHAN: Então e tr td são tags HTML. 1401 01:11:16,790 --> 01:11:19,590 tr indica o início de uma linha da tabela. 1402 01:11:19,590 --> 01:11:26,625 E cada um indica um td nova coluna de dados da tabela. 1403 01:11:26,625 --> 01:11:32,275 >> AUDIÊNCIA: Para um visual do que uma linha é como, apenas imaginar o SQL, como 1404 01:11:32,275 --> 01:11:33,510 eles têm uma linha. 1405 01:11:33,510 --> 01:11:35,980 [Inaudível]. 1406 01:11:35,980 --> 01:11:36,390 >> ZAMYLA CHAN: Yeah. 1407 01:11:36,390 --> 01:11:37,630 Isso é um grande ponto. 1408 01:11:37,630 --> 01:11:41,510 Você pode visualizar as linhas como apenas como em uma tabela do Excel, apenas 1409 01:11:41,510 --> 01:11:44,540 a lista das linhas. 1410 01:11:44,540 --> 01:11:46,870 OK. 1411 01:11:46,870 --> 01:11:47,230 Tudo bem. 1412 01:11:47,230 --> 01:11:50,740 Portanto, agora que já sabemos select, se não há mais perguntas, nós vamos 1413 01:11:50,740 --> 01:11:52,970 passar por cima para inserção. 1414 01:11:52,970 --> 01:11:58,220 Então, se eu queria inserir alguns tabela e inserir determinada coluna 1415 01:11:58,220 --> 01:12:02,320 valores, eu poderia inserir-me em Ravenclaw no ano 7. 1416 01:12:02,320 --> 01:12:07,245 Mas, às vezes pode haver duplicado valores, como vimos no pset7 quando 1417 01:12:07,245 --> 01:12:09,240 estavam atualizando nosso portfólio. 1418 01:12:09,240 --> 01:12:15,610 >> Portanto, neste caso, nós queremos usar ON DUPLICATE KEY UPDATE, para que não 1419 01:12:15,610 --> 01:12:18,280 armazenar várias linhas com o mesmo valorizar, mas sim atualizá-lo. 1420 01:12:18,280 --> 01:12:21,780 1421 01:12:21,780 --> 01:12:25,560 Então nós realmente temos de atualização, o que não é uma peça inserta. 1422 01:12:25,560 --> 01:12:30,100 É apenas uma atualização onde você atualizar em uma determinada mesa com uma dada 1423 01:12:30,100 --> 01:12:34,403 critérios e então, finalmente, eliminar que faz uma coisa muito semelhante. 1424 01:12:34,403 --> 01:12:40,200 >> AUDIÊNCIA: Você poderia brevemente passar por cima da chave duplicada? 1425 01:12:40,200 --> 01:12:40,850 >> ZAMYLA CHAN: Yeah. 1426 01:12:40,850 --> 01:12:48,340 Essencialmente aqui, tenho INSERT INTO Gringotes, é, galeões, estes valores. 1427 01:12:48,340 --> 01:12:56,900 Mas ID, presumivelmente, é uma chave única valor definido na tabela MySQL. 1428 01:12:56,900 --> 01:13:06,750 Então, se eu já tiver esse ID criado, então eu não posso inserir uma nova linha. 1429 01:13:06,750 --> 01:13:10,961 Então, se ele ainda não existir, então eu tenho que atualizá-lo. 1430 01:13:10,961 --> 01:13:16,040 1431 01:13:16,040 --> 01:13:17,722 No meio no branco. 1432 01:13:17,722 --> 01:13:21,570 >> AUDIÊNCIA: Então, inserir, atualizar, excluir, e selecionar, são aqueles todos disponíveis 1433 01:13:21,570 --> 01:13:22,875 localmente [inaudível]? 1434 01:13:22,875 --> 01:13:27,320 1435 01:13:27,320 --> 01:13:29,630 >> ZAMYLA CHAN: Então, inserir, atualizar, excluir e 1436 01:13:29,630 --> 01:13:31,120 selecionar são todas as consultas SQL. 1437 01:13:31,120 --> 01:13:34,970 Assim, sempre que você estiver usando SQL, você terá os disponíveis. 1438 01:13:34,970 --> 01:13:38,226 1439 01:13:38,226 --> 01:13:40,706 >> AUDIÊNCIA: Voltar para o quizzes passados ​​- 1440 01:13:40,706 --> 01:13:44,178 havia uma questão que lidava com se você tivesse uma tabela e queria 1441 01:13:44,178 --> 01:13:52,610 inserir os resultados dos testes em um e inserir seu nome para que ele não vai deixar você 1442 01:13:52,610 --> 01:13:54,594 [Inaudível] pontuação no teste do seu amigo. 1443 01:13:54,594 --> 01:13:59,060 Como você faria isso com a inserção? 1444 01:13:59,060 --> 01:14:02,490 >> ZAMYLA CHAN: Então, a pergunta foi sobre uma pergunta anterior a médio prazo. 1445 01:14:02,490 --> 01:14:04,320 Eu não estou ciente de que um que é agora. 1446 01:14:04,320 --> 01:14:06,790 Então, talvez mais tarde, se você quiser vir e me mostrar, então eu posso 1447 01:14:06,790 --> 01:14:08,155 certamente dar-lhe dicas. 1448 01:14:08,155 --> 01:14:11,250 1449 01:14:11,250 --> 01:14:15,460 Mas, falando de coisas inserção, como tomando nota de alguém quando você 1450 01:14:15,460 --> 01:14:18,800 não deve, vamos falar sobre Ataques de injeção SQL. 1451 01:14:18,800 --> 01:14:22,050 Assim, um ataque de injeção de SQL é essencialmente onde alguém toma 1452 01:14:22,050 --> 01:14:27,680 vantagem do baixo de segurança do caminho que está a tomar em dados. 1453 01:14:27,680 --> 01:14:35,660 >> Então, aqui, assim como em CS50 finanças, quando logado, podemos entrar em um 1454 01:14:35,660 --> 01:14:39,510 nome de usuário no formulário de login, caixa de texto em primeiro lugar, e 1455 01:14:39,510 --> 01:14:41,570 em seguida, digite uma senha. 1456 01:14:41,570 --> 01:14:45,610 Talvez o nosso código PHP pode parecer algo como este, onde $ username 1457 01:14:45,610 --> 01:14:51,410 é o nome de usuário e senha de pós-dados é a senha de pós-dados. 1458 01:14:51,410 --> 01:14:55,110 E então nós apenas executar a nossa consulta, por exemplo, OK, bem, a nossa consulta vai 1459 01:14:55,110 --> 01:14:57,990 escolha de nossos usuários, onde o nome de usuário é o 1460 01:14:57,990 --> 01:14:58,970 um que eles submetidos. 1461 01:14:58,970 --> 01:15:06,870 E a senha é a senha, o que significa que as senhas coincidem. 1462 01:15:06,870 --> 01:15:12,670 >> Agora, e se em vez de realmente apresentar uma senha real, como 1463 01:15:12,670 --> 01:15:16,850 12345 e adivinhando pinos que diz senha e tentando cortar seu 1464 01:15:16,850 --> 01:15:21,460 conta, e se em vez que apresentou esta. 1465 01:15:21,460 --> 01:15:24,380 Eles poderiam digitar talvez um palpite sobre uma senha. 1466 01:15:24,380 --> 01:15:30,480 E então eles iriam terminar a Citação em seguida, digite ou 1 = 1. 1467 01:15:30,480 --> 01:15:35,160 Isso seria andar diretamente para o SQL consultar para algo parecido com isto. 1468 01:15:35,160 --> 01:15:38,200 Selecione a partir de usuários onde username = dentes e senha 1469 01:15:38,200 --> 01:15:41,450 é igual lírio ou 1 = 1. 1470 01:15:41,450 --> 01:15:45,450 >> Assim, ou a senha tem estar correta ou 1 = 1, 1471 01:15:45,450 --> 01:15:47,870 que é sempre verdade. 1472 01:15:47,870 --> 01:15:52,780 Portanto, neste caso, basicamente, um usuário pode tirar proveito disso e faça o login 1473 01:15:52,780 --> 01:15:55,240 -se em corte e conta de alguém. 1474 01:15:55,240 --> 01:15:58,950 Então é por isso que queremos evitar alguém ter que fazer isso. 1475 01:15:58,950 --> 01:16:03,890 Mas, felizmente, a função de consulta passando os espaços reservados terá 1476 01:16:03,890 --> 01:16:04,800 cuidado com isso para você. 1477 01:16:04,800 --> 01:16:08,570 Além disso, você normalmente nunca quer para realmente enviar as senhas 1478 01:16:08,570 --> 01:16:09,310 si. 1479 01:16:09,310 --> 01:16:14,115 É por isso que hash ou criptografada los em CS50 finanças. 1480 01:16:14,115 --> 01:16:17,553 >> AUDIÊNCIA: O questionário passado conversei cerca de cordas de fuga mysql. 1481 01:16:17,553 --> 01:16:21,800 Será que temos que se preocupar com isso? 1482 01:16:21,800 --> 01:16:22,670 >> ZAMYLA CHAN: Essa é uma boa pergunta. 1483 01:16:22,670 --> 01:16:29,050 As seqüências de escape do MySQL é definitivamente um função que foi utilizada no nosso consulta. 1484 01:16:29,050 --> 01:16:30,420 Mas definitivamente olhar para isso. 1485 01:16:30,420 --> 01:16:32,950 Eu diria que é um jogo justo para saber que você precisa para chamar esse 1486 01:16:32,950 --> 01:16:34,370 funcionar em uma corda. 1487 01:16:34,370 --> 01:16:35,245 Sim, Belinda? 1488 01:16:35,245 --> 01:16:38,606 >> AUDIÊNCIA: Como você sabe quando é aspas simples ou duplas? 1489 01:16:38,606 --> 01:16:43,516 E também, eu me sinto como em palestra você mencionado algo sobre não ter 1490 01:16:43,516 --> 01:16:48,426 o [inaudível], ou uma coisa ou segunda aspas simples no final. 1491 01:16:48,426 --> 01:16:56,407 1492 01:16:56,407 --> 01:17:00,825 Eu acho que ele apontou em palestra que você deveria ter um apóstrofo 1493 01:17:00,825 --> 01:17:04,290 e depois não têm apóstrofos ou algo assim. 1494 01:17:04,290 --> 01:17:05,540 >> AUDIÊNCIA: [inaudível]. 1495 01:17:05,540 --> 01:17:14,860 1496 01:17:14,860 --> 01:17:18,657 >> AUDIÊNCIA: A coisa é o último single Citação lá nessa segunda caixa 1497 01:17:18,657 --> 01:17:19,391 não deve estar lá. 1498 01:17:19,391 --> 01:17:21,840 [Inaudível] 1499 01:17:21,840 --> 01:17:26,730 Porque quando você levar esse último single citar fora e combinar estes para o conteúdo 1500 01:17:26,730 --> 01:17:30,522 onde a senha é, se você tem que consulta, não há uma única citação no 1501 01:17:30,522 --> 01:17:31,340 o fim já. 1502 01:17:31,340 --> 01:17:36,580 Você quer usar essa única citação como aquela que está virado para o um 1503 01:17:36,580 --> 01:17:37,574 [Inaudível]. 1504 01:17:37,574 --> 01:17:42,820 Então, qual é, na verdade, em que o texto caixa não deve ter isso. 1505 01:17:42,820 --> 01:17:44,070 >> ZAMYLA CHAN: Eu vou mudar isso. 1506 01:17:44,070 --> 01:17:56,490 1507 01:17:56,490 --> 01:17:56,880 OK. 1508 01:17:56,880 --> 01:18:00,435 Se não houver qualquer dúvida, então eu vou passá-lo sobre a Joseph falar 1509 01:18:00,435 --> 01:18:04,332 sobre JavaScript, et cetera. 1510 01:18:04,332 --> 01:18:09,540 >> [Aplausos] 1511 01:18:09,540 --> 01:18:11,660 >> JOSEPH ONG: Então estamos executando um pouco para trás. 1512 01:18:11,660 --> 01:18:13,280 Então, se você tiver que sair, tudo bem. 1513 01:18:13,280 --> 01:18:16,540 Mas pedimos que você mantenha suas cabeças para baixo se você estiver no meio, para que 1514 01:18:16,540 --> 01:18:19,560 não bloquear a câmera e usar a saída de volta, se for preciso. 1515 01:18:19,560 --> 01:18:25,010 1516 01:18:25,010 --> 01:18:26,306 Eu sou Joseph pelo caminho. 1517 01:18:26,306 --> 01:18:27,556 Oi. 1518 01:18:27,556 --> 01:18:37,910 1519 01:18:37,910 --> 01:18:38,630 Teste, teste. 1520 01:18:38,630 --> 01:18:39,630 Dan, isso é bom? 1521 01:18:39,630 --> 01:18:40,880 Legal. 1522 01:18:40,880 --> 01:18:44,460 1523 01:18:44,460 --> 01:18:47,600 >> Assim, o vídeo também serão postados on-line para aqueles que 1524 01:18:47,600 --> 01:18:48,850 tem que sair agora. 1525 01:18:48,850 --> 01:18:51,350 1526 01:18:51,350 --> 01:18:52,600 Awkward. 1527 01:18:52,600 --> 01:18:56,300 1528 01:18:56,300 --> 01:18:57,510 OK. 1529 01:18:57,510 --> 01:18:59,730 Então revisão quiz. 1530 01:18:59,730 --> 01:19:00,980 Este é um gato. 1531 01:19:00,980 --> 01:19:03,150 1532 01:19:03,150 --> 01:19:07,170 Agora, JavaScript, que não é talvez aww como para alguns de vocês. 1533 01:19:07,170 --> 01:19:07,370 OK. 1534 01:19:07,370 --> 01:19:09,280 Então, isso é em primeiro lugar, lembrar da Zamyla. 1535 01:19:09,280 --> 01:19:11,270 Lembre-se que o PHP é executado no servidor. 1536 01:19:11,270 --> 01:19:15,230 E muitas vezes, vocês escreveram laços em PHP para imprimir HTML, certo? 1537 01:19:15,230 --> 01:19:19,170 Assim, uma vez que o código é executado, que Saída HTML que você imprima 1538 01:19:19,170 --> 01:19:20,500 é enviado para o usuário. 1539 01:19:20,500 --> 01:19:25,960 E quando isso acontece, não mais pode PHP ser executado, a menos que você recarregar a página, de 1540 01:19:25,960 --> 01:19:27,660 curso, que reexecutes o PHP. 1541 01:19:27,660 --> 01:19:30,080 Mas uma vez que você imprimir esse HTML, você não pode ir a qualquer lugar. 1542 01:19:30,080 --> 01:19:33,580 >> Assim que o HTML é enviado para o usuário, qual é o navegador mais aqui, onde 1543 01:19:33,580 --> 01:19:35,470 Milo está usando o computador. 1544 01:19:35,470 --> 01:19:40,340 E tão bem, há várias coisas uma vez que enviar HTML para o usuário. 1545 01:19:40,340 --> 01:19:43,350 Às vezes queremos fazer algo como quando você clica em alguma coisa, nós queremos 1546 01:19:43,350 --> 01:19:47,350 caixas de alerta de pop-up, esses tipos de interações, como quando você pressiona o 1547 01:19:47,350 --> 01:19:50,740 chave, quando você clica em alguma coisa na página, eu quero que algo aconteça. 1548 01:19:50,740 --> 01:19:54,550 Bem, você não pode executar novamente PHP código, uma vez que o HTML está definido. 1549 01:19:54,550 --> 01:19:55,900 Então, como você faz isso? 1550 01:19:55,900 --> 01:19:59,930 >> Nós introduzimos uma nova linguagem chamada JavaScript, que roda no navegador 1551 01:19:59,930 --> 01:20:02,890 que permite que você faça coisas para HTML depois de receber 1552 01:20:02,890 --> 01:20:04,020 los a partir do servidor. 1553 01:20:04,020 --> 01:20:07,050 E é por isso que chamamos um do lado do cliente linguagem de programação. 1554 01:20:07,050 --> 01:20:09,110 Ele funciona em seu computador - 1555 01:20:09,110 --> 01:20:11,400 o cliente. 1556 01:20:11,400 --> 01:20:13,830 Qualquer dúvida sobre isso até agora? 1557 01:20:13,830 --> 01:20:15,650 Esse paradigma faz sentido para as pessoas? 1558 01:20:15,650 --> 01:20:16,010 OK. 1559 01:20:16,010 --> 01:20:16,790 Boa. 1560 01:20:16,790 --> 01:20:17,340 Tudo bem. 1561 01:20:17,340 --> 01:20:20,850 Então a primeira coisa a se notar é JavaScript não é PHP. 1562 01:20:20,850 --> 01:20:23,010 >> Eles têm uma sintaxe diferente, que nós vamos entrar. 1563 01:20:23,010 --> 01:20:24,530 E eles têm usos muito diferentes. 1564 01:20:24,530 --> 01:20:26,640 JavaScript, novamente, para o seu navegador, para o cliente. 1565 01:20:26,640 --> 01:20:30,640 Server é executado em algum lugar de outra pessoa computador que envia informações 1566 01:20:30,640 --> 01:20:31,720 para você, correto? 1567 01:20:31,720 --> 01:20:36,730 Então, se nós lhes pedimos para escrever código PHP em uma pergunta do exame, não escreva 1568 01:20:36,730 --> 01:20:38,710 JavaScript e vice-versa. 1569 01:20:38,710 --> 01:20:41,710 Você só vai perder pontos, e ele não vai estar certo. 1570 01:20:41,710 --> 01:20:43,690 >> Então, vamos entrar em algum diferenças de sintaxe - 1571 01:20:43,690 --> 01:20:46,140 JavaScript à esquerda e PHP à direita. 1572 01:20:46,140 --> 01:20:48,670 A primeira coisa que você vai notar com JavaScript, declaramos variáveis ​​com 1573 01:20:48,670 --> 01:20:49,440 a palavra-chave var - 1574 01:20:49,440 --> 01:20:53,590 V-A-R. PHP usou o sinal de dólar, Zamyla como discutido anteriormente. 1575 01:20:53,590 --> 01:20:57,570 Se você quiser declarar um associativa série, vemos a sintaxe familiar em 1576 01:20:57,570 --> 01:20:59,030 o lado direito com o PHP. 1577 01:20:59,030 --> 01:21:01,630 No lado esquerdo, em vez você usar chaves. 1578 01:21:01,630 --> 01:21:03,280 E então suas chaves estão à esquerda. 1579 01:21:03,280 --> 01:21:04,670 Então você tem dois pontos. 1580 01:21:04,670 --> 01:21:06,560 E então você tem os valores que você deseja. 1581 01:21:06,560 --> 01:21:09,840 >> Então é assim que você faria isso em PHP no lado direito com a segunda 1582 01:21:09,840 --> 01:21:10,955 linha que começa em Milo. 1583 01:21:10,955 --> 01:21:14,540 E é assim que você faria isso na lado esquerdo em JavaScript, se você quiser 1584 01:21:14,540 --> 01:21:16,110 o que chamamos de um objeto. 1585 01:21:16,110 --> 01:21:19,340 E objetos em JavaScript são apenas arrays associativos. 1586 01:21:19,340 --> 01:21:23,710 Então, se você quiser acessar campos, em PHP você usa esta sintaxe suporte. 1587 01:21:23,710 --> 01:21:27,170 E desta forma, você pode transferir este campo para Lauren proprietário. 1588 01:21:27,170 --> 01:21:30,150 >> Bem, em JavaScript, se alguém quiser acessar um campo e alterá-lo, você pode 1589 01:21:30,150 --> 01:21:31,370 usar a sintaxe de ponto. 1590 01:21:31,370 --> 01:21:33,860 Você também pode usar a sintaxe suporte. 1591 01:21:33,860 --> 01:21:35,550 Mas você não pode usar o sintaxe de ponto em PHP. 1592 01:21:35,550 --> 01:21:36,525 Isso não vai funcionar. 1593 01:21:36,525 --> 01:21:38,910 Ele só funciona em PHP. 1594 01:21:38,910 --> 01:21:42,060 E, finalmente, imprimir as coisas para o console, você usa console.log, que 1595 01:21:42,060 --> 01:21:43,720 Vocês usam muito em pset8. 1596 01:21:43,720 --> 01:21:45,260 Pode console.log que. 1597 01:21:45,260 --> 01:21:50,030 >> Se você quiser imprimir uma matriz em PHP, você tem que usar impressão r. 1598 01:21:50,030 --> 01:21:53,240 E no lado direito, você vê Eu mistura concatenação lá. 1599 01:21:53,240 --> 01:21:54,070 Alguém perguntou antes. 1600 01:21:54,070 --> 01:21:55,850 Eu uso um plus em JavaScript. 1601 01:21:55,850 --> 01:21:59,800 Se eu quiser concatenar algo em PHP, eu uso o ponto. 1602 01:21:59,800 --> 01:22:00,800 Estes são diferentes. 1603 01:22:00,800 --> 01:22:03,420 Se você estiver escrevendo código PHP, não use um plus. 1604 01:22:03,420 --> 01:22:06,810 Se você estiver escrevendo JavaScript código, não escreva um ponto. 1605 01:22:06,810 --> 01:22:08,230 Será errado. 1606 01:22:08,230 --> 01:22:09,640 E você vai ficar triste. 1607 01:22:09,640 --> 01:22:11,000 >> Então, as diferenças de sintaxe. 1608 01:22:11,000 --> 01:22:14,710 Conheça a sua sintaxe, porque se você tem a escrever uma pergunta e você usar a sintaxe 1609 01:22:14,710 --> 01:22:16,890 a partir da linguagem errada, ele não vai funcionar. 1610 01:22:16,890 --> 01:22:19,520 E vai ser errado. 1611 01:22:19,520 --> 01:22:22,420 Então vamos falar sobre algum controle fluir diferenças, como você usa 1612 01:22:22,420 --> 01:22:24,040 laços em cada uma delas. 1613 01:22:24,040 --> 01:22:26,610 Zamyla passou por cima da lateral direita. 1614 01:22:26,610 --> 01:22:27,780 Coisas do lado direito deve estar familiarizado. 1615 01:22:27,780 --> 01:22:29,670 Vamos olhar no lado esquerdo. 1616 01:22:29,670 --> 01:22:34,830 >> Quando você usa o loop n em JavaScript, a variável de loop, var i lá, 1617 01:22:34,830 --> 01:22:37,210 loop sobre as chaves do array. 1618 01:22:37,210 --> 01:22:39,150 Então você vê o nome, casa, e papel. 1619 01:22:39,150 --> 01:22:42,440 Se eu console.log i, recebo nome, casa, e papel. 1620 01:22:42,440 --> 01:22:44,720 Essas são as chaves. 1621 01:22:44,720 --> 01:22:50,080 Em JavaScript, um loop foreach vai sobre os valores dessa matriz. 1622 01:22:50,080 --> 01:22:52,040 Então você percebe que eles são ambos i. 1623 01:22:52,040 --> 01:22:56,000 Mas, aqui no lado do PHP, ela imprime fora Milo, CS50 e Mascote. 1624 01:22:56,000 --> 01:22:57,390 Esses são os valores em PHP. 1625 01:22:57,390 --> 01:23:00,180 >> Então, essas são como esses dois são diferentes nas diferentes línguas. 1626 01:23:00,180 --> 01:23:02,970 Então, se você estiver usando um foreach loop, não pense que ele 1627 01:23:02,970 --> 01:23:03,760 dá-lhe as chaves. 1628 01:23:03,760 --> 01:23:08,010 E se você estiver usando um loop for n, não supor que você obtém os valores. 1629 01:23:08,010 --> 01:23:10,420 Será que isso faz sentido até agora? 1630 01:23:10,420 --> 01:23:13,630 O próximo slide vai mostrar-lhe como você pode acessar o oposto em 1631 01:23:13,630 --> 01:23:15,160 cada um deles. 1632 01:23:15,160 --> 01:23:18,550 >> Bem, se você tem a chave em JavaScript e você quer que o valor para fora, 1633 01:23:18,550 --> 01:23:20,440 você acabou de índice para a matriz com isso. 1634 01:23:20,440 --> 01:23:23,640 Então, Milo de eu vou conseguir o que você quer - os valores. 1635 01:23:23,640 --> 01:23:25,260 Há essa sintaxe diferente em PHP. 1636 01:23:25,260 --> 01:23:28,140 Se você realmente quer saber, eu não acho que já mostrei para você ainda. 1637 01:23:28,140 --> 01:23:31,740 Mas se você estiver interessado, você pode usar esta sintaxe adicional à direita 1638 01:23:31,740 --> 01:23:35,130 lado que vai realmente deixá-lo começar a chaves em PHP quando você está usando um 1639 01:23:35,130 --> 01:23:35,880 loop foreach. 1640 01:23:35,880 --> 01:23:39,640 Então, basta um pouco de trivia se você estiver interessado. 1641 01:23:39,640 --> 01:23:42,630 >> Então, isso é apenas para demonstrar a diferenças entre estes dois loops. 1642 01:23:42,630 --> 01:23:47,060 Não misturá-las quando você está programação de uma pergunta. 1643 01:23:47,060 --> 01:23:49,774 Qualquer dúvida sobre isso. 1644 01:23:49,774 --> 01:23:50,770 Legal. 1645 01:23:50,770 --> 01:23:51,310 Tudo bem. 1646 01:23:51,310 --> 01:23:52,250 JavaScript objetos. 1647 01:23:52,250 --> 01:23:53,040 Eu falei sobre eles. 1648 01:23:53,040 --> 01:23:54,650 Eles são como matrizes associativas. 1649 01:23:54,650 --> 01:23:57,730 A única coisa que eu gostaria que você notar aqui é que um valor de uma associativo 1650 01:23:57,730 --> 01:23:59,540 matriz pode ser qualquer coisa em JavaScript. 1651 01:23:59,540 --> 01:24:02,240 >> Ele pode até mesmo ser uma função, como lá. 1652 01:24:02,240 --> 01:24:04,600 Eu tenho uma função que é um valor de uma chave. 1653 01:24:04,600 --> 01:24:07,030 E se eu quiser chamar essa função, Eu só acessar casca. 1654 01:24:07,030 --> 01:24:08,490 E então eu coloquei os parênteses depois disso. 1655 01:24:08,490 --> 01:24:09,790 E isso funciona. 1656 01:24:09,790 --> 01:24:15,570 Então, alguma dúvida? 1657 01:24:15,570 --> 01:24:16,370 Não? 1658 01:24:16,370 --> 01:24:16,650 OK. 1659 01:24:16,650 --> 01:24:18,190 Boa. 1660 01:24:18,190 --> 01:24:20,130 JavaScript, como PHP, é vagamente digitado. 1661 01:24:20,130 --> 01:24:20,970 O que significa isso? 1662 01:24:20,970 --> 01:24:22,380 >> Ela tem os tipos. 1663 01:24:22,380 --> 01:24:24,800 Mas quando você declarar um JavaScript variável, você diz var i. 1664 01:24:24,800 --> 01:24:25,850 Você não pode dizer isso. 1665 01:24:25,850 --> 01:24:26,460 Isso não é uma coisa. 1666 01:24:26,460 --> 01:24:28,000 Você acabou de dizer que é uma variável. 1667 01:24:28,000 --> 01:24:31,590 E então JavaScript irá lidar com o tipos sob o capô para você. 1668 01:24:31,590 --> 01:24:34,390 Podemos converter livremente entre tipos por causa disso. 1669 01:24:34,390 --> 01:24:37,360 Então eu começa como um número neste caso. 1670 01:24:37,360 --> 01:24:38,790 E então eu tenho uma string. 1671 01:24:38,790 --> 01:24:39,710 E acrescento eu a ele. 1672 01:24:39,710 --> 01:24:41,810 E eu atribuí-la de volta para i. 1673 01:24:41,810 --> 01:24:43,640 >> Então, em que a primeira linha, i é o número. 1674 01:24:43,640 --> 01:24:47,310 Na segunda linha, eu agora se torna um cadeia depois de eu fazer a mudança. 1675 01:24:47,310 --> 01:24:52,820 E aqui, estou apenas concatenando esse número na string. 1676 01:24:52,820 --> 01:24:56,210 Então você vê que mesmo que eu era um inteiro na primeira parte, é uma espécie 1677 01:24:56,210 --> 01:24:58,500 de como ser convertido para um corda e, em seguida, serem adicionados 1678 01:24:58,500 --> 01:25:00,510 para essa seqüência Olá. 1679 01:25:00,510 --> 01:25:02,340 E é isso que eu quero dizer pela digitação solto. 1680 01:25:02,340 --> 01:25:04,760 Isso é que você converter entre tipos muito facilmente. 1681 01:25:04,760 --> 01:25:08,840 E não lançar avisos para você como C faz. 1682 01:25:08,840 --> 01:25:12,420 >> Então eu agora contém Olá 123 para a string. 1683 01:25:12,420 --> 01:25:13,270 Avançar. 1684 01:25:13,270 --> 01:25:15,610 Podemos também comparar livremente entre os tipos. 1685 01:25:15,610 --> 01:25:19,310 Então, se você acabou de usar ==, muito como em PHP, JavaScript 1686 01:25:19,310 --> 01:25:20,480 faz uma coisa semelhante. 1687 01:25:20,480 --> 01:25:24,780 A corda 123 é o mesmo que o número 123 quando você usa dois iguais. 1688 01:25:24,780 --> 01:25:27,820 Quando utilizados três iguais, também quer ter certeza de que 1689 01:25:27,820 --> 01:25:29,240 o tipo é o mesmo. 1690 01:25:29,240 --> 01:25:31,960 Então, porque isso é uma cadeia e que é um número, apesar de serem ambos 1691 01:25:31,960 --> 01:25:35,280 123, quando você usa o triplo é igual, você começa falso. 1692 01:25:35,280 --> 01:25:39,330 No duplo equivale a caso, você começa verdade, porque dois iguais não 1693 01:25:39,330 --> 01:25:40,020 preocupam com tipo. 1694 01:25:40,020 --> 01:25:42,500 Três iguais se preocupa com tipo. 1695 01:25:42,500 --> 01:25:43,750 Dúvidas? 1696 01:25:43,750 --> 01:25:45,790 1697 01:25:45,790 --> 01:25:48,390 OK. 1698 01:25:48,390 --> 01:25:52,870 >> E outra coisa sobre JavaScript escopo é uma espécie de mundial, a menos que você é 1699 01:25:52,870 --> 01:25:53,460 numa função. 1700 01:25:53,460 --> 01:25:55,660 E ele funciona da mesma maneira em PHP na verdade. 1701 01:25:55,660 --> 01:25:57,500 Então, vamos passar por este exemplo. 1702 01:25:57,500 --> 01:25:59,110 Eu defini i a 999. 1703 01:25:59,110 --> 01:26:00,900 E então eu vou para este loop for. 1704 01:26:00,900 --> 01:26:06,110 Então, se eu estou imprimindo i neste para loop, espero 0, 1, 2, 3, 4. 1705 01:26:06,110 --> 01:26:07,390 Recebo a i = 4. 1706 01:26:07,390 --> 01:26:10,770 Ele incrementa i agora a 5 no No final do ciclo de. 1707 01:26:10,770 --> 01:26:13,300 E em seguida, ele sai do loop, porque ele não cumprir a 1708 01:26:13,300 --> 01:26:14,550 condicionar mais. 1709 01:26:14,550 --> 01:26:16,650 >> O que você acha que o próximo console.log imprime? 1710 01:26:16,650 --> 01:26:20,570 1711 01:26:20,570 --> 01:26:24,790 Então, isso é o que ele faria em C. Em C, porque se você tem como var i fora 1712 01:26:24,790 --> 01:26:28,855 e você tem var i dentro de um loop, como um loop, em seguida, torna-se de tal forma que 1713 01:26:28,855 --> 01:26:30,690 ele está no escopo de que os dois i de são diferentes. 1714 01:26:30,690 --> 01:26:34,630 Em JavaScript, ela só vai tratá-lo como o mesmo i. 1715 01:26:34,630 --> 01:26:37,870 Recebo 5, porque esse era o valor depois que ele saiu fora do circuito. 1716 01:26:37,870 --> 01:26:39,120 Então, aqueles que são os mesmos i. 1717 01:26:39,120 --> 01:26:42,620 1718 01:26:42,620 --> 01:26:44,130 Será que isso faz sentido? 1719 01:26:44,130 --> 01:26:45,720 >> Bem, faz sentido a partir de um ponto de vista JavaScript. 1720 01:26:45,720 --> 01:26:49,510 Mas o mesmo paradigma não faz transitar para C. Eles têm 1721 01:26:49,510 --> 01:26:50,310 diferentes regras de escopo. 1722 01:26:50,310 --> 01:26:50,630 Sim. 1723 01:26:50,630 --> 01:26:52,566 >> AUDIÊNCIA: [inaudível] 1724 01:26:52,566 --> 01:26:54,990 fora da função [inaudível]? 1725 01:26:54,990 --> 01:26:58,340 >> JOSEPH ONG: Então, fora do qual função? 1726 01:26:58,340 --> 01:27:00,810 Então, eu vou chegar a isso em apenas um segundo. 1727 01:27:00,810 --> 01:27:02,580 Então chamamos foo (i). 1728 01:27:02,580 --> 01:27:06,920 Isto passa i em foo, incrementos e, em seguida registra-lo. 1729 01:27:06,920 --> 01:27:07,750 Por isso, foi 5. 1730 01:27:07,750 --> 01:27:09,210 Assim torna-se 6. 1731 01:27:09,210 --> 01:27:11,670 Mas o que eu estou falando é que i, em que a função. 1732 01:27:11,670 --> 01:27:14,430 Porque é um parâmetro, é escopo para essa função. 1733 01:27:14,430 --> 01:27:17,800 Então, quando eu realmente sair dessa função, está indo agora para ir 1734 01:27:17,800 --> 01:27:19,860 de volta para o velho eu. 1735 01:27:19,860 --> 01:27:23,000 Que eu só porque tem como escopo ele está em uma função. 1736 01:27:23,000 --> 01:27:24,200 E nós temos alcance e funções. 1737 01:27:24,200 --> 01:27:29,080 Mas não temos escopo fora de funções no JavaScript. 1738 01:27:29,080 --> 01:27:31,170 Será que isso faz sentido? 1739 01:27:31,170 --> 01:27:31,320 Sim. 1740 01:27:31,320 --> 01:27:31,660 Pergunta. 1741 01:27:31,660 --> 01:27:34,030 >> AUDIÊNCIA: Same [inaudível]? 1742 01:27:34,030 --> 01:27:34,500 >> JOSEPH ONG: Então, sim. 1743 01:27:34,500 --> 01:27:36,260 No PHP, é o mesmo tipo de coisa. 1744 01:27:36,260 --> 01:27:37,680 Há uma ligeira sutileza na verdade. 1745 01:27:37,680 --> 01:27:40,130 Mas você pode me perguntar sobre que, após a revisão. 1746 01:27:40,130 --> 01:27:43,930 Você realmente não precisa saber que sutileza para o quiz. 1747 01:27:43,930 --> 01:27:47,600 Para todos os efeitos, como variáveis, global e PHP, a menos que 1748 01:27:47,600 --> 01:27:49,150 eles estão em uma função, mesmo coisa em JavaScript. 1749 01:27:49,150 --> 01:27:49,480 Sim. 1750 01:27:49,480 --> 01:27:52,890 >> AUDIÊNCIA: Por que isso é permitido em JavaScript e em nenhum outro lugar? 1751 01:27:52,890 --> 01:27:55,010 >> JOSEPH ONG: Então por que é permitido em JavaScript e não em C? 1752 01:27:55,010 --> 01:27:58,180 É só quem veio com JavaScript decidiu que este era OK em 1753 01:27:58,180 --> 01:27:59,510 JavaScript. 1754 01:27:59,510 --> 01:28:02,430 Então é como uma linguagem de programação convenção, como diríamos. 1755 01:28:02,430 --> 01:28:02,580 Sim. 1756 01:28:02,580 --> 01:28:04,480 >> AUDIÊNCIA: Então, por que ir 6-5? 1757 01:28:04,480 --> 01:28:08,280 >> JOSEPH ONG: Assim foi 6-5, porque quando eu passei eu em foo, que 1758 01:28:08,280 --> 01:28:13,420 i dentro de foo agora é delimitado para foo, porque existe no âmbito funções 1759 01:28:13,420 --> 01:28:15,050 JavaScript. 1760 01:28:15,050 --> 01:28:18,720 Mas uma vez eu sair daqui, porque foi delimitado para a função, eu sou apenas 1761 01:28:18,720 --> 01:28:24,300 usando o i regular que estava dentro o resto do fluxo de controle. 1762 01:28:24,300 --> 01:28:25,210 Faz sentido? 1763 01:28:25,210 --> 01:28:26,910 Posso seguir em frente? 1764 01:28:26,910 --> 01:28:27,320 Tudo bem. 1765 01:28:27,320 --> 01:28:29,180 Legal. 1766 01:28:29,180 --> 01:28:31,890 >> A aceitação desta é objetos são passados ​​por referência. 1767 01:28:31,890 --> 01:28:33,990 Sabe quando você passa uma matriz em C você poderia 1768 01:28:33,990 --> 01:28:35,810 na verdade, modificar a matriz? 1769 01:28:35,810 --> 01:28:37,350 É a mesma coisa em JavaScript. 1770 01:28:37,350 --> 01:28:42,960 Se eu passar um objeto, neste caso, eu Milo passou para esta função catify. 1771 01:28:42,960 --> 01:28:44,490 Milo começa. 1772 01:28:44,490 --> 01:28:46,310 Seu nome é Milo Banana. 1773 01:28:46,310 --> 01:28:51,670 Eu passar esse objeto para uma função porque é um objeto, um associativa 1774 01:28:51,670 --> 01:28:53,730 array em JavaScript. 1775 01:28:53,730 --> 01:28:57,110 >> Quando eu executar uma operação nessa função, ele irá 1776 01:28:57,110 --> 01:28:58,560 realmente mudar o objeto. 1777 01:28:58,560 --> 01:29:01,720 Então, isso só vai acontecer por objetos em JavaScript, assim como acontece 1778 01:29:01,720 --> 01:29:09,230 para matrizes dentro do nome de C. Então Milo vai realmente se tornar gato agora. 1779 01:29:09,230 --> 01:29:10,090 Será que isso faz sentido? 1780 01:29:10,090 --> 01:29:11,840 Então, isso só funciona para objetos. 1781 01:29:11,840 --> 01:29:13,090 Os objetos são passados ​​por referência. 1782 01:29:13,090 --> 01:29:13,400 Sim. 1783 01:29:13,400 --> 01:29:16,850 >> AUDIÊNCIA: Então você está dizendo que em contraste com i variável. 1784 01:29:16,850 --> 01:29:17,240 >> JOSEPH ONG: Yeah. 1785 01:29:17,240 --> 01:29:20,330 Qual variável i era apenas um número, certo? 1786 01:29:20,330 --> 01:29:25,280 É como no C, quando você passar um inteiro um, ele faz uma cópia. 1787 01:29:25,280 --> 01:29:28,130 E quando você passar um array, ele realmente altera a matriz real em 1788 01:29:28,130 --> 01:29:32,870 C. A mesma coisa acontece com JavaScript neste caso. 1789 01:29:32,870 --> 01:29:34,070 Tudo bem. 1790 01:29:34,070 --> 01:29:38,134 E no próximo, Milo é triste, porque ele é agora um gato. 1791 01:29:38,134 --> 01:29:40,790 1792 01:29:40,790 --> 01:29:45,060 Isso foi realmente Milo depois alguma viagem ao veterinário. 1793 01:29:45,060 --> 01:29:46,860 >> Então, como vamos usar JavaScript em uma página da web? 1794 01:29:46,860 --> 01:29:47,790 Podemos incluí-lo. 1795 01:29:47,790 --> 01:29:50,090 Este é o código HTML com as tags de strip. 1796 01:29:50,090 --> 01:29:51,300 Então, eu tenho marcas tira de lá. 1797 01:29:51,300 --> 01:29:54,820 E então eu coloquei um pouco de JavaScript código dentro das tags de script. 1798 01:29:54,820 --> 01:29:56,390 E então ele executa isso. 1799 01:29:56,390 --> 01:29:58,830 Quando eu apenas fazê-lo assim, é chamado JavaScript embutido. 1800 01:29:58,830 --> 01:30:02,400 É uma espécie de confuso, porque o JavaScript é realmente no HTML. 1801 01:30:02,400 --> 01:30:07,010 >> A melhor maneira de fazer isso, muito mais agradável, é escrever o seu JavaScript em um 1802 01:30:07,010 --> 01:30:10,920 arquivo externo e, em seguida, fornecer a tag script com uma fonte. 1803 01:30:10,920 --> 01:30:14,920 E isso vai para o arquivo JavaScript e ler o código JavaScript a partir de 1804 01:30:14,920 --> 01:30:15,960 esse arquivo em seu lugar. 1805 01:30:15,960 --> 01:30:18,820 E desta forma, você não tem um monte de JavaScript no início de sua 1806 01:30:18,820 --> 01:30:20,760 Arquivo HTML, o que torna realmente confuso. 1807 01:30:20,760 --> 01:30:21,860 Você acabou de colocá-lo em outro lugar. 1808 01:30:21,860 --> 01:30:24,310 E então ele vai lê-lo de lá. 1809 01:30:24,310 --> 01:30:25,560 Será que isso faz sentido? 1810 01:30:25,560 --> 01:30:27,990 1811 01:30:27,990 --> 01:30:29,640 >> Assuntos colocação. 1812 01:30:29,640 --> 01:30:32,620 Neste caso em particular, o script é antes o corpo. 1813 01:30:32,620 --> 01:30:36,090 Então, quando eu executar isso, não há nada no corpo ainda. 1814 01:30:36,090 --> 01:30:39,920 Talvez isso vai fazer um pouco mais sentir quando eu mostrar esta próxima parte. 1815 01:30:39,920 --> 01:30:43,210 Neste caso, o script vem após o div. 1816 01:30:43,210 --> 01:30:46,620 Assim, o div realmente aparece na página primeiro. 1817 01:30:46,620 --> 01:30:49,470 Aqui mesmo neste pequeno círculo vermelho, você vê o texto aparece. 1818 01:30:49,470 --> 01:30:51,810 E então o alerta aparece. 1819 01:30:51,810 --> 01:30:54,890 >> No primeiro caso, porque o script foi antes da div, o 1820 01:30:54,890 --> 01:30:56,170 alerta aparece em primeiro lugar. 1821 01:30:56,170 --> 01:30:59,250 E então o div aparece depois você fechar a caixa. 1822 01:30:59,250 --> 01:31:01,330 Assim, a execução importa. 1823 01:31:01,330 --> 01:31:02,290 Então, vamos manter isso em mente. 1824 01:31:02,290 --> 01:31:03,640 Isto será importante daqui a pouco. 1825 01:31:03,640 --> 01:31:08,730 1826 01:31:08,730 --> 01:31:09,540 OK. 1827 01:31:09,540 --> 01:31:12,750 Tão bem, como é que você espere até que o página inteira é carregada, então antes de você 1828 01:31:12,750 --> 01:31:13,580 executar algum código? 1829 01:31:13,580 --> 01:31:15,540 Nós vamos chegar a esta um pouco pouco mais tarde também. 1830 01:31:15,540 --> 01:31:19,016 Mas apenas manter este posicionamento assuntos em mente para quando 1831 01:31:19,016 --> 01:31:20,570 vir para outro slide. 1832 01:31:20,570 --> 01:31:22,030 >> Então nós começamos a DOM agora. 1833 01:31:22,030 --> 01:31:23,550 E o que é DOM? 1834 01:31:23,550 --> 01:31:26,830 Então, se você olhar para o código HTML, é apenas um monte de texto na tela. 1835 01:31:26,830 --> 01:31:30,560 Então como é que sabe que o JavaScript este é um elemento HTML? 1836 01:31:30,560 --> 01:31:33,410 Então, nós temos que ter um pouco de memória representação desta 1837 01:31:33,410 --> 01:31:34,930 estrutura que temos. 1838 01:31:34,930 --> 01:31:40,240 E sempre que temos isto em memória representação em JavaScript, que chamamos 1839 01:31:40,240 --> 01:31:41,750 que o DOM. 1840 01:31:41,750 --> 01:31:45,130 E isso é apenas uma maneira que as pessoas decidiram que devemos representar este 1841 01:31:45,130 --> 01:31:46,400 Estrutura HTML como. 1842 01:31:46,400 --> 01:31:47,940 >> E o que isso DOM parece? 1843 01:31:47,940 --> 01:31:50,460 Bem, em representação da memória, tomarmos este texto. 1844 01:31:50,460 --> 01:31:52,870 E nós transformá-lo em memória representação. 1845 01:31:52,870 --> 01:31:54,400 Então este é o HTML. 1846 01:31:54,400 --> 01:31:58,090 Então, primeiro descobrir que cada DOM árvore tem um documento. 1847 01:31:58,090 --> 01:31:59,400 Parece uma árvore. 1848 01:31:59,400 --> 01:32:03,550 E o documento contém o código HTML tag, na verdade, tudo o que 1849 01:32:03,550 --> 01:32:05,150 dentro deste momento. 1850 01:32:05,150 --> 01:32:06,970 A tag HTML tem dois filhos. 1851 01:32:06,970 --> 01:32:08,630 Ele tem uma cabeça. 1852 01:32:08,630 --> 01:32:12,380 Essa cabeça, se você olhar para o recuo lá com a forma como ele está estruturado 1853 01:32:12,380 --> 01:32:14,960 entre as tags íntimos, cabeça tem um filho. 1854 01:32:14,960 --> 01:32:17,130 A criança é o título. 1855 01:32:17,130 --> 01:32:18,370 Exatamente. 1856 01:32:18,370 --> 01:32:21,000 >> Agora, nós temos uma criança corpo. 1857 01:32:21,000 --> 01:32:24,870 E, em seguida, que tem um corpo criança chamada família. 1858 01:32:24,870 --> 01:32:27,950 E que a família tem três filhos - 1859 01:32:27,950 --> 01:32:29,550 o mais velho, meio e mais jovem. 1860 01:32:29,550 --> 01:32:31,960 Então, você deve saber como desenhar um diagrama assim quando pedimos-lhe como 1861 01:32:31,960 --> 01:32:34,270 para desenhar um diagrama quando damos você o HTML do lado esquerdo. 1862 01:32:34,270 --> 01:32:36,350 Saiba como produzir a árvore DOM. 1863 01:32:36,350 --> 01:32:38,930 E dentro dessas coisas, há apenas algum texto, que eu representava 1864 01:32:38,930 --> 01:32:40,180 como pequenas caixas. 1865 01:32:40,180 --> 01:32:42,750 1866 01:32:42,750 --> 01:32:47,980 >> Será que esta estrutura de árvore DOM fazer sentido eo que o DOM é? 1867 01:32:47,980 --> 01:32:49,300 Então o que o p representa? 1868 01:32:49,300 --> 01:32:51,850 Por aqui, o p lá em que representa uma marcação 1869 01:32:51,850 --> 01:32:54,510 parágrafo tag em HTML. 1870 01:32:54,510 --> 01:32:57,080 Assim, você pode procurá-lo. 1871 01:32:57,080 --> 01:32:59,290 Mas isso significa apenas que é algum espaço para algum texto. 1872 01:32:59,290 --> 01:33:02,910 E tem algum estilo CSS padrão, porque é uma marca de parágrafo. 1873 01:33:02,910 --> 01:33:05,130 Mas realmente não se preocupar com que parte muito. 1874 01:33:05,130 --> 01:33:07,510 Só sei que é um espaço reservado para algum texto. 1875 01:33:07,510 --> 01:33:08,480 Sim. 1876 01:33:08,480 --> 01:33:10,200 Pergunta? 1877 01:33:10,200 --> 01:33:11,021 Sim. 1878 01:33:11,021 --> 01:33:12,374 >> AUDIÊNCIA: Você acabou de mencionar CSS. 1879 01:33:12,374 --> 01:33:15,492 A família de hash eo hash tudo isso é, basicamente, 1880 01:33:15,492 --> 01:33:17,400 representando IDs em CSS? 1881 01:33:17,400 --> 01:33:18,440 >> JOSEPH ONG: Sim, exatamente. 1882 01:33:18,440 --> 01:33:20,380 Vou pegar o que esses hashes quer dizer em um segundo. 1883 01:33:20,380 --> 01:33:23,480 Quando Angela foi até CSS, ela falou sobre seletores CSS. 1884 01:33:23,480 --> 01:33:26,770 Estes são os seletores CSS que ela estava falando. 1885 01:33:26,770 --> 01:33:28,268 Sim, Rob? 1886 01:33:28,268 --> 01:33:32,060 >> ROB BOWDEN: Eu também gostaria de comentar DOM que dentro da tag title 1887 01:33:32,060 --> 01:33:35,385 é também um nó de texto. 1888 01:33:35,385 --> 01:33:36,070 >> JOSEPH ONG: Certo. 1889 01:33:36,070 --> 01:33:38,370 Então, dentro da tag title, Eu tenho alguns DOM texto. 1890 01:33:38,370 --> 01:33:42,730 Então, realmente, este título deve ter como um pequena caixa que vem fora dele também. 1891 01:33:42,730 --> 01:33:45,740 Mas isso realmente não importa demasiado neste caso. 1892 01:33:45,740 --> 01:33:49,620 Nós realmente não se importam com nós de texto, como lhes chamamos, muito. 1893 01:33:49,620 --> 01:33:50,270 OK, o que fazemos. 1894 01:33:50,270 --> 01:33:51,520 Aparentemente, o que fazemos. 1895 01:33:51,520 --> 01:33:54,260 1896 01:33:54,260 --> 01:33:57,100 E eu vou consertar isso quando Eu enviá-lo novamente. 1897 01:33:57,100 --> 01:33:59,830 Será que isso faz sentido? 1898 01:33:59,830 --> 01:34:01,160 >> Então, como vamos trabalhar com o DOM? 1899 01:34:01,160 --> 01:34:03,790 Sempre que você lidar com o DOM em JavaScript, existem dois passos. 1900 01:34:03,790 --> 01:34:05,030 Você seleciona um elemento DOM. 1901 01:34:05,030 --> 01:34:06,580 E então você faz as coisas para ele. 1902 01:34:06,580 --> 01:34:11,480 Portanto, neste caso, de forma abstrata, eu tenho seleccionado o elemento do meio. 1903 01:34:11,480 --> 01:34:14,530 E, em seguida, um exemplo de fazer coisas para isso seria alterando o texto. 1904 01:34:14,530 --> 01:34:16,020 Isso costumava ser Bob. 1905 01:34:16,020 --> 01:34:19,930 Agora, o que eu fiz a ele foi que eu mudei Bob Milo neste caso. 1906 01:34:19,930 --> 01:34:22,130 >> Então, como é que vamos realmente fazer isso? 1907 01:34:22,130 --> 01:34:23,440 Como é que vamos fazer a seleção? 1908 01:34:23,440 --> 01:34:26,560 E como nós não o fazendo coisas para a coisa, uma vez que tenha tomado? 1909 01:34:26,560 --> 01:34:30,470 Bem, a maneira que vocês têm aprendido nesta classe é usando algo que 1910 01:34:30,470 --> 01:34:32,420 chamado jQuery. 1911 01:34:32,420 --> 01:34:33,910 Então o que é jQuery? 1912 01:34:33,910 --> 01:34:37,220 jQuery é uma biblioteca que faz JavaScript mais fácil de escrever. 1913 01:34:37,220 --> 01:34:39,500 Então, alguém teve o tempo e escreveu jQuery. 1914 01:34:39,500 --> 01:34:41,530 >> jQuery é escrito em JavaScript. 1915 01:34:41,530 --> 01:34:44,550 E então, porque eles fizeram isso, agora tem um monte de funções que 1916 01:34:44,550 --> 01:34:46,020 podemos usar que fazem a nossa vive realmente fácil. 1917 01:34:46,020 --> 01:34:48,580 1918 01:34:48,580 --> 01:34:50,030 Então, quais são algumas das coisas que ele faz? 1919 01:34:50,030 --> 01:34:51,650 Faz selecionar elementos mais fácil. 1920 01:34:51,650 --> 01:34:54,020 Faz mudando HTML, adicionar classes mais fácil. 1921 01:34:54,020 --> 01:34:55,360 Faz Ajax mais fácil. 1922 01:34:55,360 --> 01:34:58,230 Nós vamos chegar a isso em um segundo. 1923 01:34:58,230 --> 01:35:00,630 >> E é análogo a bibliotecas C. 1924 01:35:00,630 --> 01:35:03,090 Então você incluir string.h, você se strlen. 1925 01:35:03,090 --> 01:35:04,680 Você começa strcpy, todas essas coisas. 1926 01:35:04,680 --> 01:35:09,650 Quando você incluir jQuery, você tem bom maneiras de selecionar elementos para mudança 1927 01:35:09,650 --> 01:35:10,390 coisas, et cetera. 1928 01:35:10,390 --> 01:35:12,990 Você começa a funcionalidade extra que O JavaScript não lhe dar. 1929 01:35:12,990 --> 01:35:15,310 Então jQuery não é JavaScript. 1930 01:35:15,310 --> 01:35:18,660 jQuery é uma biblioteca que está escrito em JavaScript que faz JavaScript 1931 01:35:18,660 --> 01:35:20,440 mais fácil de escrever. 1932 01:35:20,440 --> 01:35:23,170 >> Então jQuery não é uma programação língua. 1933 01:35:23,170 --> 01:35:24,540 Mas é JavaScript. 1934 01:35:24,540 --> 01:35:27,420 1935 01:35:27,420 --> 01:35:27,590 fazer. 1936 01:35:27,590 --> 01:35:30,420 Claro que você começar sua terminologia correta. 1937 01:35:30,420 --> 01:35:32,490 Alguma pergunta? 1938 01:35:32,490 --> 01:35:33,882 Sim. 1939 01:35:33,882 --> 01:35:35,132 Isso é uma pergunta? 1940 01:35:35,132 --> 01:35:37,910 1941 01:35:37,910 --> 01:35:38,350 Tudo bem. 1942 01:35:38,350 --> 01:35:40,080 Assim como você usar jQuery? 1943 01:35:40,080 --> 01:35:42,390 Bem, quando você está escrevendo algum O código JavaScript e você incluir um 1944 01:35:42,390 --> 01:35:45,570 jQuery na parte superior do seu arquivo como um arquivo de script, você pode usar o sinal de dólar 1945 01:35:45,570 --> 01:35:47,310 agora para obter acesso a jQuery. 1946 01:35:47,310 --> 01:35:49,860 E isso é diferente de o cifrão no PHP. 1947 01:35:49,860 --> 01:35:51,590 >> É o mesmo símbolo que digite no teclado. 1948 01:35:51,590 --> 01:35:52,780 Mas eles significam coisas muito diferentes. 1949 01:35:52,780 --> 01:35:56,090 Sinal de dólar em PHP significa que esta É assim que eu declarar uma variável. 1950 01:35:56,090 --> 01:35:59,120 Em JavaScript, quando você incluiu jQuery, ele representa jQuery. 1951 01:35:59,120 --> 01:36:01,280 Portanto, manter isso em mente. 1952 01:36:01,280 --> 01:36:03,420 Então, como podemos selecionar elementos DOM? 1953 01:36:03,420 --> 01:36:06,500 Bem, quando você faz o feio JavaScript forma, você acessar o 1954 01:36:06,500 --> 01:36:08,240 documento variável global. 1955 01:36:08,240 --> 01:36:11,170 E então você começa elemento por família ID. 1956 01:36:11,170 --> 01:36:15,270 Isto é realmente longa e prolixo e não muito agradável. 1957 01:36:15,270 --> 01:36:18,190 >> Ou você pode obter todos os elementos que são uma marca p. 1958 01:36:18,190 --> 01:36:20,080 Isso funciona também em JavaScript. 1959 01:36:20,080 --> 01:36:22,470 Mas nós nunca realmente mostrou você a sintaxe muito. 1960 01:36:22,470 --> 01:36:24,620 O que nós mostramos é jQuery. 1961 01:36:24,620 --> 01:36:28,720 Então, todo esse seletor lá em cima que foi expressa em JavaScript só fica 1962 01:36:28,720 --> 01:36:33,320 condensado para este muito agradável dólar assinar família hashtag. 1963 01:36:33,320 --> 01:36:38,480 E $ p, apenas onde é assim. 1964 01:36:38,480 --> 01:36:41,690 Se você quiser selecionar todas as tags p dentro de uma família, nós colocamos um espaço 1965 01:36:41,690 --> 01:36:42,890 entre os dois. 1966 01:36:42,890 --> 01:36:44,815 E agora, nós temos todo o p etiquetas dentro de uma família. 1967 01:36:44,815 --> 01:36:48,740 1968 01:36:48,740 --> 01:36:50,380 >> E parece familiar? 1969 01:36:50,380 --> 01:36:52,880 Bem, Angela falou sobre Seletores CSS. 1970 01:36:52,880 --> 01:36:54,200 Dê-me um segundo. 1971 01:36:54,200 --> 01:36:57,230 E assim, a fim de selecionar um elemento, você acabou de usar a mesma coisa que você 1972 01:36:57,230 --> 01:36:58,530 faria com um seletor CSS. 1973 01:36:58,530 --> 01:37:00,910 Se você colocar um hash na frente disso, ele seleciona por ID. 1974 01:37:00,910 --> 01:37:02,220 Um ponto seleciona por classes. 1975 01:37:02,220 --> 01:37:06,230 Se você só tem a coisa sem hashes ou pontos, ele seleciona essas tags. 1976 01:37:06,230 --> 01:37:07,140 Perguntas. 1977 01:37:07,140 --> 01:37:07,470 Sim? 1978 01:37:07,470 --> 01:37:11,510 >> AUDIÊNCIA: Quando usamos ponto em nossa HTML, é que não jQuery? 1979 01:37:11,510 --> 01:37:13,520 >> JOSEPH ONG: Dot em nosso HTML é uma coisa JavaScript. 1980 01:37:13,520 --> 01:37:14,750 Não é uma coisa jQuery. 1981 01:37:14,750 --> 01:37:17,620 A maneira que vocês aprenderam com jQuery é usar. html. 1982 01:37:17,620 --> 01:37:21,510 E então você passou o que quer o HTML vai ser. 1983 01:37:21,510 --> 01:37:23,480 Então, eu vou chegar a isso em apenas uma segunda, na verdade. 1984 01:37:23,480 --> 01:37:27,800 Então, como vamos fazer coisas para elemento uma vez que o selecionou? 1985 01:37:27,800 --> 01:37:30,130 Então, isso é um exemplo de selecionar um elemento. 1986 01:37:30,130 --> 01:37:32,280 Então, agora, nós queremos fazer coisas para ele. 1987 01:37:32,280 --> 01:37:35,730 >> Portanto, neste caso, deixe-me voltar para o slide anterior. 1988 01:37:35,730 --> 01:37:37,360 Foi Bob antes. 1989 01:37:37,360 --> 01:37:40,660 E eu quero mudar isso dentro de HTML para Milo. 1990 01:37:40,660 --> 01:37:43,240 Então eu chamar a função HTML a partir do elemento. 1991 01:37:43,240 --> 01:37:45,580 Essa função é HTML um método de elemento. 1992 01:37:45,580 --> 01:37:47,430 E então eu dar-lhe o que Eu quero que o HTML seja. 1993 01:37:47,430 --> 01:37:50,560 E ele só substitui o que está dentro de que tag com o que eu dou. 1994 01:37:50,560 --> 01:37:50,830 Sim. 1995 01:37:50,830 --> 01:37:51,170 Pergunta? 1996 01:37:51,170 --> 01:37:57,397 >> AUDIÊNCIA: A hashtag é usado apenas para o jQuery. 1997 01:37:57,397 --> 01:37:59,313 [Inaudível] 1998 01:37:59,313 --> 01:38:01,230 que não iria usar isso. 1999 01:38:01,230 --> 01:38:01,960 >> JOSEPH ONG: Sim, exatamente. 2000 01:38:01,960 --> 01:38:03,750 Mas não se preocupe muito JavaScript sobre puros. 2001 01:38:03,750 --> 01:38:06,670 Eu só quero que vocês se concentrar em como você faria isso com jQuery, porque 2002 01:38:06,670 --> 01:38:10,020 que vai ser o importante parte no quiz. 2003 01:38:10,020 --> 01:38:10,400 Certo. 2004 01:38:10,400 --> 01:38:10,880 Exatamente. 2005 01:38:10,880 --> 01:38:16,025 Então você vê que hashtag, de modo que corresponde a selecionar o elemento com 2006 01:38:16,025 --> 01:38:18,310 meio ID por causa dessa hashtag. 2007 01:38:18,310 --> 01:38:19,670 Hashtag significa ID. 2008 01:38:19,670 --> 01:38:22,870 E este elemento tem um ID de meio. 2009 01:38:22,870 --> 01:38:24,366 Então esse é o elemento que selecionar. 2010 01:38:24,366 --> 01:38:27,160 >> AUDIÊNCIA: [inaudível]. 2011 01:38:27,160 --> 01:38:31,090 cifrão hashtag [inaudível]? 2012 01:38:31,090 --> 01:38:31,710 >> JOSEPH ONG: Então não. 2013 01:38:31,710 --> 01:38:33,280 A questão é que você pode usar. Valor. 2014 01:38:33,280 --> 01:38:36,445 E. Valor só funciona em elementos que são insumos. 2015 01:38:36,445 --> 01:38:40,950 2016 01:38:40,950 --> 01:38:45,495 Em jQuery, seria . Val, não o valor.. 2017 01:38:45,495 --> 01:38:49,080 Então, eu vou chegar a um pequeno exemplo que demonstra tudo isso em combinação 2018 01:38:49,080 --> 01:38:49,850 em um segundo. 2019 01:38:49,850 --> 01:38:53,130 Mas eu acho que isso serve um pequeno trecho faz sentido para as pessoas até o momento. 2020 01:38:53,130 --> 01:38:55,450 Quer mudar o HTML, chamar o método HTML. 2021 01:38:55,450 --> 01:38:56,432 Sim. 2022 01:38:56,432 --> 01:38:58,200 >> AUDIÊNCIA: Você pode explicar o método de novo? 2023 01:38:58,200 --> 01:39:01,900 >> JOSEPH ONG: Então, um método é apenas um função que pertence a um, na presente 2024 01:39:01,900 --> 01:39:04,590 caso, um desses elementos DOM, porque você vê que eu 2025 01:39:04,590 --> 01:39:05,940 seleccionado o primeiro elemento. 2026 01:39:05,940 --> 01:39:07,320 Na verdade, deixe-me usar o mouse. 2027 01:39:07,320 --> 01:39:09,330 Selecionei o elemento primeiro. 2028 01:39:09,330 --> 01:39:12,310 E então eu chamei este HTML função que ele tinha. 2029 01:39:12,310 --> 01:39:15,710 E porque essa função pertence à esta coisa, nós chamamos de um método. 2030 01:39:15,710 --> 01:39:19,480 Isso é apenas um nome fantasia para ele. 2031 01:39:19,480 --> 01:39:20,730 Diga isso de novo. 2032 01:39:20,730 --> 01:39:22,880 2033 01:39:22,880 --> 01:39:25,170 Então lembre-se, selecionamos o elemento agora. 2034 01:39:25,170 --> 01:39:27,810 E nós colocá-lo dentro de o elemento variável. 2035 01:39:27,810 --> 01:39:28,600 Corrija? 2036 01:39:28,600 --> 01:39:34,380 >> Assim, quando queremos mudar o código HTML em dentro, porque era Bob antes, você 2037 01:39:34,380 --> 01:39:36,420 quer mudar o texto para Milo. 2038 01:39:36,420 --> 01:39:37,920 Então chamamos HTML. 2039 01:39:37,920 --> 01:39:41,610 E nós dizemos que o que o HTML dentro que elemento deve ser agora. 2040 01:39:41,610 --> 01:39:44,107 E assim muda para Milo, porque eu dei-lhe Milo. 2041 01:39:44,107 --> 01:39:46,542 >> AUDIÊNCIA: Então, eles estão trabalhando juntos. 2042 01:39:46,542 --> 01:39:47,030 [Inaudível] 2043 01:39:47,030 --> 01:39:47,390 >> JOSEPH ONG: Sim, sim. 2044 01:39:47,390 --> 01:39:48,180 Eles estão trabalhando juntos. 2045 01:39:48,180 --> 01:39:50,210 Então um deles seleciona o primeiro elemento. 2046 01:39:50,210 --> 01:39:52,863 E a segunda se faz algo a ele. 2047 01:39:52,863 --> 01:39:53,790 Sim. 2048 01:39:53,790 --> 01:39:56,168 >> AUDIÊNCIA: [inaudível]. 2049 01:39:56,168 --> 01:40:01,280 Se este método é diferente em HTML você tem o método igual real. 2050 01:40:01,280 --> 01:40:01,560 >> JOSEPH ONG: Yeah. 2051 01:40:01,560 --> 01:40:03,370 Isto é um método diferente. 2052 01:40:03,370 --> 01:40:04,670 Isto é um método diferente. 2053 01:40:04,670 --> 01:40:07,860 E podemos cobrir que em apenas um segundo quando chegarmos a um exemplo. 2054 01:40:07,860 --> 01:40:12,000 Eu quero ter certeza de que podemos acelerar porque estamos correndo contra o tempo. 2055 01:40:12,000 --> 01:40:15,360 Mas nós funcionamos forma ao longo do tempo agora. 2056 01:40:15,360 --> 01:40:15,490 OK. 2057 01:40:15,490 --> 01:40:16,430 Legal. 2058 01:40:16,430 --> 01:40:20,130 Então, se você quiser adicionar uma classe, não há também um método de classe add. 2059 01:40:20,130 --> 01:40:24,300 Este é apenas um exemplo do que você pode fazer com jQuery. 2060 01:40:24,300 --> 01:40:25,950 Isso só acrescenta uma classe. 2061 01:40:25,950 --> 01:40:28,660 >> Se você quiser removê-lo, você pode chamar de remoção. 2062 01:40:28,660 --> 01:40:32,280 Essa é apenas mais uma coisa que você pode fazer. 2063 01:40:32,280 --> 01:40:35,680 Assim, mais exemplos de coisas que você pode fazer. 2064 01:40:35,680 --> 01:40:37,510 Então, eu posso simplesmente colocá-lo em parte superior assim? 2065 01:40:37,510 --> 01:40:38,760 O mais jovem de remoção. 2066 01:40:38,760 --> 01:40:42,470 2067 01:40:42,470 --> 01:40:45,930 Se eu executar esse JavaScript no o topo do meu arquivo, será que funciona? 2068 01:40:45,930 --> 01:40:48,540 2069 01:40:48,540 --> 01:40:48,920 Certo. 2070 01:40:48,920 --> 01:40:50,530 Porque meio ainda não existe. 2071 01:40:50,530 --> 01:40:51,840 Então, isso não vai funcionar. 2072 01:40:51,840 --> 01:40:52,800 Ordem de execução. 2073 01:40:52,800 --> 01:40:55,040 Ele vai para o topo pela primeira vez. 2074 01:40:55,040 --> 01:40:55,540 O quê? 2075 01:40:55,540 --> 01:40:57,450 >> AUDIÊNCIA: O mais jovem ainda não existe? 2076 01:40:57,450 --> 01:40:57,810 >> JOSEPH ONG: Yeah. 2077 01:40:57,810 --> 01:40:58,710 O mais jovem ainda não existe. 2078 01:40:58,710 --> 01:40:59,600 Exatamente. 2079 01:40:59,600 --> 01:41:01,320 >> AUDIÊNCIA: Você disse meio. 2080 01:41:01,320 --> 01:41:01,510 >> JOSEPH ONG: Desculpe. 2081 01:41:01,510 --> 01:41:02,720 O mais jovem ainda não existe. 2082 01:41:02,720 --> 01:41:04,510 E a outra coisa é que eu não tenho incluído o jQuery 2083 01:41:04,510 --> 01:41:06,580 arquivo pedir src script. 2084 01:41:06,580 --> 01:41:07,960 Então, isso não vai funcionar. 2085 01:41:07,960 --> 01:41:09,580 Na verdade, eu não fiz isso em o próximo slide, que é 2086 01:41:09,580 --> 01:41:10,700 supostamente para corrigir o que quer. 2087 01:41:10,700 --> 01:41:14,120 Mas a forma como fazemos isso é JavaScript é orientado a eventos. 2088 01:41:14,120 --> 01:41:17,410 Então, o que fazemos é usar um evento Handler para fazer isso acontecer. 2089 01:41:17,410 --> 01:41:19,510 E assim eu selecionar o documento definido em primeiro lugar. 2090 01:41:19,510 --> 01:41:23,810 Eu digo, OK, quando o documento é pronto, deixe-me executar uma função. 2091 01:41:23,810 --> 01:41:25,470 Então, isso é tudo o que os meios de sintaxe. 2092 01:41:25,470 --> 01:41:27,100 >> Selecionei o documento. 2093 01:41:27,100 --> 01:41:29,530 Agora, quando o documento é pronto, execute a função. 2094 01:41:29,530 --> 01:41:32,970 E assim por aqui quando o documento é pronto, o que significa que todo o HTML tem 2095 01:41:32,970 --> 01:41:36,140 carregado, então eu executar a função que remove esse elemento. 2096 01:41:36,140 --> 01:41:40,270 E agora, quando eu executar esta função que passei em pronto, estou 2097 01:41:40,270 --> 01:41:43,780 garantido que todo o código HTML na página vai existir em primeiro lugar. 2098 01:41:43,780 --> 01:41:44,100 Sim. 2099 01:41:44,100 --> 01:41:44,425 Pergunta? 2100 01:41:44,425 --> 01:41:48,200 >> AUDIÊNCIA: Qual é a palavra-chave do evento dentro da função? 2101 01:41:48,200 --> 01:41:51,750 >> JOSEPH ONG: Então, a palavra-chave do evento na função é apenas um parâmetro que 2102 01:41:51,750 --> 01:41:53,490 é passado para a função para qualquer evento. 2103 01:41:53,490 --> 01:41:55,470 É apenas algo que você obter gratuitamente. 2104 01:41:55,470 --> 01:41:59,320 Quando você estiver usando manipuladores de chave em pset8, esse evento poderia dizer-lhe, por 2105 01:41:59,320 --> 01:42:01,350 exemplo, qual é a chave que você pressionou. 2106 01:42:01,350 --> 01:42:05,540 Neste caso, para um evento pronto, na verdade não é super útil. 2107 01:42:05,540 --> 01:42:08,640 Mas, para um evento de tecla pressionada, é mais útil, porque você começa a conhecer o que 2108 01:42:08,640 --> 01:42:12,330 tecla pressionada pela chave acessando código fora esse objeto de evento. 2109 01:42:12,330 --> 01:42:13,530 Corrija? 2110 01:42:13,530 --> 01:42:15,160 Será que isso faz sentido? 2111 01:42:15,160 --> 01:42:16,280 OK. 2112 01:42:16,280 --> 01:42:16,580 Sim. 2113 01:42:16,580 --> 01:42:17,150 Pergunta? 2114 01:42:17,150 --> 01:42:19,290 >> AUDIÊNCIA: Então, você pode colocar o tag script mais para baixo? 2115 01:42:19,290 --> 01:42:19,940 >> JOSEPH ONG: Então, sim. 2116 01:42:19,940 --> 01:42:21,500 Você poderia colocar o script marcar mais para baixo. 2117 01:42:21,500 --> 01:42:23,090 Mas, então, ele só se torna realmente confuso. 2118 01:42:23,090 --> 01:42:26,590 E nós gostamos de centralizar todas as do nosso código em um só lugar. 2119 01:42:26,590 --> 01:42:28,290 E isso vai nos permitir fazer isso. 2120 01:42:28,290 --> 01:42:32,010 Lembre-se antes eu disse que há um agradável maneira de assegurar que os elementos são 2121 01:42:32,010 --> 01:42:33,880 na página antes de executar o código? 2122 01:42:33,880 --> 01:42:36,079 E esta é apenas uma maneira agradável você conseguir isso. 2123 01:42:36,079 --> 01:42:37,329 >> AUDIÊNCIA: [inaudível]. 2124 01:42:37,329 --> 01:42:41,710 2125 01:42:41,710 --> 01:42:42,230 >> JOSEPH ONG: Yeah. 2126 01:42:42,230 --> 01:42:43,460 Você ainda teria que, certo? 2127 01:42:43,460 --> 01:42:46,930 Porque lembre-se, você incluiu o arquivo no topo da página. 2128 01:42:46,930 --> 01:42:49,890 Então, ele vai executar antes de você chegar ao fundo da página. 2129 01:42:49,890 --> 01:42:54,600 2130 01:42:54,600 --> 01:42:55,180 OK. 2131 01:42:55,180 --> 01:42:59,210 Assim, você também pode adicionar um diferente tipo de manipulador de eventos. 2132 01:42:59,210 --> 01:43:00,640 Este apenas processa cliques. 2133 01:43:00,640 --> 01:43:03,910 Quando clico em mais jovem, então ele irá aparecer com um alerta. 2134 01:43:03,910 --> 01:43:05,440 Este é apenas um diferente tipo de evento. 2135 01:43:05,440 --> 01:43:08,840 Ao contrário do evento pronto, agora você usar o evento click quando você recebe 2136 01:43:08,840 --> 01:43:10,190 clica em um elemento. 2137 01:43:10,190 --> 01:43:13,860 >> E assim, neste caso, lembre-se, o clique manipulador está anexado a mais nova. 2138 01:43:13,860 --> 01:43:16,080 Por isso, só acontece quando Eu clico no mais novo. 2139 01:43:16,080 --> 01:43:19,510 E na outra, o evento pronto foi anexado ao documento. 2140 01:43:19,510 --> 01:43:23,750 Por isso, espera que o documento para ficar pronto. 2141 01:43:23,750 --> 01:43:25,120 Faz sentido? 2142 01:43:25,120 --> 01:43:26,190 Eu acho que eu posso seguir em frente. 2143 01:43:26,190 --> 01:43:26,610 Sim. 2144 01:43:26,610 --> 01:43:26,980 Pergunta? 2145 01:43:26,980 --> 01:43:28,230 >> AUDIÊNCIA: [inaudível]. 2146 01:43:28,230 --> 01:43:31,676 2147 01:43:31,676 --> 01:43:33,620 nesse caso você use [inaudível]. 2148 01:43:33,620 --> 01:43:36,650 >> JOSEPH ONG: Ah, sim, porque neste caso, eu tenho que esperar para os mais novos 2149 01:43:36,650 --> 01:43:40,740 elemento que aparece na primeira tela antes que eu possa anexar um manipulador de cliques para 2150 01:43:40,740 --> 01:43:43,062 ele, que é por isso que eu colocá-lo dentro de um documento pronto. 2151 01:43:43,062 --> 01:43:45,780 2152 01:43:45,780 --> 01:43:46,840 OK. 2153 01:43:46,840 --> 01:43:52,390 E no próximo, de modo que este é um grande exemplo de como você combinar tudo. 2154 01:43:52,390 --> 01:43:55,930 Este é apenas um exemplo de validação de formulário você já viu em palestra. 2155 01:43:55,930 --> 01:43:58,410 Então, levá-lo passo a passo como você passar por isso. 2156 01:43:58,410 --> 01:43:59,590 E será totalmente OK. 2157 01:43:59,590 --> 01:44:01,400 Apenas leia de cima para baixo. 2158 01:44:01,400 --> 01:44:03,030 >> Eu tenho um formulário na parte inferior. 2159 01:44:03,030 --> 01:44:07,590 Quando o documento estiver pronto, eu anexar um enviar manipulador à forma, de modo que 2160 01:44:07,590 --> 01:44:12,910 quando eu enviar o formulário, recebo os valores dentro de cada uma dessas entradas. 2161 01:44:12,910 --> 01:44:14,560 E eu verificar se ele está em branco. 2162 01:44:14,560 --> 01:44:17,090 Se é branco, eu retornar falso, porque Eu não quero enviar o formulário, 2163 01:44:17,090 --> 01:44:18,950 porque a forma está errada. 2164 01:44:18,950 --> 01:44:22,040 Se a senha estiver em branco ou é menos de oito caracteres, não apresentar 2165 01:44:22,040 --> 01:44:24,470 a forma, porque isso também é errado. 2166 01:44:24,470 --> 01:44:28,150 Eo falso retorno apenas impede a forma de apresentação e 2167 01:44:28,150 --> 01:44:30,150 indo para uma nova página. 2168 01:44:30,150 --> 01:44:31,310 >> E, esperamos, isso faz sentido. 2169 01:44:31,310 --> 01:44:34,650 Eu acho que vocês devem percorrer Neste passo a passo código em seu próprio país. 2170 01:44:34,650 --> 01:44:38,350 E uma vez que você entender o que a seleção elementos e fazer coisas para ele 2171 01:44:38,350 --> 01:44:40,520 realmente implica, isso fará com que muito sentido para você. 2172 01:44:40,520 --> 01:44:41,295 Sim? 2173 01:44:41,295 --> 01:44:44,150 >> AUDIÊNCIA: O que faz o name = nome significa? 2174 01:44:44,150 --> 01:44:48,530 >> JOSEPH ONG: Então o nome = nome de usuário e name = senha significa apenas olhar para o 2175 01:44:48,530 --> 01:44:50,730 atributo de qualquer você está selecionando. 2176 01:44:50,730 --> 01:44:51,790 E, em seguida, que tem de corresponder. 2177 01:44:51,790 --> 01:44:53,870 Então vamos para o registro. 2178 01:44:53,870 --> 01:44:56,240 E então olhamos para todas as entradas e registro. 2179 01:44:56,240 --> 01:44:59,990 E, então, escolher aquele em que o nome atributo é igual ao nome de usuário. 2180 01:44:59,990 --> 01:45:04,040 Assim que o primeiro seletor apenas seleciona a entrada de nome de usuário. 2181 01:45:04,040 --> 01:45:08,220 E que segundo seletor só seleciona a senha de uso único, porque aqueles têm 2182 01:45:08,220 --> 01:45:12,240 seus atributos nome definido como o que eles deveriam ser. 2183 01:45:12,240 --> 01:45:12,575 Pergunta? 2184 01:45:12,575 --> 01:45:17,030 >> AUDIÊNCIA: No envio, como é que o parte inferior resolver a parte de cima? 2185 01:45:17,030 --> 01:45:19,350 >> JOSEPH ONG: Então é porque do manipulador de eventos. 2186 01:45:19,350 --> 01:45:23,000 Então, nós estamos à espera de um evento de apresentação que é demitido do formulário. 2187 01:45:23,000 --> 01:45:24,730 E isso é tudo o que é enviar. 2188 01:45:24,730 --> 01:45:26,080 Por que eu chamo apresentar lá em cima? 2189 01:45:26,080 --> 01:45:28,870 Diz, quando o formulário é enviado, Recebo um evento de enviar. 2190 01:45:28,870 --> 01:45:33,480 Então deixe-me que interceptar e em seguida, executar esse código em seu lugar. 2191 01:45:33,480 --> 01:45:33,823 Sim? 2192 01:45:33,823 --> 01:45:35,866 >> AUDIÊNCIA: Por que você tem ter evento função? 2193 01:45:35,866 --> 01:45:38,580 Por que você não pode simplesmente [inaudível]? 2194 01:45:38,580 --> 01:45:41,140 >> JOSEPH ONG: Porque em JavaScript, você tem que declarar as funções. 2195 01:45:41,140 --> 01:45:42,910 É assim que ele funciona em JavaScript. 2196 01:45:42,910 --> 01:45:44,800 Você tem que dizer que vai para executar uma função. 2197 01:45:44,800 --> 01:45:47,290 Então você está dizendo que você está esperando uma função aqui em vez de 2198 01:45:47,290 --> 01:45:48,260 apenas chaves. 2199 01:45:48,260 --> 01:45:50,460 >> AUDIÊNCIA: E a função é tudo o que se segue? 2200 01:45:50,460 --> 01:45:50,650 >> JOSEPH ONG: Yeah. 2201 01:45:50,650 --> 01:45:52,790 A função é o que está dentro as chaves após 2202 01:45:52,790 --> 01:45:53,630 a palavra-chave função. 2203 01:45:53,630 --> 01:45:54,045 Sim? 2204 01:45:54,045 --> 01:45:55,295 >> AUDIÊNCIA: [inaudível]. 2205 01:45:55,295 --> 01:46:00,180 2206 01:46:00,180 --> 01:46:00,660 >> JOSEPH ONG: Para enviar? 2207 01:46:00,660 --> 01:46:03,520 >> AUDIÊNCIA: Não, para a função sem o evento. 2208 01:46:03,520 --> 01:46:03,770 >> JOSEPH ONG: Yeah. 2209 01:46:03,770 --> 01:46:05,610 Assim, sem o evento, você pode ter isso. 2210 01:46:05,610 --> 01:46:08,480 Se você não precisa do evento, então você pode simplesmente omiti-lo. 2211 01:46:08,480 --> 01:46:12,220 Mas se você fizer isso, então você basta colocá-lo lá. 2212 01:46:12,220 --> 01:46:12,520 Sim. 2213 01:46:12,520 --> 01:46:13,190 Pergunta rápida? 2214 01:46:13,190 --> 01:46:14,440 >> AUDIÊNCIA: [inaudível]. 2215 01:46:14,440 --> 01:46:21,170 2216 01:46:21,170 --> 01:46:21,440 >> JOSEPH ONG: Yeah. 2217 01:46:21,440 --> 01:46:24,550 Porque o que você precisa fazer, o document.ready apenas diz esperar por tudo 2218 01:46:24,550 --> 01:46:26,540 o código HTML na página para carregar primeiro. 2219 01:46:26,540 --> 01:46:30,510 E, geralmente, você quer que seus elementos no local antes de executar qualquer código. 2220 01:46:30,510 --> 01:46:31,030 Tudo bem. 2221 01:46:31,030 --> 01:46:32,180 Temos que ir para o Ajax. 2222 01:46:32,180 --> 01:46:33,110 Nós não temos muito tempo. 2223 01:46:33,110 --> 01:46:35,170 Então, prós e contras. 2224 01:46:35,170 --> 01:46:37,450 JavaScript é tentativa mais fácil escrever com jQuery. 2225 01:46:37,450 --> 01:46:38,930 Mas jQuery é uma espécie de lento. 2226 01:46:38,930 --> 01:46:42,290 >> É como o PHP é mais lento do que C, porque ele é interpretado. 2227 01:46:42,290 --> 01:46:45,690 E jQuery é um pouco mais lento do que JavaScript, porque ele faz um monte de 2228 01:46:45,690 --> 01:46:46,630 coisas sob o capô. 2229 01:46:46,630 --> 01:46:48,660 E por isso, se você estiver usando jQuery, é apenas um pouco mais lento do que 2230 01:46:48,660 --> 01:46:51,630 JavaScript, embora dá-lhe agradável elegância. 2231 01:46:51,630 --> 01:46:53,970 E, finalmente, o Ajax. 2232 01:46:53,970 --> 01:46:59,170 Até agora, com o Ajax, você ainda não viu Ajax em termos de pset7 ainda, porque 2233 01:46:59,170 --> 01:47:01,150 quando você faz, você envia um formulário para cotação. 2234 01:47:01,150 --> 01:47:02,350 Ele carrega uma nova página. 2235 01:47:02,350 --> 01:47:04,440 Então você começa este grande clarão branco na página enquanto que 2236 01:47:04,440 --> 01:47:06,820 cargas segunda página, correto? 2237 01:47:06,820 --> 01:47:08,780 >> Seria muito bom se você não tem esse flash. 2238 01:47:08,780 --> 01:47:11,600 Como o Facebook, se você acabou de se deslocar para no fundo, ele adiciona novos conteúdos 2239 01:47:11,600 --> 01:47:13,490 sem atualizar a página inteira. 2240 01:47:13,490 --> 01:47:15,420 Então algo como isso seria bom. 2241 01:47:15,420 --> 01:47:17,370 Este é o código JavaScript no lado esquerdo. 2242 01:47:17,370 --> 01:47:19,390 Você fica com o que está dentro do que a entrada. 2243 01:47:19,390 --> 01:47:21,340 Você começa a Informação da do Yahoo! 2244 01:47:21,340 --> 01:47:27,440 E então você fazer uma grande cadeia que diz: OK, esta é a mensagem que eu quero 2245 01:47:27,440 --> 01:47:28,400 para mostrar na tela. 2246 01:47:28,400 --> 01:47:32,280 E então você colocar essa mensagem dentro de algum elemento HTML que recebe 2247 01:47:32,280 --> 01:47:33,970 exibida na tela. 2248 01:47:33,970 --> 01:47:35,540 >> Então, isso é tudo o que está acontecendo aqui. 2249 01:47:35,540 --> 01:47:39,410 Então, basicamente, porque isso é tudo JavaScript e você não precisa correr 2250 01:47:39,410 --> 01:47:42,980 mais PHP, esta irá certificar-se que a página não atualizar. 2251 01:47:42,980 --> 01:47:47,470 Portanto, esta é apenas uma idéia abstrata que eu estou dizendo aqui, por enquanto. 2252 01:47:47,470 --> 01:47:50,630 A idéia abstrata é que se você fizer isso tudo em JavaScript, você não tem um 2253 01:47:50,630 --> 01:47:52,330 atualização da página. 2254 01:47:52,330 --> 01:47:53,800 Mas como você realmente fazer isso? 2255 01:47:53,800 --> 01:47:56,230 >> Bem, na verdade, vamos falar sobre um problema com este primeiro. 2256 01:47:56,230 --> 01:47:59,340 Um problema é em JavaScript, execução é síncrona. 2257 01:47:59,340 --> 01:48:02,000 Então você tem que esperar por um linha para terminar antes de você 2258 01:48:02,000 --> 01:48:03,370 executar a próxima linha. 2259 01:48:03,370 --> 01:48:06,130 E se eu estou indo para o Yahoo!, e seus servidores são muito lento, e 2260 01:48:06,130 --> 01:48:08,790 ele leva três segundos para me devolva essa informação estoque? 2261 01:48:08,790 --> 01:48:12,620 Quando eu bati essa linha de preço, se o execução é síncrono, como é por 2262 01:48:12,620 --> 01:48:15,390 padrão, o que só vai fazer é o seu browser vai parar para 2263 01:48:15,390 --> 01:48:15,930 Três segundos. 2264 01:48:15,930 --> 01:48:18,900 E você não vai ser capaz de fazer nada enquanto ele recebe os dados. 2265 01:48:18,900 --> 01:48:20,010 Vai ser congelado. 2266 01:48:20,010 --> 01:48:20,800 >> E isso é ruim. 2267 01:48:20,800 --> 01:48:23,390 Você não quer que um usuário tem uma página web congelado. 2268 01:48:23,390 --> 01:48:24,170 Corrija? 2269 01:48:24,170 --> 01:48:25,480 Isso é apenas ruim. 2270 01:48:25,480 --> 01:48:26,770 Todo mundo concorda? 2271 01:48:26,770 --> 01:48:29,270 Se você está navegando no Facebook e congela e você não pode fazer nada, você 2272 01:48:29,270 --> 01:48:31,920 ficar muito frustrado. 2273 01:48:31,920 --> 01:48:34,960 Então a solução é que fazemos algo assíncrona vez. 2274 01:48:34,960 --> 01:48:38,910 Então, tudo isso diz assíncrona é, eu vou pedir a este 2275 01:48:38,910 --> 01:48:40,280 URL para alguns dados. 2276 01:48:40,280 --> 01:48:41,610 E então eu vou continuar. 2277 01:48:41,610 --> 01:48:45,330 Eu estou indo só para manter a execução qualquer código que foi depois disso. 2278 01:48:45,330 --> 01:48:49,290 >> E então sempre que os dados estão prontos, então eu vou processá-lo. 2279 01:48:49,290 --> 01:48:50,540 Isso é tudo o que está dizendo. 2280 01:48:50,540 --> 01:48:52,795 2281 01:48:52,795 --> 01:48:56,710 >> AUDIÊNCIA: Ajax só faz assíncrono código? 2282 01:48:56,710 --> 01:48:58,560 >> JOSEPH ONG: É um assíncrono forma de Buscando dados. 2283 01:48:58,560 --> 01:49:01,230 Assim, a primeira coisa sobre o Ajax é ele me permite obter dados 2284 01:49:01,230 --> 01:49:03,170 a partir de um site externo. 2285 01:49:03,170 --> 01:49:07,045 E a segunda coisa é que torna-se que a minha página não parar enquanto estou 2286 01:49:07,045 --> 01:49:07,970 buscar esses dados. 2287 01:49:07,970 --> 01:49:09,600 Essa é a parte assíncrona do mesmo. 2288 01:49:09,600 --> 01:49:13,040 Porque ele vai em outro lugar, porque eu digo que eu continue enquanto 2289 01:49:13,040 --> 01:49:14,900 é buscar esses dados, que torna assíncrona. 2290 01:49:14,900 --> 01:49:17,170 Eu mantenho a execução. 2291 01:49:17,170 --> 01:49:18,960 >> Portanto, manter isso assíncrona idéia em mente. 2292 01:49:18,960 --> 01:49:22,010 E eu vou te mostrar o que é a diferença. 2293 01:49:22,010 --> 01:49:23,920 A versão síncrona é, no lado esquerdo. 2294 01:49:23,920 --> 01:49:26,240 A versão assíncrona é, no lado direito. 2295 01:49:26,240 --> 01:49:29,170 Olhe para os números para ver qual etapas correspondem ao que 2296 01:49:29,170 --> 01:49:30,610 executa em cada linha. 2297 01:49:30,610 --> 01:49:32,730 Lá, o alerta aparece em primeiro lugar. 2298 01:49:32,730 --> 01:49:34,590 Porque obter informações estoque do Yahoo! 2299 01:49:34,590 --> 01:49:37,250 leva três segundos, barracas durante três segundos. 2300 01:49:37,250 --> 01:49:39,880 E, então, alerta o preço depois desses três segundos. 2301 01:49:39,880 --> 01:49:43,690 >> Então, agora, que os shows de alerta se naquela época - 2302 01:49:43,690 --> 01:49:44,610 três segundo pol 2303 01:49:44,610 --> 01:49:47,670 E então ele alerta por depois disso. 2304 01:49:47,670 --> 01:49:48,930 Então, ele só vai passo a passo. 2305 01:49:48,930 --> 01:49:51,200 É como o que vocês aceitaria, correto? 2306 01:49:51,200 --> 01:49:54,170 Com a execução assíncrona, você alerta em primeiro lugar. 2307 01:49:54,170 --> 01:49:57,410 Então você vai para fora para este URL. 2308 01:49:57,410 --> 01:49:59,530 E você diz, eu vou basta perguntar para os dados. 2309 01:49:59,530 --> 01:50:01,170 E então eu vou processá-lo mais tarde. 2310 01:50:01,170 --> 01:50:04,230 Portanto, imediatamente executa o próxima linha depois que eu que fazer 2311 01:50:04,230 --> 01:50:05,710 solicitação assíncrona. 2312 01:50:05,710 --> 01:50:08,920 >> Então, um 0,001 segundo, você vê oi alerta. 2313 01:50:08,920 --> 01:50:10,960 Executar essa função, bye alerta. 2314 01:50:10,960 --> 01:50:14,240 E porque eu fiz uma promessa que eu iria processar os dados mais tarde, o 2315 01:50:14,240 --> 01:50:17,920 acontece é que, quando os dados vem de volta três segundo mais tarde, depois que eu corro 2316 01:50:17,920 --> 01:50:21,380 função que eu tenho lá. 2317 01:50:21,380 --> 01:50:21,870 Sim? 2318 01:50:21,870 --> 01:50:25,750 >> AUDIÊNCIA: Você poderia especificar ou esclarecer o que significa Ajax? 2319 01:50:25,750 --> 01:50:30,460 >> JOSEPH ONG: Então Ajax é uma forma que se eu precisam de dados quando eu estou em um site e eu 2320 01:50:30,460 --> 01:50:34,690 não quer atualizar a página, então Eu uso essa tecnologia chamada Ajax. 2321 01:50:34,690 --> 01:50:40,630 Isso só significa, essencialmente, ir buscar dados de outro site. 2322 01:50:40,630 --> 01:50:43,724 E fazê-lo de uma forma que apenas não parar minha página web. 2323 01:50:43,724 --> 01:50:46,650 >> AUDIÊNCIA: Assim é que uma inerente parte de JavaScript ou jQuery? 2324 01:50:46,650 --> 01:50:50,590 >> JOSEPH ONG: Então, alguém escreveu uma maneira de fazer isso em JavaScript muito tempo atrás. 2325 01:50:50,590 --> 01:50:52,050 Em um ponto, ele não existia. 2326 01:50:52,050 --> 01:50:56,630 E então alguém inventou esta técnica para permitir que as pessoas a solicitar esses dados 2327 01:50:56,630 --> 01:50:57,680 desta forma. 2328 01:50:57,680 --> 01:50:59,550 E eles escreveram algumas coisas para fazer isso por você. 2329 01:50:59,550 --> 01:51:01,605 E jQuery apenas lhe dá esta muito agradável maneira de fazê-lo 2330 01:51:01,605 --> 01:51:03,112 com esse $. obter função. 2331 01:51:03,112 --> 01:51:07,200 2332 01:51:07,200 --> 01:51:09,480 pergunta? 2333 01:51:09,480 --> 01:51:11,560 Eu posso responder a perguntas sobre Ajax tarde demais. 2334 01:51:11,560 --> 01:51:13,870 Eu vou estar aqui. 2335 01:51:13,870 --> 01:51:16,390 >> Por isso, vamos nos buscar dados sem atualizar a página. 2336 01:51:16,390 --> 01:51:18,200 E vamos nós fazer isso em de forma assíncrona que 2337 01:51:18,200 --> 01:51:19,450 não congelar a página. 2338 01:51:19,450 --> 01:51:22,680 2339 01:51:22,680 --> 01:51:27,310 Por muito tempo, não leu, se isso explicação era muito longo para você. 2340 01:51:27,310 --> 01:51:29,430 Então, finalmente, local cruz ataques de script. 2341 01:51:29,430 --> 01:51:30,910 Vimos isso com Zamyla. 2342 01:51:30,910 --> 01:51:34,285 Se em meu banco de dados alguém tem este nome, o que é essa tag script, e eu 2343 01:51:34,285 --> 01:51:38,280 tem algum código na minha página que imprime os nomes das pessoas em uma fila, ou eu tenho 2344 01:51:38,280 --> 01:51:43,310 algum código JavaScript que insere este nome para a página, 2345 01:51:43,310 --> 01:51:45,680 HTML que é produzido? 2346 01:51:45,680 --> 01:51:47,290 Bem, eu imprimir a tag HTML. 2347 01:51:47,290 --> 01:51:48,390 Eu imprimir todas essas tags. 2348 01:51:48,390 --> 01:51:50,740 >> Eu chegar à parte onde eu sou impressão sair com meus amigos. 2349 01:51:50,740 --> 01:51:52,980 Imprimo Lauren fora. 2350 01:51:52,980 --> 01:51:54,200 Ele imprimir Milo fora. 2351 01:51:54,200 --> 01:51:56,810 E então o meu nome no banco de dados é pós roteiro 2352 01:51:56,810 --> 01:51:58,060 status do Facebook que não faz jus. 2353 01:51:58,060 --> 01:52:00,740 2354 01:52:00,740 --> 01:52:04,330 Porque eu inseriu esta na página porque parece que JavaScript, quando 2355 01:52:04,330 --> 01:52:07,930 esta página é enviada para o usuário, ele é executado como JavaScript. 2356 01:52:07,930 --> 01:52:10,800 E por isso este é o que chamamos de ataque cross-site scripting. 2357 01:52:10,800 --> 01:52:14,570 Alguém coloca a informação malicioso seu banco de dados, que podem corresponder a 2358 01:52:14,570 --> 01:52:17,080 alguma corda adicional ou alguma corda JavaScript. 2359 01:52:17,080 --> 01:52:20,130 >> E quando ele é impresso para o página desta forma, então o que 2360 01:52:20,130 --> 01:52:22,580 acontece é que código ruim é executado que eu não tinha a intenção 2361 01:52:22,580 --> 01:52:25,110 para ele para se executado. 2362 01:52:25,110 --> 01:52:28,230 E isso é tudo um cross-site ataque de script é. 2363 01:52:28,230 --> 01:52:31,790 E a maneira de dar a volta isto é como Zamyla disse. 2364 01:52:31,790 --> 01:52:34,340 Você só embrulhar as coisas em HTML caracteres especiais. 2365 01:52:34,340 --> 01:52:39,460 E este HTML caracteres especiais é um PHP função que irá impedir que este tipo 2366 01:52:39,460 --> 01:52:42,000 de coisa aconteça com você se você tem um malicioso 2367 01:52:42,000 --> 01:52:43,830 corda em seu banco de dados. 2368 01:52:43,830 --> 01:52:47,650 Ele só lhe escapa, de modo que não faz se interpretado como HTML. 2369 01:52:47,650 --> 01:52:50,960 Ele substitui os pequenos suportes com o que chamamos de entidades. 2370 01:52:50,960 --> 01:52:52,250 E nós fomos sobre isso na palestra também. 2371 01:52:52,250 --> 01:52:55,800 Então, eu acho que vocês devem ter um bom entendimento sobre isso. 2372 01:52:55,800 --> 01:52:57,420 Dúvidas? 2373 01:52:57,420 --> 01:52:57,820 Sim. 2374 01:52:57,820 --> 01:53:00,860 >> AUDIÊNCIA: Então, como é que o [inaudível]? 2375 01:53:00,860 --> 01:53:01,555 >> JOSEPH ONG: Diga isso de novo. 2376 01:53:01,555 --> 01:53:02,500 >> AUDIÊNCIA: Como é que o monitor - 2377 01:53:02,500 --> 01:53:02,860 >> JOSEPH ONG: Certo. 2378 01:53:02,860 --> 01:53:06,080 Então você tem algo que diz, quando Me registrar, digite o meu nome. 2379 01:53:06,080 --> 01:53:09,390 Eu só digitar nesse campo, meu nome é stript cargo não faz jus Facebook 2380 01:53:09,390 --> 01:53:11,570 estado perto tag script. 2381 01:53:11,570 --> 01:53:15,690 E isso só é colocado no banco de dados, porque eu não posso dizer que alguém 2382 01:53:15,690 --> 01:53:18,260 no mundo não tem um nome com uma seta para a esquerda nele ou o 2383 01:53:18,260 --> 01:53:19,036 roteiro palavra nele. 2384 01:53:19,036 --> 01:53:21,330 Isso não faz muito sentido. 2385 01:53:21,330 --> 01:53:24,560 Então, eu só tenho que ter certeza de que eu higienizar o material, antes de imprimi-lo 2386 01:53:24,560 --> 01:53:25,420 para a página. 2387 01:53:25,420 --> 01:53:27,140 >> AUDIÊNCIA: Assim, os cartões especiais do HTML impede que as tags de script? 2388 01:53:27,140 --> 01:53:28,710 >> JOSEPH ONG: Yeah. 2389 01:53:28,710 --> 01:53:29,960 Por isso não impede que as tags de script. 2390 01:53:29,960 --> 01:53:32,320 Ele só garante que o tags de script não recebem 2391 01:53:32,320 --> 01:53:35,120 interpretado como HTML ou - 2392 01:53:35,120 --> 01:53:35,400 sim. 2393 01:53:35,400 --> 01:53:38,470 Ele só aparece como o que que realmente é. 2394 01:53:38,470 --> 01:53:39,220 Tudo bem. 2395 01:53:39,220 --> 01:53:40,930 Então essa foi a revisão quiz. 2396 01:53:40,930 --> 01:53:41,830 Legal. 2397 01:53:41,830 --> 01:53:45,088 >> [Aplausos]