1 00:00:00,000 --> 00:00:02,270 >> [Test: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Université de Harvard] 3 00:00:04,620 --> 00:00:07,660 [C'est CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Bienvenue à tous. C'est l'examen de test 1. 5 00:00:11,610 --> 00:00:15,040 Tout comme un avertissement, cela est - je veux dire, nous allons essayer de couvrir 6 00:00:15,040 --> 00:00:17,770 autant de matériel que possible, mais cela ne signifie pas que 7 00:00:17,770 --> 00:00:20,780 nous allons couvrir toutes les choses qui peuvent être en jeu-questionnaire 1. 8 00:00:20,780 --> 00:00:25,270 Assurez-vous donc que vous prenez aussi un oeil à la conférence, les articles, tout ce que vous pouvez. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 va être le mercredi, mercredi prochain. 10 00:00:28,240 --> 00:00:33,800 Veillez donc à étudier. Il va être, à peu près, comme le premier test 11 00:00:33,800 --> 00:00:36,390 en ce qui concerne sa forme, mais il va probablement être beaucoup plus difficile. 12 00:00:36,390 --> 00:00:39,600 Au moins, l'année dernière, lorsque j'ai pris 50 ans, je pensais que c'était beaucoup plus difficile. 13 00:00:39,600 --> 00:00:42,410 Donc beaucoup étudier. 14 00:00:42,410 --> 00:00:45,190 >> Je vais couvrir les structures de données et le codage de Huffman. 15 00:00:45,190 --> 00:00:47,910 C'est quelque chose que beaucoup de gens pensent est complexe, 16 00:00:47,910 --> 00:00:51,930 mais je vais essayer de le rendre aussi facile que possible. 17 00:00:51,930 --> 00:00:56,330 Tout d'abord, ce que nous voulons vous les gars de savoir questionnaire 1 est de 18 00:00:56,330 --> 00:01:00,970 comprendre les descriptions conceptuelles de chacune des structures de données que je vais présenter. 19 00:01:00,970 --> 00:01:03,960 Cela signifie que vous n'avez pas réellement 20 00:01:03,960 --> 00:01:07,020 mettre en œuvre une table de hachage dans votre quiz 1. 21 00:01:07,020 --> 00:01:10,250 Nous ne voulons pas d'implémenter toute une table de hachage, peut-être nous essaierons 22 00:01:10,250 --> 00:01:13,090 pour vous faire mettre en œuvre certaines fonctions, 23 00:01:13,090 --> 00:01:16,940 opérations les plus courantes, mais nous n'allons pas vous faire mettre en œuvre tout. 24 00:01:16,940 --> 00:01:21,010 Il est donc important que vous compreniez le concept derrière chaque structure de données 25 00:01:21,010 --> 00:01:23,510 et aussi que vous êtes capable de coder en C, 26 00:01:23,510 --> 00:01:27,880 seulement les opérations les plus communes qu'ils ont pour chaque structure de données. 27 00:01:27,880 --> 00:01:30,090 Et aussi être en mesure d'examiner les pointeurs et les structures, 28 00:01:30,090 --> 00:01:33,470 car ils apparaissent beaucoup dans ces structures de données. 29 00:01:33,470 --> 00:01:37,380 >> Abord, listes liées. Les listes chaînées sont en fait très similaires aux tableaux, 30 00:01:37,380 --> 00:01:39,930 mais la différence entre une liste chaînée et d'un tableau, 31 00:01:39,930 --> 00:01:45,160 tout d'abord, que est une liste liée a une taille très flexible, 32 00:01:45,160 --> 00:01:50,060 tandis que dans les tableaux que vous avez à choisir soit une très grande taille pour le réseau, 33 00:01:50,060 --> 00:01:53,710 si vous savez que vous allez être en mesure de stocker toutes vos données dans ce tableau, 34 00:01:53,710 --> 00:01:59,370 ou vous devez utiliser malloc pour avoir une longueur flexible de tableau. 35 00:01:59,370 --> 00:02:03,680 Dans les listes chaînées, il est très facile d'obtenir simplement plus d'éléments, 36 00:02:03,680 --> 00:02:07,210 mettre plusieurs éléments dans la liste chaînée ou supprimer des éléments. 37 00:02:07,210 --> 00:02:09,370 Et en fait, si vous ne voulez pas la liste liée à trier, 38 00:02:09,370 --> 00:02:13,950 vous pouvez rechercher et supprimer des éléments en temps constant, 39 00:02:13,950 --> 00:02:16,800 si O (1) temps, il est donc très pratique. 40 00:02:16,800 --> 00:02:20,660 Vous avez juste à faire attention à ne pas oublier de malloc et free nœuds, 41 00:02:20,660 --> 00:02:25,510 simplement parce que si vous ne le faites pas, vous aurez des fuites de mémoire. 42 00:02:25,510 --> 00:02:31,480 Alors listes liées - la définition d'un noeud est juste comme ce que nous avons là. 43 00:02:31,480 --> 00:02:35,110 Je mets int n, mais vous pouvez stocker les données que vous souhaitez. 44 00:02:35,110 --> 00:02:37,280 Donc, si vous souhaitez stocker une chaîne, c'est bien. 45 00:02:37,280 --> 00:02:41,690 Si vous souhaitez stocker une structure, c'est bien, un double, ce que vous voulez. 46 00:02:41,690 --> 00:02:44,630 Je viens de mettre int n pour les exemples ici. 47 00:02:44,630 --> 00:02:46,800 Et vous avez un pointeur vers le nœud suivant. 48 00:02:46,800 --> 00:02:51,940 Donc, en gros, une liste liée a des données, et il pointe vers le nœud suivant. 49 00:02:51,940 --> 00:02:56,710 Si c'est le dernier élément de la liste chaînée, il va pointer vers NULL. 50 00:02:56,710 --> 00:02:59,060 Il s'agit donc d'un exemple d'une liste chaînée. 51 00:02:59,250 --> 00:03:05,960 >> Bon, alors maintenant nous allons voir ce que nous devrions faire si je veux insérer un élément dans une liste chaînée. 52 00:03:05,960 --> 00:03:08,810 Tout d'abord, une fonction insert sera de type void 53 00:03:08,810 --> 00:03:11,350 parce que je ne veux pas retourner tout. 54 00:03:11,350 --> 00:03:14,200 Et je vais prendre un int comme argument, 55 00:03:14,200 --> 00:03:17,090 parce que je veux savoir ce que je veux insérer. 56 00:03:17,090 --> 00:03:21,840 Alors, quelle est la première chose que je dois faire? Eh bien, je dois malloc sur newnode, 57 00:03:21,840 --> 00:03:24,240 de sorte que c'est la première ligne. 58 00:03:24,240 --> 00:03:27,580 Je suis juste la création d'un nouveau nœud à mettre dans une liste chaînée. 59 00:03:27,580 --> 00:03:32,360 Alors, que puis-je faire? Eh bien, nous savons que dans nos implémentations de listes chaînées 60 00:03:32,360 --> 00:03:38,180 en classe, nous avons toujours mis la tête comme une variable globale. 61 00:03:38,180 --> 00:03:41,800 Donc, ce que nous pouvons faire est de changer la tête. 62 00:03:41,800 --> 00:03:44,300 Je peux faire ce nouveau nœud être le nouveau chef, 63 00:03:44,300 --> 00:03:46,670 et il va pointer vers l'ancien chef. 64 00:03:46,670 --> 00:03:50,390 Comment pouvons-nous faire? La première chose que j'ai à faire 65 00:03:50,390 --> 00:03:54,770 est de changer le 'n' dans le nouveau nœud à la valeur, 66 00:03:54,770 --> 00:03:57,530 qui a été transmis à la fonction. 67 00:03:57,530 --> 00:04:01,050 Puis newnode est la prochaine va être la tête. 68 00:04:01,050 --> 00:04:05,800 La tête va être newNode. Il est donc assez simple. 69 00:04:05,800 --> 00:04:10,090 Pour supprimer un nœud, nous pouvons le faire comme - 70 00:04:10,090 --> 00:04:14,790 Une façon de le faire c'est-à-dire, 71 00:04:14,790 --> 00:04:18,160 ok, si je voulais supprimer, par exemple, 3, 72 00:04:18,160 --> 00:04:24,850 ce que je pouvais faire, c'est juste pointer le noeud précédent 73 00:04:24,850 --> 00:04:27,580 au noeud suivant de trois. 74 00:04:27,580 --> 00:04:29,400 Donc, je voudrais juste faire quelque chose comme ça. 75 00:04:29,400 --> 00:04:33,400 Mais quel est le problème avec cela? 76 00:04:33,400 --> 00:04:37,400 J'ai une fuite de mémoire, donc je n'ai plus accès au numéro 3. 77 00:04:37,400 --> 00:04:42,480 Le problème, c'est que je ne vais pas être en mesure de libérer ce nœud. 78 00:04:42,480 --> 00:04:45,360 Je vais avoir une fuite de mémoire et (inintelligible) va me haïr. 79 00:04:45,360 --> 00:04:49,370 Ainsi, au lieu de le faire, je devrais probablement avoir un pointeur temporaire. 80 00:04:49,370 --> 00:04:53,210 Alors, j'ai mis température. Il va pointer vers le nœud que je veux supprimer. 81 00:04:53,210 --> 00:04:58,170 Et puis je peux déplacer les nœuds précédents à point à un autre noeud 82 00:04:58,170 --> 00:05:00,390 du nœud que je veux supprimer. 83 00:05:00,390 --> 00:05:02,730 Et enfin, je peux libérer le pointeur. 84 00:05:02,730 --> 00:05:07,480 Dois-je libérer le pointeur que j'ai créé là? 85 00:05:07,480 --> 00:05:09,560 Je n'ai pas à, juste parce que - 86 00:05:09,560 --> 00:05:13,430 la différence est que ce nœud a été créée en utilisant malloc, 87 00:05:13,430 --> 00:05:17,280 il est donc dans le tas, tandis que celui-ci a été déclaré juste comme un commutateur NULL dans la pile. 88 00:05:17,280 --> 00:05:20,000 Donc, je n'ai pas à le libérer. 89 00:05:20,000 --> 00:05:22,030 >> Okay. Donc, maintenant nous allons parler de piles. 90 00:05:22,030 --> 00:05:24,680 Piles sont assez simples. 91 00:05:24,680 --> 00:05:29,540 Nous avons fait des piles et des files d'attente dans la classe juste en utilisant des tableaux, 92 00:05:29,540 --> 00:05:32,820 mais vous devriez être familier - juste être conscient 93 00:05:32,820 --> 00:05:40,740 que vous pouvez également faire des piles dans les files d'attente à l'aide de listes chaînées ainsi. 94 00:05:40,740 --> 00:05:44,460 Donc, si vous avez un tableau, ce serait une pile? 95 00:05:44,460 --> 00:05:46,810 Une pile, en premier lieu, devra avoir une taille. 96 00:05:46,810 --> 00:05:49,950 Vous devez stocker ce qui est de la taille de la pile que vous avez en ce moment. 97 00:05:49,950 --> 00:05:52,980 Et aussi, vous auriez un tableau, dans ce cas des numéros, 98 00:05:52,980 --> 00:05:55,120 mais si vous voulez, il peut être un tableau 99 00:05:55,120 --> 00:06:00,380 de chaînes, un tableau de struct, tout ce que vous voulez stocker. 100 00:06:00,380 --> 00:06:03,240 A propos de la pile: La différence entre une pile et une liste chaînée 101 00:06:03,240 --> 00:06:08,590 est que dans la pile, vous avez seulement accès au dernier élément qui a été mis dans la pile. 102 00:06:08,590 --> 00:06:11,770 C'est ce qu'on appelle dernier entré, premier sorti. 103 00:06:11,770 --> 00:06:15,090 Tout comme vous avez une pile de plateaux, 104 00:06:15,090 --> 00:06:17,670 si vous mettez un plateau sur le dessus de la pile, 105 00:06:17,670 --> 00:06:22,670 vous devez supprimer ce premier plateau à avoir accès aux autres plateaux. 106 00:06:22,670 --> 00:06:26,310 C'est la même chose avec des piles. 107 00:06:26,310 --> 00:06:31,220 Donc, si je veux, par exemple, ajouter un élément à une pile, que dois-je faire? 108 00:06:31,220 --> 00:06:34,070 C'est ce qu'on appelle poussée, et c'est assez simple. 109 00:06:34,070 --> 00:06:37,130 La première chose que vous avez à faire est de vérifier si la taille de la pile 110 00:06:37,130 --> 00:06:40,150 n'est pas supérieure ou égale à la capacité de la pile. 111 00:06:40,150 --> 00:06:45,810 Parce que si vous êtes déjà en pleine capacité, vous ne pouvez pas ajouter quoi que ce soit d'autre. 112 00:06:45,810 --> 00:06:51,140 Et puis sinon, il vous suffit d'ajouter l'élément à la pile. 113 00:06:51,140 --> 00:06:54,530 Et enfin, augmenter la taille. Il est donc assez simple. 114 00:06:54,530 --> 00:06:57,140 Donc, je viens d'ajouter le chiffre 2. 115 00:06:57,140 --> 00:07:00,350 Et si je veux pop, ce qui signifie que je veux supprimer 116 00:07:00,350 --> 00:07:03,870 le dernier élément qui a été ajouté et le retour de la valeur de l'élément, 117 00:07:03,870 --> 00:07:09,180 la première chose que je dois faire est de vérifier que la pile n'est pas vide. 118 00:07:09,180 --> 00:07:11,510 Parce que si elle est vide, je ne peux pas retourner quoi que ce soit. 119 00:07:11,510 --> 00:07:14,820 Dans ce cas, je suis de retour -1. 120 00:07:14,820 --> 00:07:18,960 Sinon, je vais diminuer la taille de la spécification, 121 00:07:18,960 --> 00:07:22,510 et revenir numéros (s.size). 122 00:07:22,510 --> 00:07:27,230 Pourquoi ai-je diminuer la taille puis retourne s.size? 123 00:07:27,230 --> 00:07:30,930 C'est parce que, dans ce cas, la spécification est de taille 4, 124 00:07:30,930 --> 00:07:33,810 et je veux revenir le quatrième élément, non? 125 00:07:33,810 --> 00:07:36,030 Mais ce qui est l'indice du quatrième élément? Trois. 126 00:07:36,030 --> 00:07:44,510 Comme je ne taille - va être 3, je ne peux revenir s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 parce que c'est 3. Donc, c'est juste l'indice. 128 00:07:48,410 --> 00:07:50,380 Maintenant >> files d'attente. Les files d'attente sont à peu près la même chose. 129 00:07:50,380 --> 00:07:54,950 La seule différence est que, au lieu d'avoir dernier entré, premier sorti, 130 00:07:54,950 --> 00:07:57,480 vous devez d'abord entré, premier sorti. 131 00:07:57,480 --> 00:07:59,460 Probablement, si vous êtes en attente d'aller à un concert, 132 00:07:59,460 --> 00:08:04,260 vous ne seriez pas heureux si vous aviez une pile à la place d'une file d'attente. 133 00:08:04,260 --> 00:08:07,730 Étant la dernière personne à venir serait la première personne à entrer dans le concert. 134 00:08:07,730 --> 00:08:09,760 Vous n'auriez probablement pas être heureux. 135 00:08:09,760 --> 00:08:15,020 Dans la file d'attente, la première personne à entrer en est également la première personne à sortir. 136 00:08:15,020 --> 00:08:18,720 Ainsi, dans la définition d'une file d'attente, en plus d'avoir la taille de la matrice, 137 00:08:18,720 --> 00:08:23,360 vous devez aussi avoir la tête, ce qui est l'indice à la tête de la pile. 138 00:08:23,360 --> 00:08:29,000 Ainsi, le premier élément à l'heure actuelle. 139 00:08:29,000 --> 00:08:32,710 Enqueue est la même chose que pour les piles bouton. 140 00:08:32,710 --> 00:08:34,980 Si vous avez été très naïf, vous venez de dire, 141 00:08:34,980 --> 00:08:39,289 bien, je ne peux faire exactement la même chose que j'ai fait pour pousser. 142 00:08:39,289 --> 00:08:44,030 Je peux juste vérifier si elle n'est pas au-delà de la capacité. 143 00:08:44,030 --> 00:08:48,760 Si c'est le cas, je reviens faux, sinon je ne peux exporter la nouvelle valeur 144 00:08:48,760 --> 00:08:50,630 puis augmenter la taille. 145 00:08:50,630 --> 00:08:52,750 Mais pourquoi est-ce mal? 146 00:08:52,750 --> 00:08:55,010 Voyons cet exemple. 147 00:08:55,010 --> 00:08:57,020 J'essaie de enqueue un tas de trucs, 148 00:08:57,020 --> 00:08:58,390 et puis je vais dequeue et en file d'attente. 149 00:08:58,390 --> 00:09:00,550 Il ya beaucoup de commandes, mais c'est très simple. 150 00:09:00,550 --> 00:09:04,790 Je vais en file d'attente 5, il faut donc ajouter 5, puis 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, et puis je veux dequeue quelque chose, 152 00:09:09,310 --> 00:09:12,000 ce qui signifie que je vais enlever le premier élément. 153 00:09:12,000 --> 00:09:14,640 Donc, je vais supprimer le numéro 3, non? 154 00:09:14,640 --> 00:09:17,320 Le premier élément. Très bien. 155 00:09:17,320 --> 00:09:21,450 Maintenant, si j'essaie d'en file d'attente d'autre chose, ce qui va se passer? 156 00:09:21,450 --> 00:09:24,290 Selon ma mise en œuvre, 157 00:09:24,290 --> 00:09:31,040 J'allais mettre le numéro suivant dans la q.size d'index. 158 00:09:31,040 --> 00:09:35,140 Dans ce cas, la taille est de 8, 159 00:09:35,140 --> 00:09:38,640 si l'indice 8 sera ici en dernière position. 160 00:09:38,640 --> 00:09:43,900 Si j'essaie d'en file d'attente 1 ici, je serais d'écraser la dernière position 161 00:09:43,900 --> 00:09:45,870 pour le numéro 1, ce qui est complètement faux. 162 00:09:45,870 --> 00:09:49,870 Ce que je veux faire est de s'enrouler autour et aller à la première position. 163 00:09:49,870 --> 00:09:52,870 Peut-être que vous voulez juste dire, eh bien, je viens de vérifier 164 00:09:52,870 --> 00:09:55,600 si je peux effectivement mettre quelque chose là-bas. 165 00:09:55,600 --> 00:09:58,560 Sinon, je viens de dire, oh, la nouvelle capacité totale 166 00:09:58,560 --> 00:10:02,010 est en fait la capacité - 1, et vous ne pouvez pas mettre un élément là. 167 00:10:02,010 --> 00:10:06,150 Mais quel est le problème? Le problème est que si je DEQUEUE tout ici 168 00:10:06,150 --> 00:10:08,240 et puis j'essaie d'ajouter quelque chose d'autre, il serait tout simplement dire, 169 00:10:08,240 --> 00:10:11,210 bien, vous étiez à pleine capacité, ce qui est 0. 170 00:10:11,210 --> 00:10:13,620 Donc, votre file d'attente est parti. 171 00:10:13,620 --> 00:10:16,990 Vous devez enrouler autour, et une façon d'envelopper autour 172 00:10:16,990 --> 00:10:22,040 que vous les gars apprises dans psets visionnaires et autres utilisait mod. 173 00:10:22,040 --> 00:10:29,090 Vous pouvez l'essayer à la maison pour comprendre pourquoi vous feriez q.size + q.head 174 00:10:29,090 --> 00:10:31,080 capacité mod, mais si vous vérifiez ici, 175 00:10:31,080 --> 00:10:34,760 nous pouvons voir que cela fonctionne. 176 00:10:34,760 --> 00:10:37,760 Ainsi, dans le dernier exemple, q.size était 8 177 00:10:37,760 --> 00:10:47,590 et la tête était de 1, parce que c'était cette position ici du tableau. 178 00:10:47,590 --> 00:10:51,970 Ainsi, il sera 8 + 1, 9. Capacité Mod 9 serait 0. 179 00:10:51,970 --> 00:10:56,640 Il irait à l'indice 0. Nous serons dans la bonne position. 180 00:10:56,640 --> 00:10:59,750 Et puis essayer de la file d'attente à la maison. 181 00:10:59,750 --> 00:11:04,950 Quelques points importants: essayer de comprendre la différence entre une pile et une file d'attente. 182 00:11:04,950 --> 00:11:11,620 A la maison, essayez d'obtenir très familier avec la mise en œuvre enqueue, dequeue, poussée et pop. 183 00:11:11,620 --> 00:11:16,560 Et aussi comprendre lorsque vous souhaitez utiliser chacun d'entre eux. 184 00:11:16,560 --> 00:11:22,830 >> Donc, nous allons vous détendre pendant 10 secondes avec un tas de Pokémons. 185 00:11:22,830 --> 00:11:26,080 Et maintenant, revenons à des structures de données. 186 00:11:26,080 --> 00:11:29,770 Hash tables. Beaucoup de gens avaient peur de tables de hachage. 187 00:11:29,770 --> 00:11:33,650 dans le problème de la série 6, le vérificateur d'orthographe. 188 00:11:33,650 --> 00:11:35,980 Des tables et des essais de hachage, beaucoup de gens ont peur d'eux. 189 00:11:35,980 --> 00:11:38,540 Ils pensent qu'ils sont si difficile à comprendre. Ouais? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problème réglé 5. >> Problème réglé 5, ouais. Merci Rob. 191 00:11:41,490 --> 00:11:43,370 Ouais. Six était Huff n 'Puff, ouais. 192 00:11:43,370 --> 00:11:49,340 Problème posé 5 a été correcteur orthographique, et vous avez eu à utiliser une table de hachage ou un essai. 193 00:11:49,340 --> 00:11:55,360 Beaucoup de gens pensaient qu'ils étaient super difficile à comprendre, mais ils sont en fait assez simple. 194 00:11:55,360 --> 00:12:01,290 Qu'est-ce qu'une table de hachage, fondamentalement? Une table de hachage est un tableau de listes chaînées. 195 00:12:01,290 --> 00:12:06,730 La seule différence entre une matrice et une table de hachage 196 00:12:06,730 --> 00:12:09,730 est que, dans la table de hachage vous avez quelque chose qui s'appelle une fonction de hachage. 197 00:12:09,730 --> 00:12:12,080 Qu'est-ce qu'une fonction de hachage? 198 00:12:12,080 --> 00:12:13,970 Je ne sais pas si vous pouvez lire ici. 199 00:12:13,970 --> 00:12:16,090 Ceci est un exemple d'une table de hachage. 200 00:12:16,090 --> 00:12:19,220 Donc vous pouvez voir que vous avez un tableau avec 31 éléments. 201 00:12:19,220 --> 00:12:22,440 Et ce que nous faisons dans une table de hachage est doté d'une fonction de hachage 202 00:12:22,440 --> 00:12:26,660 qui va traduire une clé, chaque int à un indice. 203 00:12:26,660 --> 00:12:31,740 Si, par exemple, si je veux choisir pour B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Je mettrais B. Harrison dans mes fonctions de hachage, 205 00:12:34,190 --> 00:12:36,960 et la fonction de hachage reviendrait 24. 206 00:12:36,960 --> 00:12:40,930 Donc, je sais que je veux stocker B. Harrison en 24. 207 00:12:40,930 --> 00:12:46,580 Voilà donc la différence entre avoir juste un tableau et ayant une table de hachage. 208 00:12:46,580 --> 00:12:48,740 Dans la table de hachage, vous avez une fonction qui va vous dire 209 00:12:48,740 --> 00:12:54,740 où stocker les données que vous souhaitez stocker. 210 00:12:54,740 --> 00:12:57,040 Pour la fonction de hachage, vous voulez chercher une fonction de hachage 211 00:12:57,040 --> 00:13:00,600 c'est déterministe et bien réparties. 212 00:13:00,600 --> 00:13:07,810 Comme vous pouvez le voir ici, vous voyez que beaucoup de données que je voulais magasin était en fait 19 213 00:13:07,810 --> 00:13:12,470 au lieu d'utiliser 31 et 30 et 29, qui étaient tous gratuits. 214 00:13:12,470 --> 00:13:16,920 Ainsi, la fonction de hachage que j'ai utilisé n'était pas très bien distribué. 215 00:13:16,920 --> 00:13:20,710 Quand nous disons bien distribué, cela signifie que nous voulons avoir, 216 00:13:20,710 --> 00:13:26,520 plus ou moins, au moins 1 ou 2 pour chacun de la - 217 00:13:26,520 --> 00:13:32,190 analogue, une différence de 1 ou 2, pour chacun des indices dans les tableaux. 218 00:13:32,190 --> 00:13:43,950 Vous voulez avoir, à peu près, le même nombre d'éléments dans chaque liste liée dans le tableau. 219 00:13:43,950 --> 00:13:48,600 Et il est facile de vérifier si elle est valide dans la table de hachage, voir que des tables de hachage. 220 00:13:48,600 --> 00:13:51,770 Ensuite, les arbres >>. Il s'agit d'un arbre. 221 00:13:51,770 --> 00:13:56,400 Arbres en informatique sont à l'envers pour une raison quelconque. 222 00:13:56,400 --> 00:14:00,150 Donc, ici, vous avez la racine de l'arbre et les feuilles. 223 00:14:00,150 --> 00:14:05,630 Vous devez juste savoir la nomenclature pour les parents et l'enfant. 224 00:14:05,630 --> 00:14:12,880 Chaque noeud dispose de ses enfants, qui sont les noeuds qui sont en dessous de la mère. 225 00:14:12,880 --> 00:14:19,660 Ainsi, par exemple, 2 va être le parent de 3 et pour l'autre enfant là, 226 00:14:19,660 --> 00:14:25,290 tandis que 3 va être le parent pour 1 et les autres enfants qui sont là. 227 00:14:25,290 --> 00:14:29,990 Et 1 va être l'enfant de 3, et ainsi de suite. 228 00:14:29,990 --> 00:14:34,610 Nous avons quelque chose de beaucoup plus intéressant, appelé un arbre binaire de recherche, 229 00:14:34,610 --> 00:14:39,040 dans laquelle toutes les valeurs relatives au droit d'un nœud 230 00:14:39,040 --> 00:14:41,660 vont être sur la droite, juste ici - sur la droite, 231 00:14:41,660 --> 00:14:46,780 vont être plus grand que l'élément dans la racine. 232 00:14:46,780 --> 00:14:49,780 Donc, si j'ai le numéro 5 ici, tous les éléments sur le droit 233 00:14:49,780 --> 00:14:51,940 vont être supérieur à 5, et sur la gauche 234 00:14:51,940 --> 00:14:56,770 tous les éléments vont être inférieur à 5. 235 00:14:56,770 --> 00:14:58,780 Pourquoi est-ce utile? 236 00:14:58,780 --> 00:15:01,660 Eh bien, si je veux vérifier si le nombre 7 est ici, par exemple, 237 00:15:01,660 --> 00:15:05,960 Je viens d'aller à 5 première et je vais voir, c'est 7 plus ou moins de 5? 238 00:15:05,960 --> 00:15:09,540 C'est plus, donc je sais que ça va devoir être sur la droite de l'arbre. 239 00:15:09,540 --> 00:15:13,980 J'ai donc beaucoup moins de choses à regarder. 240 00:15:13,980 --> 00:15:19,520 Dans la mise en œuvre d'un arbre binaire de recherche, le noeud, je vais juste avoir des données, 241 00:15:19,520 --> 00:15:21,750 si int n; vous pourriez aussi avoir une chaîne 242 00:15:21,750 --> 00:15:23,630 ou tout ce que vous vouliez. 243 00:15:23,630 --> 00:15:28,100 Vous avez juste à être prudent sur la définition de ce qui est grand, ce qui est moins. 244 00:15:28,100 --> 00:15:30,390 Donc, si vous aviez des chaînes, par exemple, vous pouvez définir 245 00:15:30,390 --> 00:15:34,690 que toutes ces choses sur le droit vont avoir plus grande longueur, 246 00:15:34,690 --> 00:15:40,940 la gauche vont avoir des longueurs inférieures, il est vraiment à vous. 247 00:15:40,940 --> 00:15:44,930 >> Comment puis-je mettre en œuvre pour trouver BST? 248 00:15:44,930 --> 00:15:47,840 La première chose que nous avons à faire est de vérifier si la racine est NULL. 249 00:15:47,840 --> 00:15:50,920 Si c'est NULL, cela signifie que la chose n'est pas là 250 00:15:50,920 --> 00:15:53,330 parce que vous n'avez même pas un arbre, pas vrai? 251 00:15:53,330 --> 00:15:55,790 Je reviens donc faux. 252 00:15:55,790 --> 00:15:58,740 Sinon, je vais vérifier si le nombre est supérieur 253 00:15:58,740 --> 00:16:01,720 que la valeur de la racine. 254 00:16:01,720 --> 00:16:04,250 Je vais essayer de trouver l'élément sur la droite 255 00:16:04,250 --> 00:16:08,590 de l'arbre. 256 00:16:08,590 --> 00:16:11,310 Vous voyez que je suis en utilisant la récursivité ici. 257 00:16:11,310 --> 00:16:14,150 Et puis, si c'est moins, je vais regarder à gauche. 258 00:16:14,150 --> 00:16:18,330 Et enfin, sinon, si ce n'est pas moins ou pas plus, 259 00:16:18,330 --> 00:16:20,660 cela signifie que c'est la valeur elle-même. 260 00:16:20,660 --> 00:16:23,010 Donc, je reviens juste vrai. 261 00:16:23,010 --> 00:16:26,360 Vous pouvez voir ici que j'ai utilisé si, si, si. 262 00:16:26,360 --> 00:16:30,820 Et rappelez-vous, dans quizz 0, nous avons eu un problème qui avait si, si, si, 263 00:16:30,820 --> 00:16:32,780 et vous étiez censé trouver l'inefficacité, 264 00:16:32,780 --> 00:16:35,180 et l'inefficacité, c'est que si vous avez utilisé. 265 00:16:35,180 --> 00:16:39,060 Vous devriez avoir utilisé if, else if, else si, et autre. 266 00:16:39,060 --> 00:16:44,240 Alors, dois-je utiliser autre if et else if et else ici? 267 00:16:44,240 --> 00:16:46,200 Est-ce que n'importe qui - oui? 268 00:16:46,200 --> 00:16:51,140 [Parlant de l'élève, inaudible] 269 00:16:51,140 --> 00:16:53,480 C'est parfait. Alors, elle dit que ce n'est pas grave, 270 00:16:53,480 --> 00:16:55,930 juste parce que l'inefficacité que nous avions avant 271 00:16:55,930 --> 00:16:59,550 était-ce parce que, peut-être si une condition est satisfaite, 272 00:16:59,550 --> 00:17:03,570 si vous avez effectué une action, mais vous aller vérifier toutes les autres conditions. 273 00:17:03,570 --> 00:17:06,319 Mais dans ce cas, il est revenu tout de suite, de sorte qu'il n'a pas d'importance. 274 00:17:06,319 --> 00:17:09,220 Donc, vous n'avez pas à utiliser d'autre si. 275 00:17:09,220 --> 00:17:11,740 >> Et enfin, nous allons parler de tentatives, 276 00:17:11,740 --> 00:17:13,800 qui est le favori de tous. 277 00:17:13,800 --> 00:17:15,980 Un essai est un arbre de tableaux. 278 00:17:15,980 --> 00:17:20,369 Il est très rapide pour rechercher des valeurs, mais il utilise beaucoup de mémoire. 279 00:17:20,369 --> 00:17:22,530 Et c'est généralement pour filtrer mots, donc quand vous 280 00:17:22,530 --> 00:17:27,920 vouloir mettre en œuvre, par exemple, je ne sais pas, comme un annuaire téléphonique dans votre téléphone 281 00:17:27,920 --> 00:17:30,440 et vous voulez être en mesure de type B 282 00:17:30,440 --> 00:17:32,510 et juste avoir des noms de personnes qui ont B. 283 00:17:32,510 --> 00:17:37,960 Il est très facile à mettre en œuvre que l'aide d'un essai, par exemple. 284 00:17:37,960 --> 00:17:39,820 Comment définissez-vous un noeud dans un essai? 285 00:17:39,820 --> 00:17:43,910 Vous venez d'avoir un booléen qui va être is_word. 286 00:17:43,910 --> 00:17:48,660 Cela représente que l'utilisation de tous les caractères avant ce nœud, 287 00:17:48,660 --> 00:17:51,920 vous étiez en mesure de former un mot, 288 00:17:51,920 --> 00:17:57,230 et alors vous aurez un tableau de pointeurs vers des noeuds. 289 00:17:57,230 --> 00:18:03,120 Pouvez-vous voir que nous avons un ensemble de nœuds parents, afin noeud * tableau? Ouais? 290 00:18:03,120 --> 00:18:06,050 Voyons comment cela va fonctionner. Pour la vérification de l'orthographe, 291 00:18:06,050 --> 00:18:08,230 nous avons un tableau de 27 éléments, 292 00:18:08,230 --> 00:18:12,150 parce que nous avons toutes les lettres ainsi que l'apostrophe. 293 00:18:12,150 --> 00:18:17,800 Avant ici, je vais juste utiliser 2 parce que je veux être en mesure d'écrire sur la carte. 294 00:18:17,800 --> 00:18:20,230 Très bien. C'est donc un exemple d'un essai. 295 00:18:20,230 --> 00:18:25,600 Si je viens de définir le premier noeud, je vais avoir un tableau de 2 éléments 296 00:18:25,600 --> 00:18:29,290 qui sont deux pointeurs NULL, alors j'ai mis 'a' et 'b'. 297 00:18:29,290 --> 00:18:32,430 Et je vais avoir un booléen qui dit is_word. 298 00:18:32,430 --> 00:18:34,420 Ça va être faux pour le premier, 299 00:18:34,420 --> 00:18:37,370 juste parce que, avant que vous n'avez pas tous les caractères. 300 00:18:37,370 --> 00:18:40,900 Ainsi, un mot vide n'est pas un mot. Il est donc faux. 301 00:18:40,900 --> 00:18:46,320 Si je veux ajouter 'a' à ce dictionnaire, qu'est-ce que je dois faire? 302 00:18:46,320 --> 00:18:49,760 Je voudrais juste avoir à malloc un nouveau nœud pour 'a', 303 00:18:49,760 --> 00:18:54,630 puis ajouter son mot à vrai. 304 00:18:54,630 --> 00:19:00,180 Donc, il représente juste qu'après avoir 'a' va être vrai. Donner un sens? 305 00:19:00,180 --> 00:19:04,120 Alors, si je veux ajouter 'ba', je vais devoir malloc 1 pour 'b', 306 00:19:04,120 --> 00:19:07,550 et puis je vais mettre en place le booléen false, 307 00:19:07,550 --> 00:19:10,160 car «b» en lui-même n'est pas un mot. 308 00:19:10,160 --> 00:19:13,010 Ensuite, je vais à malloc un autre pour 'a', donc 'ba', 309 00:19:13,010 --> 00:19:16,290 et puis je vais mettre en place c'est un mot de vrai. 310 00:19:16,290 --> 00:19:18,950 Parce que «ba» est un mot. 311 00:19:18,950 --> 00:19:21,910 Et puis, si je veux voir si 'b' est dans ce dictionnaire, 312 00:19:21,910 --> 00:19:26,730 Je peux aller à la première, 'b'. Je descends, et je regarde est le mot, et il dit faux. 313 00:19:26,730 --> 00:19:30,110 Donc ce n'est pas un mot. Si je veux vérifier 'ba', 314 00:19:30,110 --> 00:19:38,010 Je vais à la première, «b», puis aller à 'a', et je vois vrai, si c'est un mot. Donner un sens? 315 00:19:38,010 --> 00:19:41,950 Beaucoup de gens se confondre par essais. Non? 316 00:19:41,950 --> 00:19:44,740 >> Enfin, le codage de Huffman. Codage de Huffman est très utile 317 00:19:44,740 --> 00:19:47,550 pour économiser de la mémoire et de compresser des fichiers texte, 318 00:19:47,550 --> 00:19:52,270 juste parce qu'un grand nombre de fois que vous utilisez «a» et «e», par exemple, 319 00:19:52,270 --> 00:19:57,710 dans vos documents, mais je ne sais pas si vous utiliser 'q' ou 'z' autant. 320 00:19:57,710 --> 00:20:02,040 Ayant tout juste 1 octet pour chaque caractère, 321 00:20:02,040 --> 00:20:08,520 chaque unique - les 256 caractères que nous avons dans la table ASCII n'est pas très optimale, 322 00:20:08,520 --> 00:20:11,410 juste parce qu'il ya des caractères que vous utilisez beaucoup plus, 323 00:20:11,410 --> 00:20:15,180 de sorte que vous devriez probablement utiliser moins de mémoire pour ceux. 324 00:20:15,180 --> 00:20:17,560 Comment puis-je utiliser codage de Huffman? 325 00:20:17,560 --> 00:20:20,010 Nous devons faire un arbre de Huffman. 326 00:20:20,010 --> 00:20:23,370  Un arbre de Huffman a des nœuds 327 00:20:23,370 --> 00:20:27,760 qui ont un symbole qui va être comme, 'a', 'b', 'c', la lettre, 328 00:20:27,760 --> 00:20:32,990 la lettre que vous avez, une fréquence qui est la fréquence que le mot apparaît dans le texte, 329 00:20:32,990 --> 00:20:36,280 que vous créez l'arbre de Huffman pour, 330 00:20:36,280 --> 00:20:41,800 puis un noeud qui va pointer vers la gauche de l'arbre de Huffman 331 00:20:41,800 --> 00:20:47,210 et un autre noeud qui va pointer vers la droite. Ainsi, tout comme un arbre. 332 00:20:47,210 --> 00:20:49,440 Comment voulez-vous construire un arbre de Huffman? 333 00:20:49,440 --> 00:20:54,020 Vous allez choisir les deux nœuds qui ont les fréquences les plus basses. 334 00:20:54,020 --> 00:20:56,490 Si vous avez un lien que vous allez choisir les 2 nœuds 335 00:20:56,490 --> 00:20:59,870 qui ont les valeurs les plus faibles ASCII ainsi. 336 00:20:59,870 --> 00:21:02,420 Ensuite, vous allez créer une nouvelle arborescence de ces 2 nœuds 337 00:21:02,420 --> 00:21:08,030 qui va avoir la fréquence combinée dans le nœud parent. 338 00:21:08,030 --> 00:21:13,240 Et puis vous allez supprimer les 2 enfants de la forêt 339 00:21:13,240 --> 00:21:15,570 et les remplacer par le parent. 340 00:21:15,570 --> 00:21:18,930 Et vous allez répéter jusqu'à ce que vous avez seulement 1 arbre dans la forêt. 341 00:21:18,930 --> 00:21:23,840 Donc, nous allons voir comment vous feriez un arbre de Huffman pour ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Vous pouvez voir ici que toutes les lettres ont une fréquence 1, sauf pour les «A»; qui a la fréquence 2. 343 00:21:29,220 --> 00:21:34,090 J'ai donc créé nœuds pour toutes les lettres que j'ai mis dans l'ordre de la valeur ASCII et la fréquence. 344 00:21:34,090 --> 00:21:40,090 Donc, si je veux créer le premier arbre, ce sera avec «L» et «M». 345 00:21:40,090 --> 00:21:43,100 Alors c'est ici. La fréquence de la paire sera 2 346 00:21:43,100 --> 00:21:49,470 parce que c'est 1 + 1, alors le prochain 2 avec les fréquences les plus basses sont «Y» et «Z». 347 00:21:49,470 --> 00:21:53,180 Et puis j'ai tout d'eux étant - ont une fréquence de 2. 348 00:21:53,180 --> 00:22:00,470 Donc, ceux qui sont celles qui ont la plus faible valeur ASCII pour le prochain? 349 00:22:00,470 --> 00:22:04,830 «A» et «L». Je crée donc le nouveau nœud, 350 00:22:04,830 --> 00:22:09,930 et enfin, il est 4 et 2, de sorte que 2 va être sur la gauche. 351 00:22:09,930 --> 00:22:12,430 Et c'est l'arbre de Huffman. 352 00:22:12,430 --> 00:22:16,060 Alors, si je veux écrire un texte, 353 00:22:16,060 --> 00:22:24,440 comme en binaire à convertir en texte, en utilisant l'arbre de Huffman est très facile. 354 00:22:24,440 --> 00:22:30,220 Par exemple, si je dis que le déplacement vers la gauche est un 0 et se déplaçant vers la droite est un 1, 355 00:22:30,220 --> 00:22:32,410 Qu'est-ce que cela va représenter? 356 00:22:32,410 --> 00:22:35,530 Donc, comme 1, 1, si droite, droite, 357 00:22:35,530 --> 00:22:40,370 puis 0, donc gauche serait L, puis 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Donc, 1, 0, de sorte que seulement 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Et puis 0, 1, donc 'Z'. 360 00:22:47,540 --> 00:22:52,170 Et puis 1, 0, 0 - pas. 361 00:22:52,170 --> 00:22:56,780 0, 0 sera «Y», si paresseux. 362 00:22:56,780 --> 00:23:06,060 Donc, c'est tout pour moi, Rob va prendre le relais. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Ainsi, la semaine 7 trucs. 364 00:23:08,400 --> 00:23:11,390 Nous avons beaucoup d'aller plus très vite. 365 00:23:11,390 --> 00:23:13,430 Opérateurs sur les bits, débordement de tampon, 366 00:23:13,430 --> 00:23:16,760 bibliothèque CS50, puis HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Tout comme en 15 à 20 minutes. 368 00:23:20,990 --> 00:23:24,330 Opérateurs sur les bits. Il ya 6 d'entre eux que vous devez savoir. 369 00:23:24,330 --> 00:23:31,200 Bit à bit et, au niveau du bit ou, XOR, décalage à gauche, décalage vers la droite, et non. 370 00:23:31,200 --> 00:23:35,420 Décalage à droite et non vous avez à peine vu dans la leçon à tous. 371 00:23:35,420 --> 00:23:40,480 Nous allons passer en revue rapidement ici, mais il est bon de savoir que ce sont les 6 qui existent. 372 00:23:40,480 --> 00:23:45,070 Rappelez-vous que les opérateurs binaires sont comme quand vous faites 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Vous n'êtes pas affaire avec le binaire de 3 et 4. 374 00:23:49,420 --> 00:23:56,550 Avec les opérateurs binaires vous êtes réellement affaire avec les différents bits des numéros 3 et 4. 375 00:23:56,550 --> 00:23:59,120 >> Donc le premier que nous disons, c'est au niveau du bit pas, 376 00:23:59,120 --> 00:24:02,340 et tout ce qu'il fait est d'appuyer tous les bits. 377 00:24:02,340 --> 00:24:05,500 Donc ici, si vous écrivez cela en C, vous ne seriez pas écrire 378 00:24:05,500 --> 00:24:09,380 comme ~ 11011 ou autre, vous l'écrire comme ~ 4, 379 00:24:09,380 --> 00:24:12,970 et alors il serait retourner la représentation binaire de 4. 380 00:24:12,970 --> 00:24:24,800 Donc, ici, ~ certains nombre binaire 1101101 va retourner exactement tous des 1 à 0 et tous les 0 à 1 de. 381 00:24:24,800 --> 00:24:27,600 Comme je le dis là, l'utilisation fréquente de ce fait, 382 00:24:27,600 --> 00:24:30,830 et nous allons le voir un peu, c'est comme on veut arriver à un certain nombre 383 00:24:30,830 --> 00:24:35,460 où tous les bits sont à 1, à l'exception de l'un d'eux. 384 00:24:35,460 --> 00:24:38,560 Ainsi, il est généralement plus facile d'exprimer le nombre 385 00:24:38,560 --> 00:24:40,630 où juste que seul bit est défini, 386 00:24:40,630 --> 00:24:44,650 et puis prendre le ~ de celui-ci, de sorte que chaque autre bit est mis à l'exception de celui-là. 387 00:24:44,650 --> 00:24:50,300 C'est ce que nous allons utiliser plus un peu. 388 00:24:50,300 --> 00:24:58,220 >> Au niveau du bit ou. Voici deux nombres binaires, et ces deux chiffres 389 00:24:58,220 --> 00:25:00,780 sont assez représentatifs, car ils représentent tous les possibles 390 00:25:00,780 --> 00:25:07,290 combinaison de bits vous pourriez avoir besoin pour opérer. 391 00:25:07,290 --> 00:25:13,540 Ici, quand je séparées par OR chaque bit, nous allons juste de comparer directement vers le bas. 392 00:25:13,540 --> 00:25:15,410 Donc, sur le côté gauche nous avons un 1 et un 1. 393 00:25:15,410 --> 00:25:20,510 Quand je BitWise | ceux, que vais-je obtenir? Une. 394 00:25:20,510 --> 00:25:25,320 Ensuite, au niveau du bit | 0 et 1 va me donner? Une. 395 00:25:25,320 --> 00:25:27,840 Bit à bit 1 et 0 va être la même chose, un. 396 00:25:27,840 --> 00:25:31,880 Au niveau du bit 0 | 0 va me donner 0. 397 00:25:31,880 --> 00:25:37,300 Donc, le seul cas où je reçois 0 est dans le 0 | 0 cas. 398 00:25:37,300 --> 00:25:40,020 Et vous pouvez penser que, tout comme vos ors logiques. 399 00:25:40,020 --> 00:25:44,830 Donc, si vous pensez à une véritable et 0 comme fausse, la même chose s'applique ici. 400 00:25:44,830 --> 00:25:50,040 Alors vrai ou vrai, c'est vrai, vrai ou faux est vrai. 401 00:25:50,040 --> 00:25:57,150 Faux ou vrai, c'est vrai, faux ou faux est la seule chose qui est en fait fausse. 402 00:25:57,150 --> 00:26:00,100 Voici l'exemple que vous devez savoir 403 00:26:00,100 --> 00:26:05,160 comme un bon exemple de cas où les opérateurs de bits sont utilisés. 404 00:26:05,160 --> 00:26:08,660 Ici, si nous ou au capital 'A' avec Ox20, 405 00:26:08,660 --> 00:26:11,830 et nous allons voir ceux-ci dans une seconde, nous obtenons quelque chose. 406 00:26:11,830 --> 00:26:16,020 Et si nous ou minuscules «a» avec Ox20, nous obtenons quelque chose. 407 00:26:16,020 --> 00:26:26,750 Donc, nous allons tirer vers le haut la table ASCII. 408 00:26:26,750 --> 00:26:34,000 Très bien. Nous voyons ici que «A» est - 409 00:26:34,000 --> 00:26:36,920 ici nous avons 'A' est décimal 65. 410 00:26:36,920 --> 00:26:45,120 Mais je vais aller avec hexadécimal, qui est Ox41. 411 00:26:45,120 --> 00:26:48,280 Sûr que nous avons vu en classe. Je pense que nous l'avons vu en classe 412 00:26:48,280 --> 00:26:52,730 qu'il est assez facile de convertir en hexadécimal en binaire. 413 00:26:52,730 --> 00:26:55,280 Donc ici, si je veux mettre 4 en binaire, 414 00:26:55,280 --> 00:26:59,550 qui va juste être 0100. 415 00:26:59,550 --> 00:27:03,620 C'est de 1 place, la place de la 2, la place de 4, si ce n'est 4. 416 00:27:03,620 --> 00:27:08,550 Ensuite, je peux diviser 1 en binaire, qui va être 0001. 417 00:27:08,550 --> 00:27:14,280 Et si cela va être la représentation de «A» en binaire. 418 00:27:14,280 --> 00:27:22,720 Prenant minuscule «a», il est maintenant va être Ox61, 419 00:27:22,720 --> 00:27:27,050 où, diviser cela en compte dans son binaire, donc un 6 - 420 00:27:27,050 --> 00:27:37,830 Disons effectivement le faire - n'est-il pas la gomme? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Donc, le fractionnement 6 en binaire va être 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Et la division 1 sera 0001. 423 00:27:54,610 --> 00:27:56,520 En regardant la différence entre ces deux, 424 00:27:56,520 --> 00:28:04,250 nous voyons que la seule différence entre une minuscule et un 'A' est ce seul bit. 425 00:28:04,250 --> 00:28:11,810 Pour en revenir à ici - bien. 426 00:28:11,810 --> 00:28:15,920 Pour en revenir à ici, si nous regardons ce que le bit est Ox20, 427 00:28:15,920 --> 00:28:22,210 aussi séparer Ox20 à son binaire, 428 00:28:22,210 --> 00:28:27,310 est 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, le seul bit mis ce peu que nous sommes préoccupés par, 430 00:28:33,470 --> 00:28:38,210 avec commutation entre le capital et les minuscules 'a'. 431 00:28:38,210 --> 00:28:47,610 Si je ou «A», qui est celui-ci, «A», 432 00:28:47,610 --> 00:28:50,580 si je ou 'A' avec Ox20, 433 00:28:50,580 --> 00:28:53,490 que vais-je obtenir? 434 00:28:53,490 --> 00:28:58,960 [Étudiants, inaudible] >> minuscules 'a', parce que ça va faire basculer ce bit à 1. 435 00:28:58,960 --> 00:29:04,170 Et si je ou «un» avec Ox20, que vais-je obtenir? 436 00:29:04,170 --> 00:29:08,780 Minuscules un, parce que juste oring 'a' avec Ox20, 437 00:29:08,780 --> 00:29:14,580 Je vais être oring ce seul bit à un 1, c'est déjà un 1, il n'a pas d'importance. 438 00:29:14,580 --> 00:29:17,960 Nous obtenons donc 'a' et 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Au niveau du bit et. Encore une fois, nous pouvons penser à ce que notre contrepartie logique et. 440 00:29:24,820 --> 00:29:28,180 Sur le côté gauche, nous avons vrai et vrai. 441 00:29:28,180 --> 00:29:31,160 Ça va être vrai, et pour tous les cas, 442 00:29:31,160 --> 00:29:36,270 faux et vrai ou vrai et faux, ou faux et faux, 443 00:29:36,270 --> 00:29:38,550 aucune de ces choses sont vraies. 444 00:29:38,550 --> 00:29:44,170 Donc, ce que nous finissons est de 1000. 445 00:29:44,170 --> 00:29:48,830 Alors maintenant, ici, ici c'est là que je l'ai utilisé le bit fidèle pas, 446 00:29:48,830 --> 00:29:52,230 où nous avons eu Ox20. 447 00:29:52,230 --> 00:29:54,350 C'est donc Ox20. 448 00:29:54,350 --> 00:29:59,570 Maintenant, ce que je veux faire, au niveau du bit ~ de Ox20. 449 00:29:59,570 --> 00:30:03,600 Cela va retourner tous les bits. 450 00:30:03,600 --> 00:30:09,330 J'ai donc 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Et si 'A' AND avec ~ Ox20 va me donner quoi? 452 00:30:18,940 --> 00:30:22,430 Le seul petit, nous devons vraiment penser est celui-ci, 453 00:30:22,430 --> 00:30:26,020 car, si tous ces bits sont mis à 1, 454 00:30:26,020 --> 00:30:29,000 alors nous allons obtenir exactement ce que «A» était, 455 00:30:29,000 --> 00:30:31,260 sauf pour, peut-être, ce que ce bit est. 456 00:30:31,260 --> 00:30:34,460 Parce que si c'était un 1, maintenant ça va être réglé sur 0, 457 00:30:34,460 --> 00:30:39,810 parce que tout cela est, AND avec ce va être 0. 458 00:30:39,810 --> 00:30:43,280 Alors, quelle est 'A' & ~ Ox20 va me donner? 459 00:30:43,280 --> 00:30:48,200 [Les élèves répondent, inaudible] >> Et ce qui est 'a' et - c'est 'A'. 460 00:30:48,200 --> 00:30:52,170 Et ce qui est 'a' et ~ Ox20 va me donner? 461 00:30:52,170 --> 00:30:56,720 «A.» Parce que c'est actuellement un 1. 462 00:30:56,720 --> 00:30:59,570 Anding avec ce 0 va faire un 0, 463 00:30:59,570 --> 00:31:02,530 et maintenant nous allons obtenir un «A». 464 00:31:02,530 --> 00:31:06,600 >> Tous les deux sont «A», et le dernier mais non le moindre de ce type, 465 00:31:06,600 --> 00:31:10,830 nous avons XOR. C'est très bien comme ou, 466 00:31:10,830 --> 00:31:14,400 sauf que cela signifie exclusivement ou. 467 00:31:14,400 --> 00:31:18,420 C'est comme ce que vous pensez habituellement comme ou dans le monde réel. 468 00:31:18,420 --> 00:31:23,190 Alors que vous faites soit «x» ou «y», mais pas les deux. 469 00:31:23,190 --> 00:31:28,700 Voici 1 ^ 1 va être 0. 470 00:31:28,700 --> 00:31:33,650 Parce que le vrai, c'est - il ne fonctionne pas aussi bien avec le vrai et le faux logique 471 00:31:33,650 --> 00:31:37,150 comme au niveau du bit et et ou faire, 472 00:31:37,150 --> 00:31:40,100 mais vrai ^ vrai est faux. 473 00:31:40,100 --> 00:31:44,810 Parce que nous ne voulons retourner true si un seul d'entre eux est vrai. 474 00:31:44,810 --> 00:31:50,950 Donc, 1 ^ 1 est 0. Qu'en est-0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Est 1. 1 ^ 0 est 1, 0 ^ 0 est 0. 476 00:31:56,010 --> 00:32:03,890 Donc, en toutes circonstances, 0 bit 0 quelque chose va être 0. 477 00:32:03,890 --> 00:32:10,270 1 bit quelque chose 0 ou 0 bit 1, 478 00:32:10,270 --> 00:32:14,660 si c'est | ou ^, ça va être un 1, et si c'est et ce sera 0. 479 00:32:14,660 --> 00:32:20,850 Et le seul cas où une opération de bits 1 n'est pas une exclusive est avec ou. 480 00:32:20,850 --> 00:32:24,580 C'est 0110. 481 00:32:24,580 --> 00:32:36,520 Alors, voici maintenant, en utilisant XOR - si nous sommes de retour à 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ Ox20 sont ces 2 bits nous comparant. 483 00:32:43,480 --> 00:32:50,020 Ainsi, un 1 ^ 0 va me donner quoi? A un. 484 00:32:50,020 --> 00:32:58,430 'A' ^ Ox20 va me donner? Minuscules un. 485 00:32:58,430 --> 00:33:04,010 'A' ^ Ox20 va me donner? Capital A. 486 00:33:04,010 --> 00:33:09,310 Parce que quoi que ce fait, cette disjonction avec Ox20 487 00:33:09,310 --> 00:33:15,380 effectivement renversant tout ce qui ce bit est. 488 00:33:15,380 --> 00:33:21,240 Si c'est un 0, il est maintenant va devenir un 1. 489 00:33:21,240 --> 00:33:26,160 Comme il s'agit d'un 1, 1, 1 ^ est égal à 0. 490 00:33:26,160 --> 00:33:33,280 Donc, notre «a» est devenu «A», et notre «A» est devenu «un». 491 00:33:33,280 --> 00:33:36,910 Donc XOR est un moyen très pratique de feuilletant le cas. 492 00:33:36,910 --> 00:33:39,960 Vous voulez juste pour itérer sur une chaîne de lettres 493 00:33:39,960 --> 00:33:44,330 et alterner le cas de tous les personnages, 494 00:33:44,330 --> 00:33:50,680 vous venez tout XOR avec Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Maintenant, nous avons laissé changement. Décalage vers la gauche va juste, au fond, 496 00:33:55,220 --> 00:34:01,250 pousser tous les numéros dans, ou à gauche, et insérer des 0 derrière eux. 497 00:34:01,250 --> 00:34:05,550 Nous avons donc ici 00001101. 498 00:34:05,550 --> 00:34:08,560 Nous allons pousser 3 de 0 de la droite, 499 00:34:08,560 --> 00:34:13,580 et nous obtenons 01101000. 500 00:34:13,580 --> 00:34:16,380 En termes non binaires, 501 00:34:16,380 --> 00:34:24,699 nous voyons que c'est vraiment traiter 13 gauche décalée par 3, ce qui nous donne 104. 502 00:34:24,699 --> 00:34:32,530 Alors déplacement gauche, nous voyons ici, x << y est fondamentalement x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, ^ 3 est 2 8, de sorte 13 * 8 est 104. 504 00:34:40,139 --> 00:34:45,679 Si vous venez de penser binaire en général, comment chaque chiffre, 505 00:34:45,679 --> 00:34:49,530 si nous partons de la droite, c'est la place de la 1, puis lieu de la 2, puis la place de la 4. 506 00:34:49,530 --> 00:34:51,330 Donc, en poussant des 0 de la droite, 507 00:34:51,330 --> 00:34:55,080 nous sommes en train de pousser les choses qui étaient à la place de la 4 à la place du 8, 508 00:34:55,080 --> 00:34:57,920 et les choses qui étaient à la place de la 8 à la place du 16. 509 00:34:57,920 --> 00:35:01,280 Chaque changement multiplie juste par 2. Ouais? 510 00:35:01,280 --> 00:35:05,210 [Étudiants] Qu'est-ce qui se passe si vous avez changé de 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Si vous avez changé de 5 vous venez de perdre chiffres. 512 00:35:10,790 --> 00:35:15,410 Inévitablement, c'est la même chose. Comme, entiers sont sur 32 bits, 513 00:35:15,410 --> 00:35:20,750 si vous ajoutez deux très grands entiers, il ne s'intègre pas dans un entier. 514 00:35:20,750 --> 00:35:23,660 Donc, c'est la même chose ici. Si vous décalée de 5, 515 00:35:23,660 --> 00:35:25,650 nous tout simplement perdre celui-là. 516 00:35:25,650 --> 00:35:28,820 Et c'est un peu ce que je veux dire par «à peu près», 517 00:35:28,820 --> 00:35:37,470 où si vous passez trop loin, vous perdez bits. 518 00:35:37,470 --> 00:35:39,830 >> Décalage à droite va être le contraire, 519 00:35:39,830 --> 00:35:43,090 où nous allons pousser 0 de l'extrémité, 520 00:35:43,090 --> 00:35:48,400 et pour nos fins, remplir les 0 de la gauche. 521 00:35:48,400 --> 00:35:52,910 Ce faisant, nous sommes fondamentalement inverser ce que nous avions déjà fait. 522 00:35:52,910 --> 00:35:57,780 Et nous voyons que les trois des 0 sur la droite ont juste tombé, 523 00:35:57,780 --> 00:36:02,020 et nous avons poussé la 1101 tout le chemin à droite. 524 00:36:02,020 --> 00:36:08,380 Ce fait 104 >> 3, qui est, de manière efficace, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Alors maintenant, ici, c'est une idée similaire. 526 00:36:11,200 --> 00:36:18,720 Pourquoi est-il juste environ x / 2 ^ y, et pas réellement x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Parce que si je l'avais changé par 4, j'aurais perdu un 1. 528 00:36:22,240 --> 00:36:25,950 Fondamentalement, ce que vous pensez, il suffit de penser de la division entière en général. 529 00:36:25,950 --> 00:36:31,070 Donc, comme 5/2 est 2. Ce n'est pas 2,5. 530 00:36:31,070 --> 00:36:35,000 C'est la même idée ici. Lorsque l'on divise par 2, 531 00:36:35,000 --> 00:36:39,910 nous pouvons perdre bits impairs le long du chemin. 532 00:36:39,910 --> 00:36:43,870 Alors maintenant - c'est tout pour bit. C'est tout ce que vous devez savoir. 533 00:36:43,870 --> 00:36:46,340 Rappelez-vous les cas d'utilisation que nous avons vu en classe, 534 00:36:46,340 --> 00:36:49,340 comme un masque de bits est utile pour les opérateurs binaires, 535 00:36:49,340 --> 00:36:53,220 ou vous les utilisez pour les masques de bits. 536 00:36:53,220 --> 00:36:58,620 Les lettres majuscules et minuscules, des conversions est un exemple assez prototypique. 537 00:36:58,620 --> 00:37:01,640 >> Okay, donc les attaques par débordement de tampon. 538 00:37:01,640 --> 00:37:05,110 Quelqu'un se souvient-ce qui n'allait pas avec cette fonction? 539 00:37:05,110 --> 00:37:10,140 Notez que nous déclarions un tableau de 12 octets, 12 caractères, 540 00:37:10,140 --> 00:37:18,510 puis nous copions dans notre tampon de 12 caractères de la barre de chaîne entière. 541 00:37:18,510 --> 00:37:25,080 Alors, quel est le problème ici? 542 00:37:25,080 --> 00:37:32,270 Le nombre magique 12 devrait à peu près immédiatement sortir comme - pourquoi 12? 543 00:37:32,270 --> 00:37:35,050 Que faire si la barre se trouve être plus de 12 caractères? 544 00:37:35,050 --> 00:37:41,200 Que faire si la barre est des millions de caractères? 545 00:37:41,200 --> 00:37:46,010 Ici la question est memcpy. Si la barre est assez long, 546 00:37:46,010 --> 00:37:50,330 il sera juste complètement - 'c', 'c' ne se soucie pas que c'était seulement 12 caractères; 547 00:37:50,330 --> 00:37:53,280 «C» ne se soucie pas qu'il ne peut pas s'adapter à ce nombre d'octets. 548 00:37:53,280 --> 00:37:58,250 Il sera juste complètement écraser char, les 12 octets, nous avons alloué pour cela, 549 00:37:58,250 --> 00:38:01,830 et tout passé en mémoire qui ne lui appartiennent pas en ce tampon 550 00:38:01,830 --> 00:38:06,520 avec tout ce que la barre de chaîne est. 551 00:38:06,520 --> 00:38:09,780 C'était donc l'image que nous avons vu en classe 552 00:38:09,780 --> 00:38:12,220 où nous avons notre pile de grandir. 553 00:38:12,220 --> 00:38:16,040 Vous devez être habitué à ces images ou de vous familiariser à nouveau avec eux. 554 00:38:16,040 --> 00:38:21,260 Nous avons notre pile de grandir, des adresses de mémoire commencent à 0 au sommet 555 00:38:21,260 --> 00:38:26,270 et grandir jusqu'à 4 milliards de en bas. 556 00:38:26,270 --> 00:38:28,820 Nous avons notre tableau «c» quelque part en mémoire, 557 00:38:28,820 --> 00:38:32,260 puis nous avons notre pointeur de bar juste en dessous de lui, 558 00:38:32,260 --> 00:38:38,720 et puis nous avons ce pointeur à cadre enregistrées dans notre adresse de retour et la pile de notre routine de parent. 559 00:38:38,720 --> 00:38:40,800 Rappelez-vous quelle est l'adresse de retour est? 560 00:38:40,800 --> 00:38:45,360 C'est quand principale appelle une fonction foo, appelle une barre de fonctions, 561 00:38:45,360 --> 00:38:48,100 inévitablement, bar rendements. 562 00:38:48,100 --> 00:38:52,610 Ainsi, lorsque le rendement de la barre, ils ont besoin de savoir que ça va à foo qui l'a appelé. 563 00:38:52,610 --> 00:39:01,360 Donc, l'adresse de retour est l'adresse de la fonction qu'il doit retourner à quand le retour de la fonction. 564 00:39:01,360 --> 00:39:05,830 La raison pour laquelle c'est important pour tampons attaques par débordement parce que, idéalement, 565 00:39:05,830 --> 00:39:09,580 les pirates aiment changer cette adresse de retour. 566 00:39:09,580 --> 00:39:14,950 Au lieu d'aller à foo, je vais retourner à l'endroit où le pirate veut que je retourne à. 567 00:39:14,950 --> 00:39:17,760 Et, idéalement, où le pirate veut souvent revenir à 568 00:39:17,760 --> 00:39:22,400 est le début de la mémoire tampon que nous avions à l'origine. 569 00:39:22,400 --> 00:39:26,170 Donc remarquer, encore une fois, Little Indian. 570 00:39:26,170 --> 00:39:28,490 L'appareil est un exemple d'un système indien Little, 571 00:39:28,490 --> 00:39:34,140 si un nombre entier ou un pointeur est stocké avec les octets inversés. 572 00:39:34,140 --> 00:39:38,980 Donc, ici, nous voyons - est-ce? Ouais. 573 00:39:38,980 --> 00:39:45,660 Nous voyons Ox80, OxC0, OX35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Rappelez-vous les chiffres hexadécimaux? 575 00:39:48,250 --> 00:39:50,640 Nous ne renversons pas les chiffres hexadécimaux Little Indian, 576 00:39:50,640 --> 00:39:56,110 parce que 2 chiffres hexadécimaux forment un seul octet, et nous inverser les octets. 577 00:39:56,110 --> 00:40:00,300 C'est pourquoi nous ne stockons pas, comme, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Nous conservons, au contraire, chaque paire de 2 chiffres, à partir de la droite. 579 00:40:07,520 --> 00:40:10,880 Cette adresse se réfère à l'adresse de début 580 00:40:10,880 --> 00:40:15,190 de notre tampon que nous voulions vraiment copier dans en premier lieu. 581 00:40:15,190 --> 00:40:19,230 La raison qui est utile parce que, si l'attaquant 582 00:40:19,230 --> 00:40:24,100 arrivé, au lieu d'avoir une chaîne qui était juste 583 00:40:24,100 --> 00:40:27,060 une chaîne inoffensif comme leur nom ou quelque chose, 584 00:40:27,060 --> 00:40:33,900 si, au contraire, cette chaîne était juste un peu de code arbitraire 585 00:40:33,900 --> 00:40:38,610 qui faisaient ce qu'ils voulaient qu'il fasse? 586 00:40:38,610 --> 00:40:45,630 Ils pourraient donc - je ne peux pas penser à tout code cool. 587 00:40:45,630 --> 00:40:47,780 Il pourrait être n'importe quoi, cependant. Tout code catastrophique. 588 00:40:47,780 --> 00:40:51,440 S'ils voulaient, ils pourraient simplement faire quelque chose à défauts segments, mais ce serait inutile. 589 00:40:51,440 --> 00:40:54,950 Ils le font habituellement pour pirater votre système. 590 00:40:54,950 --> 00:40:59,930 >> Okay. bibliothèque de CS50. 591 00:40:59,930 --> 00:41:04,800 Ceci est, fondamentalement, getInt, getString, toutes ces fonctions, nous avons fourni pour vous. 592 00:41:04,800 --> 00:41:10,630 Nous avons donc char * string, et c'est l'abstraction que nous avons fait sauter loin 593 00:41:10,630 --> 00:41:12,450 à un certain moment au cours du semestre. 594 00:41:12,450 --> 00:41:18,220 Rappelez-vous que la chaîne est juste un tableau de caractères. 595 00:41:18,220 --> 00:41:23,240 Donc, nous voyons ici une version abrégée de getString. 596 00:41:23,240 --> 00:41:25,920 Vous devriez regarder en arrière pour se rappeler comment il est effectivement mis en œuvre. 597 00:41:25,920 --> 00:41:30,950 Les principaux détails sont, remarquons que nous obtenons en un seul caractère à la fois 598 00:41:30,950 --> 00:41:34,570 de la norme dans, ce qui est tout comme nous taper sur le clavier. 599 00:41:34,570 --> 00:41:37,890 Donc un seul caractère à la fois, et si nous obtenons trop de caractères, 600 00:41:37,890 --> 00:41:40,580 si n + 1 est supérieure à la capacité, 601 00:41:40,580 --> 00:41:44,140 alors nous avons besoin d'augmenter la capacité de notre tampon. 602 00:41:44,140 --> 00:41:47,780 Donc, ici, nous avons doublé la taille de notre tampon. 603 00:41:47,780 --> 00:41:51,840 Et qui ne cesse, nous insérons le caractère dans notre buffer 604 00:41:51,840 --> 00:41:56,220 jusqu'à ce que nous recevons une nouvelle ligne ou la fin du fichier ou que ce soit, 605 00:41:56,220 --> 00:41:59,380 dans ce cas, nous en avons terminé avec la chaîne et puis le vrai getString 606 00:41:59,380 --> 00:42:05,120 rétrécit la mémoire, comme si nous avons consacré trop de mémoire, il va revenir et réduire un peu. 607 00:42:05,120 --> 00:42:08,830 Donc, nous ne montrons pas, mais l'idée principale est 608 00:42:08,830 --> 00:42:11,960 il doit lire en un seul caractère à la fois. 609 00:42:11,960 --> 00:42:17,140 Il peut non seulement lire en tout une chose à la fois, 610 00:42:17,140 --> 00:42:19,550 parce que leur tampon est seulement d'une certaine taille. 611 00:42:19,550 --> 00:42:26,590 Donc, si la chaîne qu'il tente d'insérer dans le tampon est trop grand, alors il serait déborder. 612 00:42:26,590 --> 00:42:28,940 Donc, ici, nous empêchons que par lecture seule dans un seul caractère 613 00:42:28,940 --> 00:42:33,750 à la fois et de plus en plus à chaque fois que nous devons. 614 00:42:33,750 --> 00:42:40,270 Donc getInt et les autres fonctions de la bibliothèque CS50 ont tendance à utiliser getString 615 00:42:40,270 --> 00:42:42,310 dans leur mise en œuvre. 616 00:42:42,310 --> 00:42:45,370 Donc, j'ai souligné les choses importantes ici. 617 00:42:45,370 --> 00:42:49,460 Il appelle getString pour obtenir une chaîne. 618 00:42:49,460 --> 00:42:51,710 Si getString n'a pas la mémoire de retour, 619 00:42:51,710 --> 00:42:54,270 rappelez-vous que getString mallocs quelque chose, donc chaque fois que vous appelez getString 620 00:42:54,270 --> 00:42:57,820 vous ne devriez pas (inaudible) libérer cette chaîne que vous avez obtenu. 621 00:42:57,820 --> 00:43:02,870 Donc ici, si elle n'a pas réussi à malloc quelque chose, nous revenons INT_MAX comme un simple indicateur qui, 622 00:43:02,870 --> 00:43:05,650 hey, nous n'étions pas vraiment en mesure d'obtenir un nombre entier. 623 00:43:05,650 --> 00:43:10,830 Vous devez ignorer ce que je reviens à vous, ou 624 00:43:10,830 --> 00:43:15,540 vous ne devez pas traiter cela comme une entrée valide. 625 00:43:15,540 --> 00:43:21,360 Enfin, en supposant que ne réussissent, nous utilisons sscanf avec ce drapeau spécial, 626 00:43:21,360 --> 00:43:23,820 ce qui signifie, d'abord correspondre à un nombre entier, 627 00:43:23,820 --> 00:43:26,770 alors correspondre à des caractères après que entier. 628 00:43:26,770 --> 00:43:29,070 Donc, remarquons que nous voulons rendre égale 1. 629 00:43:29,070 --> 00:43:32,940 Donc rendements SSCANF combien de matchs si bien fait? 630 00:43:32,940 --> 00:43:37,010 Il sera de retour 1 si elle correspondait avec succès un nombre entier, 631 00:43:37,010 --> 00:43:40,890 il sera de retour 0 si elle ne correspond un nombre entier, et il sera de retour 2 632 00:43:40,890 --> 00:43:45,920 si elle correspondait un nombre entier suivi par un certain caractère. 633 00:43:45,920 --> 00:43:49,780 Donc, nous remarquons réessayer si nous comparons tout sauf une. 634 00:43:49,780 --> 00:43:55,230 Donc, si nous sommes entrés dans 1, 2, 3, C ou 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 puis 1, 2, 3 se serait stockée dans le nombre entier, 636 00:43:57,400 --> 00:43:59,620 X serait sauvegardée sur le caractère, 637 00:43:59,620 --> 00:44:06,410 sscanf reviendraient 2, et nous aimerions recommencer, parce que nous voulons seulement un nombre entier. 638 00:44:06,410 --> 00:44:09,810 >> Souffle rapidement grâce à HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language est la structure et la sémantique du web. 640 00:44:15,340 --> 00:44:19,960 Voici l'exemple de la conférence où nous avons des balises HTML. 641 00:44:19,960 --> 00:44:22,110 Nous avons balises head, étiquettes de corps, 642 00:44:22,110 --> 00:44:27,770 nous avons des exemples de balises vides où l'on ne fait pas avoir un début et balise de fin, 643 00:44:27,770 --> 00:44:30,820 nous avons juste le lien et l'image. 644 00:44:30,820 --> 00:44:38,480 Il n'ya pas d'image de balise de fermeture il ya juste une seule balise qui accomplit tout le tag doit faire. 645 00:44:38,480 --> 00:44:41,950 Le lien est un exemple, nous allons voir comment vous vous connectez à CSS, 646 00:44:41,950 --> 00:44:45,910 le script est un exemple de la façon dont vous vous connectez à un JavaScript externe. 647 00:44:45,910 --> 00:44:53,100 C'est assez simple, et souvenez-vous, HTML n'est pas un langage de programmation. 648 00:44:53,100 --> 00:44:58,250 Ici, souvenez-vous comment vous définiriez une forme ou tout au moins ce que cela ferait? 649 00:44:58,250 --> 00:45:01,740 Une telle forme a une action et une méthode. 650 00:45:01,740 --> 00:45:06,210 Les méthodes que vous ne jamais voir sont GET et POST. 651 00:45:06,210 --> 00:45:09,040 Donc GET est la version où la chose se mettre dans l'URL. 652 00:45:09,040 --> 00:45:11,680 POST est où il n'est pas mis dans l'URL. 653 00:45:11,680 --> 00:45:18,520 Au lieu de cela, toutes les données du formulaire est inséré plus caché dans la requête HTTP. 654 00:45:18,520 --> 00:45:22,390 Donc, ici, l'action définit où la requête HTTP va. 655 00:45:22,390 --> 00:45:27,490 Où il va est google.com / search. 656 00:45:27,490 --> 00:45:32,890 Méthode. Rappelez-vous les différences entre GET et POST, 657 00:45:32,890 --> 00:45:37,200 et, disons juste titre d'exemple, si vous voulez quelque chose de signet. 658 00:45:37,200 --> 00:45:40,660 Vous ne serez jamais en mesure de mettre en signet une URL POST 659 00:45:40,660 --> 00:45:44,970 parce que les données ne sont pas inclus dans l'adresse URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, maintenant, est le protocole de transfert hypertexte. 661 00:45:49,790 --> 00:45:54,080 Le protocole de transfert hypertexte, vous pouvez vous attendre à transférer 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, et il le fait. 663 00:45:57,710 --> 00:46:00,170 Mais il transfère également les images que vous trouverez sur le Web, 664 00:46:00,170 --> 00:46:05,400 tous les téléchargements que vous effectuez commencent comme une requête HTTP. 665 00:46:05,400 --> 00:46:10,350 Donc HTTP est seulement la langue de la World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Et ici, vous devez reconnaître ce genre de requête HTTP. 667 00:46:15,610 --> 00:46:19,300 Voici HTTP/1.1 sur le côté dit juste que c'est la version 668 00:46:19,300 --> 00:46:21,570 du protocole que j'utilise. 669 00:46:21,570 --> 00:46:25,770 Il est à peu près toujours va être HTTP/1.1, comme vous le verrez. 670 00:46:25,770 --> 00:46:30,110 Ensuite, nous voyons que ce n'était EEG, l'alternative étant POST, que vous pourriez voir. 671 00:46:30,110 --> 00:46:40,790 Et l'URL que je voulais visiter était www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Alors, n'oubliez pas que cela, le point d'interrogation q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 est le genre de choses qui est soumis par un formulaire. 674 00:46:49,040 --> 00:46:51,830 La réponse, il pourrait revenir à moi ressemblerait à quelque chose comme ça. 675 00:46:51,830 --> 00:46:54,050 Encore une fois, en commençant par le protocole, qui va être que, 676 00:46:54,050 --> 00:46:59,190 suivi par le code de statut. Ici, c'est 200 OK. 677 00:46:59,190 --> 00:47:05,060 Et enfin, la page Web que j'ai effectivement demandé sera suivie. 678 00:47:05,060 --> 00:47:08,210 Le code d'état possible, vous verrez peut-être, et vous devez savoir plusieurs d'entre eux. 679 00:47:08,210 --> 00:47:12,770 200 OK, vous avez probablement vu avant. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 est généralement si vous allez à un site Web et quelque chose est cassé ou leurs accidents de code PHP, 682 00:47:22,140 --> 00:47:24,930 alors que dans l'appareil, nous avons cette grande boîte orange 683 00:47:24,930 --> 00:47:27,830 qui vient et dit, comme, quelque chose ne va pas, ce code ne fonctionne pas 684 00:47:27,830 --> 00:47:30,380 ou de mauvaise cette fonction. 685 00:47:30,380 --> 00:47:33,230 Habituellement sites ne veulent pas que vous le sachiez quelles sont les fonctions réellement mauvais, 686 00:47:33,230 --> 00:47:37,880 si au contraire, ils vont juste vous donner 500 erreurs de serveur interne. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP est une sous-couche HTTP. 688 00:47:43,050 --> 00:47:47,550 Rappelez-vous que il ya Internet en dehors de la World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Comme si vous jouez un jeu en ligne qui ne passe pas par HTTP, 690 00:47:52,270 --> 00:47:55,740 il va par un autre - il est toujours en utilisant l'Internet, 691 00:47:55,740 --> 00:47:58,900 mais il n'utilise pas HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP est un exemple de protocole construit sur TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP signifie littéralement le protocole Internet. 694 00:48:07,820 --> 00:48:11,500 Chaque ordinateur possède une adresse IP, ils sont les choses à 4 chiffres 695 00:48:11,500 --> 00:48:16,510 comme 192.168.2.1, ou que ce soit; qui tend à être un local. 696 00:48:16,510 --> 00:48:23,390 Mais c'est le modèle d'une adresse IP. 697 00:48:23,390 --> 00:48:29,060 Ainsi, le DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 C'est ce que traduit choses comme google.com à une adresse IP réelle. 699 00:48:33,410 --> 00:48:37,700 Donc, si vous tapez cette adresse IP en une adresse URL, 700 00:48:37,700 --> 00:48:40,850 cela vous amènera à Google, mais vous avez tendance à ne pas se souvenir de ces choses. 701 00:48:40,850 --> 00:48:45,470 Vous avez tendance à retenir google.com place. 702 00:48:45,470 --> 00:48:51,560 La dernière chose que nous avons est des ports, où cela est la partie de TCP de la propriété intellectuelle. 703 00:48:51,560 --> 00:48:54,880 TCP fait plus. Pensez, comme, vous avez votre navigateur Web en marche. 704 00:48:54,880 --> 00:48:58,670 Peut-être que vous avez une application de messagerie fonctionnement; 705 00:48:58,670 --> 00:49:02,150 peut-être vous avez un autre programme qui utilise l'Internet fonctionne. 706 00:49:02,150 --> 00:49:05,090 Ils ont tous besoin d'un accès à Internet, 707 00:49:05,090 --> 00:49:08,100 mais votre ordinateur ne dispose que d'une carte WiFi ou autre. 708 00:49:08,100 --> 00:49:10,780 Donc ports sont le moyen que nous sommes en mesure de diviser 709 00:49:10,780 --> 00:49:13,550 comment ces applications sont en mesure d'utiliser l'Internet. 710 00:49:13,550 --> 00:49:17,230 Chaque application obtient 1 port spécifique qu'il peut écouter, 711 00:49:17,230 --> 00:49:19,670 et par défaut, HTTP utilise le port 80. 712 00:49:19,670 --> 00:49:22,410 Certains services de messagerie utilisent 25. 713 00:49:22,410 --> 00:49:24,490 Ceux numéro est faible ont tendance à être réservé. 714 00:49:24,490 --> 00:49:29,270 Vous êtes généralement en mesure d'obtenir les plus-numérotées pour vous-même. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Pages web nous de style avec CSS, pas en HTML. 717 00:49:36,030 --> 00:49:38,440 Il ya 3 endroits où vous pouvez mettre votre CSS. 718 00:49:38,440 --> 00:49:46,300 Il peut être en ligne, entre les balises de style, ou dans un fichier à part entière et ensuite lié po 719 00:49:46,300 --> 00:49:48,470 Et ici est juste un exemple de CSS. 720 00:49:48,470 --> 00:49:50,450 Vous devez reconnaître ce modèle, 721 00:49:50,450 --> 00:49:54,310 où le premier exemple est que nous sommes correspondant à la balise body, 722 00:49:54,310 --> 00:49:56,680 et ici nous centrer la balise body. 723 00:49:56,680 --> 00:50:00,420 Le deuxième exemple, nous faisons écho à la chose 724 00:50:00,420 --> 00:50:04,740 avec ID pied de page, et nous appliquons des modèles à cela. 725 00:50:04,740 --> 00:50:07,310 Notez que les ID de bas de page manuels aligne à gauche, 726 00:50:07,310 --> 00:50:09,840 tandis que le centre-corps texte s'aligne. 727 00:50:09,840 --> 00:50:13,180 Pied de page est à l'intérieur du corps. 728 00:50:13,180 --> 00:50:16,470 Il sera, au contraire, text-align gauche, même si le corps dit centre text-align. 729 00:50:16,470 --> 00:50:18,880 C'est toute la partie en cascade de lui. 730 00:50:18,880 --> 00:50:22,110 Vous pouvez avoir - vous pouvez spécifier les styles pour le corps, 731 00:50:22,110 --> 00:50:25,320 et puis les choses dans le corps, vous pouvez spécifier des styles plus spécifiques, 732 00:50:25,320 --> 00:50:28,160 et les choses fonctionnent comme prévu. 733 00:50:28,160 --> 00:50:34,420 Prescripteurs CSS plus spécifiques priment. 734 00:50:34,420 --> 00:50:46,140 Je crois que c'est tout. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Salut tout le monde. Si seulement je pouvais obtenir votre attention. 736 00:50:49,260 --> 00:50:53,990 Je suis Ali et je vais passer par PHP et SQL très rapide. 737 00:50:53,990 --> 00:51:00,310 Nous pouvons donc commencer. PHP est l'abréviation de PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Et comme vous devez savoir, c'est un langage de script côté serveur, 739 00:51:03,730 --> 00:51:06,800 et nous l'utilisons pour l'extrémité arrière de sites Web, 740 00:51:06,800 --> 00:51:12,540 et comment il fait beaucoup de calculs, la partie arrière-scènes. 741 00:51:12,540 --> 00:51:17,510 Syntaxe. Ce n'est pas comme C, surprise, surprise. 742 00:51:17,510 --> 00:51:22,060 Il doit toujours commencer avec l', si vous pouvez le voir, le - je ne peux pas aller de l'avant. 743 00:51:22,060 --> 00:51:31,340 Vous pouvez voir vous avez besoin de nouveaux types de supports et alors vous devez également? Php. 744 00:51:31,340 --> 00:51:35,780 C'est toujours la façon dont vous devez encadrer votre texte PHP, votre code PHP. 745 00:51:35,780 --> 00:51:39,180 Donc, il ne peut pas juste être comme C, où vous sorte de le mettre en premier lieu. 746 00:51:39,180 --> 00:51:42,290 Vous devez toujours entourer. 747 00:51:42,290 --> 00:51:47,610 Et maintenant, la syntaxe est important que toutes les variables doivent commencer par le caractère $. 748 00:51:47,610 --> 00:51:49,490 Vous devez faire lorsque vous les définir, vous devez le faire 749 00:51:49,490 --> 00:51:51,860 lorsque vous parlez à eux plus tard. 750 00:51:51,860 --> 00:51:56,510 Vous avez toujours besoin que $. C'est votre nouveau meilleur ami, à peu près. 751 00:51:56,510 --> 00:52:01,690 Vous n'avez pas - contrairement à C, vous n'avez pas besoin de mettre ce genre de type de variable il est. 752 00:52:01,690 --> 00:52:04,940 Ainsi, alors que vous avez besoin de l'$, vous n'avez pas besoin de mettre, comme, 753 00:52:04,940 --> 00:52:09,470 int x ou y chaîne, etcetera, etcetera. 754 00:52:09,470 --> 00:52:11,490 Ainsi, une légère différence. 755 00:52:11,490 --> 00:52:15,590 À la suite de cela, il signifie que PHP est un type faiblement. 756 00:52:15,590 --> 00:52:19,310 PHP est un langage de type faiblement, et il a des variables faiblement typé. 757 00:52:19,310 --> 00:52:24,020 En d'autres termes, cela signifie que vous pouvez basculer entre les différentes sortes de types de variables. 758 00:52:24,020 --> 00:52:27,230 Vous pouvez enregistrer votre numéro 1 comme un int, 759 00:52:27,230 --> 00:52:29,650 vous pouvez le stocker sous forme de chaîne, et vous pouvez l'enregistrer comme un flotteur, 760 00:52:29,650 --> 00:52:33,550 et tout sera que numéro 1. 761 00:52:33,550 --> 00:52:36,080 Même si vous êtes le stocker sous différentes formes, 762 00:52:36,080 --> 00:52:39,120 c'est encore - les types de variables tiennent toujours à la fin. 763 00:52:39,120 --> 00:52:41,540 Donc, si vous regardez ici, si vous vous souvenez de pset 7, 764 00:52:41,540 --> 00:52:43,500 beaucoup d'entre vous ont probablement des problèmes avec cela. 765 00:52:43,500 --> 00:52:47,280 Deux signes d'égalité, 3, 4 signes égal signe égal. 766 00:52:47,280 --> 00:52:49,990 D'accord, il n'y a pas de 4 signes égal, mais il ya 2 et 3. 767 00:52:49,990 --> 00:52:53,320 Vous utilisez deux signes égal à vérifier les valeurs. 768 00:52:53,320 --> 00:52:55,830 Il peut vérifier tous les types. 769 00:52:55,830 --> 00:52:58,770 Donc, si vous pouvez le voir au premier exemple, 770 00:52:58,770 --> 00:53:02,210 J'ai num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Donc, votre int et votre chaîne sont à la fois techniquement, 1, 772 00:53:06,710 --> 00:53:10,790 mais ils sont de différents types. Mais pour les doubles égaux, ça va encore passer. 773 00:53:10,790 --> 00:53:15,510 Toutefois, pour les triples égaux, il vérifie la valeur ainsi que les différents types. 774 00:53:15,510 --> 00:53:18,760 Cela signifie qu'il ne va pas se passer dans ce second cas en l'espèce, 775 00:53:18,760 --> 00:53:22,350 où vous utilisez trois signes égal à la place. 776 00:53:22,350 --> 00:53:26,590 C'est donc une grande différence que vous devriez tous avoir montré aujourd'hui. 777 00:53:26,590 --> 00:53:31,570 >> Concaténation de chaîne est une autre chose puissante que vous pouvez utiliser en PHP. 778 00:53:31,570 --> 00:53:34,080 Il est fondamentalement juste cette notation de point pratique, 779 00:53:34,080 --> 00:53:36,230 et c'est ainsi que vous pouvez lier des chaînes de caractères. 780 00:53:36,230 --> 00:53:40,800 Donc si vous avez de chat et de chien que vous avez, et vous voulez mettre les deux cordes ensemble, 781 00:53:40,800 --> 00:53:44,080 vous pouvez utiliser la période, et c'est une sorte de comment cela fonctionne. 782 00:53:44,080 --> 00:53:46,660 Vous pouvez aussi les placer à côté de l'autre, 783 00:53:46,660 --> 00:53:49,030 comme vous pouvez le voir dans l'exemple ici bas, 784 00:53:49,030 --> 00:53:51,610 où j'ai écho chaîne 1, l'espace chaîne 2. 785 00:53:51,610 --> 00:53:56,930 PHP saura les remplacer en tant que tel. 786 00:53:56,930 --> 00:53:59,780 Tableaux. Maintenant, en PHP, il existe 2 types de tableaux. 787 00:53:59,780 --> 00:54:03,180 Vous pouvez avoir des tableaux réguliers, et vous pouvez aussi avoir des tableaux associatifs, 788 00:54:03,180 --> 00:54:06,040 et nous allons passer par eux en ce moment. 789 00:54:06,040 --> 00:54:08,280 Réseaux réguliers sont tout cela en C, 790 00:54:08,280 --> 00:54:11,240 et si vous avez des indices qui sont numérotés. 791 00:54:11,240 --> 00:54:13,160 En ce moment nous allons juste créer un et mettre - 792 00:54:13,160 --> 00:54:15,500 C'est donc ainsi que nous créons un tableau vide, alors nous allons 793 00:54:15,500 --> 00:54:17,310 mettre dans le numéro d'index 0. 794 00:54:17,310 --> 00:54:19,200 Nous allons mettre le numéro 6, la valeur 6. 795 00:54:19,200 --> 00:54:21,500 Vous pouvez le voir en bas ici. 796 00:54:21,500 --> 00:54:24,240 Where's - à l'index numéro 1, nous allons mettre le numéro de valeur 4, 797 00:54:24,240 --> 00:54:26,720 et si vous pouvez le voir il ya un 6, il ya un 4, 798 00:54:26,720 --> 00:54:29,160 et alors que nous sommes l'impression des choses, 799 00:54:29,160 --> 00:54:33,550 quand nous essayons d'imprimer la valeur stockée au numéro d'index 0, 800 00:54:33,550 --> 00:54:36,900 puis nous verrons la valeur 6 est imprimé. Cool? 801 00:54:36,900 --> 00:54:40,160 C'est donc réseaux réguliers pour vous. 802 00:54:40,160 --> 00:54:42,750 Une autre façon, vous pouvez également ajouter des choses à réseaux réguliers maintenant 803 00:54:42,750 --> 00:54:44,780 est que vous pouvez simplement les ajouter à la fin. 804 00:54:44,780 --> 00:54:47,240 Cela signifie que vous n'avez pas à spécifier l'index spécifique. 805 00:54:47,240 --> 00:54:51,000 Vous pouvez voir le numéro, puis dans les crochets il n'y a pas d'index spécifié. 806 00:54:51,000 --> 00:54:56,270 Et il saura - PHP saura juste ajouter à la fin de la liste, la prochaine place libre. 807 00:54:56,270 --> 00:54:59,190 Ainsi, vous pouvez voir le 1 là à ce point 0, 808 00:54:59,190 --> 00:55:02,690 2 allés là à la première place. 809 00:55:02,690 --> 00:55:04,690 Le 3 va - on ajoute ainsi. 810 00:55:04,690 --> 00:55:06,720 Donc, ce genre de logique. Vous êtes juste constamment ajouter, 811 00:55:06,720 --> 00:55:09,360 et puis quand nous sommes en écho à l'indice de numéro 1, 812 00:55:09,360 --> 00:55:13,080 il affichera la valeur 2. 813 00:55:13,080 --> 00:55:16,800 >> Ensuite, nous avons des tableaux qui sont des tableaux associatifs. 814 00:55:16,800 --> 00:55:19,370 Les tableaux associatifs, au lieu d'avoir des indices numériques, 815 00:55:19,370 --> 00:55:23,630 ce qu'ils font est, ils ont des indices qui sont par chaîne. 816 00:55:23,630 --> 00:55:25,670 Vous pouvez le voir, à la place de - je me suis débarrassé de tous ces indices numériques, 817 00:55:25,670 --> 00:55:32,140 et maintenant il est key1, key2, key3, et ils sont entre guillemets pour signifier que ce sont tous des chaînes. 818 00:55:32,140 --> 00:55:34,470 Donc, nous pouvons avoir un exemple. 819 00:55:34,470 --> 00:55:38,790 L'exemple de ceci est que nous avons la tf, et c'est le nom de l'index. 820 00:55:38,790 --> 00:55:42,030 Nous allons mettre "Ali" que le nom, à l'index, les calories consommées, 821 00:55:42,030 --> 00:55:47,640 nous pouvons mettre un int cette fois au lieu d'une chaîne, 822 00:55:47,640 --> 00:55:52,240 puis à les goûts de l'indice, nous pouvons mettre un tableau entier à l'intérieur de celui-ci. 823 00:55:52,240 --> 00:55:55,490 Donc c'est un peu - c'est un concept similaire à la façon dont nous avions 824 00:55:55,490 --> 00:55:58,930 Indices de chiffres, mais maintenant nous pouvons changer les indices autour de 825 00:55:58,930 --> 00:56:03,890 de les avoir comme des chaînes à la place. 826 00:56:03,890 --> 00:56:06,070 Vous pouvez aussi le faire, mais pas seulement le faire individuellement, 827 00:56:06,070 --> 00:56:09,400 vous pouvez faire tout cela en une seule fois. Donc vous pouvez voir que tf de ce tableau, 828 00:56:09,400 --> 00:56:13,350 puis nous les mettons dans un géant ensemble de crochet. 829 00:56:13,350 --> 00:56:15,220 Alors, ça peut accélérer les choses. 830 00:56:15,220 --> 00:56:19,730 Il s'agit plus d'un choix stylistique que non. 831 00:56:19,730 --> 00:56:21,550 Nous avons aussi des boucles. 832 00:56:21,550 --> 00:56:26,020 En C, nous avons boucles qui fonctionnent comme ça. 833 00:56:26,020 --> 00:56:29,690 Nous avons eu notre réseau, et nous sommes allés de l'index 0 à la fin de la liste, 834 00:56:29,690 --> 00:56:31,740 et nous imprimons le tout, non? 835 00:56:31,740 --> 00:56:33,880 Sauf que le problème est, pour les tableaux associatifs, 836 00:56:33,880 --> 00:56:36,610 nous ne savons pas nécessairement les indices numériques 837 00:56:36,610 --> 00:56:39,610 parce que maintenant nous avons les indices de chaîne. 838 00:56:39,610 --> 00:56:44,800 Maintenant, nous utilisons boucles foreach, qui, encore une fois, vous nous l'espérons utilisés dans pset 7. 839 00:56:44,800 --> 00:56:48,930 boucles foreach suffit de savoir chaque partie de la liste. 840 00:56:48,930 --> 00:56:52,450 Et il n'a pas à savoir exactement l'indice numérique que vous avez. 841 00:56:52,450 --> 00:56:56,490 Donc, vous avez la syntaxe foreach, il est donc foreach, vous mettez le tableau. 842 00:56:56,490 --> 00:57:00,430 Donc, mon tableau est appelé ensemble de processeurs, et alors que, comme le mot, 843 00:57:00,430 --> 00:57:04,530 et puis vous mettez cette variable temporaire locale que vous allez utiliser 844 00:57:04,530 --> 00:57:10,690 juste pour la chose spécifique qui va tenir le spécifique - 845 00:57:10,690 --> 00:57:14,770 une instance ou une section de la matrice. 846 00:57:14,770 --> 00:57:18,350 Pset nombre tiendra 1, et alors peut-être qu'il tiendra le numéro 6, 847 00:57:18,350 --> 00:57:20,410 et il tiendra le numéro 2. 848 00:57:20,410 --> 00:57:26,630 Mais il est garanti de passer par chaque valeur unique qui est dans le tableau. 849 00:57:26,630 --> 00:57:30,530 Fonctions utiles que vous devez savoir en PHP sont le besoin, 850 00:57:30,530 --> 00:57:35,880 de sorte que permet de s'assurer que vous êtes y compris certains fichiers, écho, sortie, vide. 851 00:57:35,880 --> 00:57:40,490 Je vous recommande fortement de regarder pset 7 et regardez ces fonctions. 852 00:57:40,490 --> 00:57:42,810 Vous pourriez avoir à connaître ceux, 853 00:57:42,810 --> 00:57:47,060 donc je ne sais vraiment quoi, exactement, ceux qui font tous. 854 00:57:47,060 --> 00:57:50,080 >> Et maintenant, nous allons passer par la portée très rapidement. 855 00:57:50,080 --> 00:57:53,490 Dans le périmètre, PHP est une sorte de chose génial, contrairement au C, 856 00:57:53,490 --> 00:57:56,170 et donc nous allons juste passer rapidement. 857 00:57:56,170 --> 00:57:58,930 Alors disons que nous commençons à cette flèche que nous avons là. 858 00:57:58,930 --> 00:58:02,900 Et nous allons commencer avec $ i. Donc, la variable 'i' va être 0, 859 00:58:02,900 --> 00:58:06,730 et nous allons simplement continuer à imprimer dans cette grande boîte blanche là-bas. 860 00:58:06,730 --> 00:58:09,220 Nous allons commencer avec i0, et puis nous allons faire écho. 861 00:58:09,220 --> 00:58:12,670 Donc, il ya le 0. 862 00:58:12,670 --> 00:58:15,210 Et puis nous allons incrémenter par la boucle pour, 863 00:58:15,210 --> 00:58:17,810 et puis ça va être la valeur 1. 864 00:58:17,810 --> 00:58:20,070 L'un est inférieur à 3, donc ça va passer à travers cette boucle, 865 00:58:20,070 --> 00:58:23,230 et puis nous allons le voir à nouveau imprimé. 866 00:58:23,230 --> 00:58:25,520 Nous allons augmenter de nouveau pour 2, 867 00:58:25,520 --> 00:58:29,860 et 2 est inférieur à 3, il y passe la boucle, et il y imprimer le 2. 868 00:58:29,860 --> 00:58:35,100 Ensuite, vous noterez que 3 n'est pas inférieur à 3, nous allons donc à sortir de la boucle. 869 00:58:35,100 --> 00:58:40,050 Alors maintenant, nous avons sortis, puis nous allons passer en AFunction. 870 00:58:40,050 --> 00:58:45,010 Très bien. Donc, vous devez noter que cette variable que nous avons créé, 871 00:58:45,010 --> 00:58:48,270 la variable «i», n'est pas scope localement. 872 00:58:48,270 --> 00:58:50,280 Cela signifie que ce n'est pas à la boucle locale, 873 00:58:50,280 --> 00:58:58,060 et que cette variable nous pouvons encore accéder et modifier ensuite, et il sera toujours efficace. 874 00:58:58,060 --> 00:59:02,160 Donc, si vous allez dans la fonction maintenant, vous verrez que nous utilisons aussi la variable «i», 875 00:59:02,160 --> 00:59:05,320 et nous allons augmenter 'i' + +. 876 00:59:05,320 --> 00:59:09,410 On pourrait penser, à première vue, sur la base de C, que c'est une copie de la variable «i». 877 00:59:09,410 --> 00:59:12,830 C'est une chose totalement différente, ce qui est correct. 878 00:59:12,830 --> 00:59:16,560 Ainsi, lorsque nous imprimons, nous allons imprimer 'i' + +, qui va imprimer que 4, 879 00:59:16,560 --> 00:59:19,640 et puis nous allons - désolé. 880 00:59:19,640 --> 00:59:22,030 Ensuite, nous allons finir de cette fonction, 881 00:59:22,030 --> 00:59:24,820 et nous allons être où que la flèche est en ce moment. 882 00:59:24,820 --> 00:59:29,190 Cela signifie que là, cependant, même si la fonction a changé la valeur de «i», 883 00:59:29,190 --> 00:59:32,620 il n'a pas changé en dehors de la fonction, 884 00:59:32,620 --> 00:59:35,060 parce que la fonction a une portée distincte. 885 00:59:35,060 --> 00:59:38,960 Cela signifie que lorsque nous faisons écho à «i», il n'a pas changé dans le champ d'application de la fonction, 886 00:59:38,960 --> 00:59:43,660 et alors nous allons imprimer 3 fois. 887 00:59:43,660 --> 00:59:47,520 Des choses différentes sur la portée en PHP qu'en C 888 00:59:47,520 --> 00:59:51,130 Maintenant >> en PHP et HTML. 889 00:59:51,130 --> 00:59:53,510 PHP est utilisé pour créer des pages web dynamiques. 890 00:59:53,510 --> 00:59:58,660 Il sorte de choses différentes. 891 00:59:58,660 --> 01:00:02,090 Nous avons différent de HTML. 892 01:00:02,090 --> 01:00:05,230 Avec le HTML, nous avons toujours juste la même chose statique, comme la façon dont Rob a montré, 893 01:00:05,230 --> 01:00:09,370 alors que PHP, vous pouvez changer les choses en fonction de qui est l'utilisateur. 894 01:00:09,370 --> 01:00:11,830 Donc, si j'ai cela, je l'ai, "Vous êtes connecté en tant que -" puis le nom, 895 01:00:11,830 --> 01:00:14,420 et je peux changer le nom. Donc maintenant le nom est Joseph, 896 01:00:14,420 --> 01:00:18,880 et il a le "sur-moi", mais je peux aussi changer le nom d'avoir Tommy. 897 01:00:18,880 --> 01:00:21,700 Et ce serait une chose différente. 898 01:00:21,700 --> 01:00:23,840 Alors nous pouvons également changer différentes choses sur lui, 899 01:00:23,840 --> 01:00:27,070 et il affichera un contenu différent en fonction du nom. 900 01:00:27,070 --> 01:00:31,430 Alors PHP peut sorte de changer ce qui se passe dans votre site Web. 901 01:00:31,430 --> 01:00:33,540 Même ici. Pourtant, note qu'ils ont un contenu différent, 902 01:00:33,540 --> 01:00:38,870 même si vous êtes techniquement accédez toujours à la même page web sur la surface. 903 01:00:38,870 --> 01:00:43,450 Génération HTML. Il ya 2 façons différentes que vous pouvez faire cela. 904 01:00:43,450 --> 01:00:48,980 Nous allons donc à travers ce droit maintenant. La première façon est, vous avez - ouais, désolé. 905 01:00:48,980 --> 01:00:51,150 Donc, vous avez juste votre régulière pour la boucle en PHP, 906 01:00:51,150 --> 01:00:56,270 et puis vous l'écho en PHP et vous echo sur HTML. 907 01:00:56,270 --> 01:00:58,720 En utilisant ce que Rob vous a montré de l'écriture HTML 908 01:00:58,720 --> 01:01:04,030 et puis en utilisant l'impression de PHP pour tout imprimer à la page web. 909 01:01:04,030 --> 01:01:09,520 L'autre façon est de faire comme si vous vous séparez le PHP et le code HTML. 910 01:01:09,520 --> 01:01:11,940 Ainsi, vous pouvez avoir une ligne de PHP qui commence la boucle, 911 01:01:11,940 --> 01:01:16,020 alors vous pouvez avoir la ligne de code HTML dans une chose distincte, 912 01:01:16,020 --> 01:01:19,700 puis vous finissez la boucle, à nouveau, avec un PHP. 913 01:01:19,700 --> 01:01:21,800 Donc, c'est une sorte de séparation dehors. 914 01:01:21,800 --> 01:01:24,020 Sur le côté gauche, vous pouvez que vous avez toutes les - 915 01:01:24,020 --> 01:01:26,360 c'est juste une partie de PHP. 916 01:01:26,360 --> 01:01:28,510 Sur la droite, vous pouvez voir que vous avez une ligne de PHP, 917 01:01:28,510 --> 01:01:32,540 vous avez une ligne de code HTML, et vous avez une ligne de PHP à nouveau. 918 01:01:32,540 --> 01:01:36,870 Donc séparer dehors dans ce qu'ils font. 919 01:01:36,870 --> 01:01:39,330 Et vous remarquerez que de toute façon, pour l'un d'eux, 920 01:01:39,330 --> 01:01:41,980 ils impriment toujours sur l'image, l'image, l'image, 921 01:01:41,980 --> 01:01:44,540 de sorte que HTML est encore imprimé de la même façon. 922 01:01:44,540 --> 01:01:49,870 Et puis, vous verrez toujours les 3 images apparaissent sur votre site. 923 01:01:49,870 --> 01:01:52,820 C'est donc deux façons différentes de faire la même chose. 924 01:01:52,820 --> 01:01:55,060 >> Maintenant, nous avons des formulaires et des demandes. Comme Rob vous a montré, 925 01:01:55,060 --> 01:01:59,400 existe des formes de HTML, et nous juste en coup de vent à travers cela. 926 01:01:59,400 --> 01:02:02,040 Vous avez une action et vous avez une méthode, et votre action 927 01:02:02,040 --> 01:02:04,350 sorte de vous où vous allez envoyer montre, et la méthode est de savoir si 928 01:02:04,350 --> 01:02:06,960 ça va être un GET ou POST. 929 01:02:06,960 --> 01:02:11,220 Et une requête GET, comme l'a dit Rob, signifie que vous allez mettre dans une forme 930 01:02:11,220 --> 01:02:15,760 et vous verrez comme une URL, alors une requête POST vous ne verrez pas dans une URL. 931 01:02:15,760 --> 01:02:17,840 Ainsi, une légère différence. 932 01:02:17,840 --> 01:02:19,950 Cependant, une chose qui est la même chose 933 01:02:19,950 --> 01:02:22,560 est que POST et GET sont également précaires. 934 01:02:22,560 --> 01:02:26,430 Alors vous pouvez penser que juste parce que vous ne le voyez pas dans l'URL, 935 01:02:26,430 --> 01:02:28,790 cela signifie que le POST est plus sûr, 936 01:02:28,790 --> 01:02:34,420 mais vous pouvez toujours le voir dans vos cookies dans les informations que vous envoyez. 937 01:02:34,420 --> 01:02:38,260 Donc, ne pensez pas que sur l'un ou l'autre. 938 01:02:38,260 --> 01:02:42,160 Une autre chose à noter est que vous avez également des variables de la section. 939 01:02:42,160 --> 01:02:45,850 Vous les gars utilisé ce dans pset 7 pour obtenir vos informations d'identification d'utilisateur. 940 01:02:45,850 --> 01:02:48,550 Ce qui s'est passé, c'est que vous pouvez utiliser ce tableau associatif 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, et alors vous êtes en mesure d'accéder à des choses différentes 942 01:02:53,310 --> 01:02:57,720 et stocker des choses différentes à travers les pages. 943 01:02:57,720 --> 01:03:00,750 >> La dernière chose est que nous avons SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 et il s'agit d'un langage de programmation pour la gestion de bases de données. 945 01:03:04,360 --> 01:03:08,220 Qu'est-ce, exactement, sont bases de données? Ils sont des collections de tableaux, 946 01:03:08,220 --> 01:03:10,630 et chaque table peut avoir le même genre d'objets. 947 01:03:10,630 --> 01:03:14,990 Nous avons donc eu une table d'utilisateurs dans votre pset des finances. 948 01:03:14,990 --> 01:03:20,610 Et pourquoi sont-ils utiles? Parce que c'est un moyen de stocker de façon permanente des informations. 949 01:03:20,610 --> 01:03:22,840 C'est un moyen de suivre les choses et de gérer les choses 950 01:03:22,840 --> 01:03:25,890 et effectivement le voir sur les différentes pages et de garder la trace. 951 01:03:25,890 --> 01:03:29,930 Alors que si vous stockez juste il à ce seul moment immédiate 952 01:03:29,930 --> 01:03:33,720 et ensuite l'utiliser plus tard, vous ne serez pas en mesure d'accéder à tout ce que vous avez enregistré. 953 01:03:33,720 --> 01:03:37,660 Nous avons 4 choses importantes que nous utilisons pour les commandes SQL. 954 01:03:37,660 --> 01:03:40,190 Nous avons select, insert, delete et update. 955 01:03:40,190 --> 01:03:42,880 Ce sont vraiment important pour vous les gars à savoir pour votre quiz. 956 01:03:42,880 --> 01:03:45,990 >> Nous allons rapidement passer en revue sélectionnons maintenant. 957 01:03:45,990 --> 01:03:48,540 Fondamentalement, vous sélectionnez les lignes d'une base de données. 958 01:03:48,540 --> 01:03:52,400 Donc, si vous avez, ici - 959 01:03:52,400 --> 01:03:56,740 nous avons ces deux choses différentes, et nous voulons sélectionner la table des classes 960 01:03:56,740 --> 01:04:01,480 où génial - où dans la colonne impressionnante la valeur est 1. 961 01:04:01,480 --> 01:04:04,460 Donc vous pouvez voir ici, nous avons ces deux choses de nom de la classe, 962 01:04:04,460 --> 01:04:08,490 CS50 et Stat110, et nous avons les ID de classe et le slogan. 963 01:04:08,490 --> 01:04:13,150 Donc, nous voulons sélectionner toutes ces informations. 964 01:04:13,150 --> 01:04:17,480 Ensuite, vous pouvez voir ici que c'est le genre de cueillette de cette colonne impressionnant, 965 01:04:17,480 --> 01:04:25,170 où toutes les choses sont une, et puis il a l'ID de classe, le nom de classe et le slogan qu'il peut choisir. 966 01:04:25,170 --> 01:04:28,100 Comment faites-vous exactement dans votre code? Vous devez utiliser PHP. 967 01:04:28,100 --> 01:04:33,830 C'est donc une sorte de comment PHP et SQL sont liés les uns aux autres. 968 01:04:33,830 --> 01:04:38,130 Maintenant, nous avons notre code, et nous allons utiliser notre fonction de recherche 969 01:04:38,130 --> 01:04:41,370 comme nous l'avons fait dans pset 7, et nous allons exécuter la requête SQL. 970 01:04:41,370 --> 01:04:43,870 Ensuite, nous allons avoir - 971 01:04:43,870 --> 01:04:46,280 nous devons toujours vérifier si triple égalité de rang si elle est fausse. 972 01:04:46,280 --> 01:04:49,010 Encore une fois, vous voulez vérifier le type et la valeur, 973 01:04:49,010 --> 01:04:53,880 et puis si cela ne fonctionne pas, alors vous voulez faire des excuses, comme d'habitude, comme nous l'avons fait dans pset 7. 974 01:04:53,880 --> 01:04:55,870 Sinon, vous voulez faire une boucle par tout ceux à portée de main 975 01:04:55,870 --> 01:04:59,410 foreach que nous venons de voir. 976 01:04:59,410 --> 01:05:01,280 Maintenant que nous sommes une boucle à travers et nous avons fait le passé, 977 01:05:01,280 --> 01:05:05,080 Supposons que notre requête passé, maintenant nous avons notre boucle foreach. 978 01:05:05,080 --> 01:05:11,050 Et la première ligne, il a, alors voici la ligne, ici, il est enfermé dans une boîte. 979 01:05:11,050 --> 01:05:14,010 Il va imprimer toutes les informations qu'il a obtenu. 980 01:05:14,010 --> 01:05:18,070 Cela va donc à imprimer en bas "Voulez savoir HTML?" 981 01:05:18,070 --> 01:05:23,370 Ensuite, il va aller à la ligne suivante, parce que c'est terminé la première boucle, 982 01:05:23,370 --> 01:05:26,510 et oui, alors il va imprimer la deuxième ligne de celui-ci, 983 01:05:26,510 --> 01:05:32,120 qui va être STAT110, Retrouvez tous les moments. 984 01:05:32,120 --> 01:05:34,290 >> Une dernière chose est sur SQL vulnérabilités. 985 01:05:34,290 --> 01:05:37,300 Je sais que David en a parlé un peu en cours. 986 01:05:37,300 --> 01:05:40,730 Vous pouvez lire plus tard. C'est vraiment drôle. 987 01:05:40,730 --> 01:05:45,320 Injection SQL est une sorte de chose délicate. 988 01:05:45,320 --> 01:05:49,890 Disons que vous venez de coller ces variables directement dans votre requête, 989 01:05:49,890 --> 01:05:52,290 comme vous pouvez le voir dans cette première ligne. 990 01:05:52,290 --> 01:05:54,520 Il semble donc bien, non? Vous êtes juste mettre dans le nom d'utilisateur 991 01:05:54,520 --> 01:05:58,820 et mot de passe pour votre requête SQL, et vous voulez embarquer le tout et obtenir tout ce qui est dans votre tableau de données. 992 01:05:58,820 --> 01:06:01,450 Cela semble assez simple. Donc, disons que quelqu'un met en, 993 01:06:01,450 --> 01:06:04,910 pour le mot de passe, ce texte OU ici - 994 01:06:04,910 --> 01:06:06,780 devrait en fait être dans la zone rouge. 995 01:06:06,780 --> 01:06:11,920 Donc, disons qu'ils ont mis ce mot de passe en - c'est ce qu'ils entrent. 996 01:06:11,920 --> 01:06:16,520 Alors qu'ils mettent ou "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Une sorte de mot de passe idiot d'avoir. 998 01:06:20,880 --> 01:06:25,070 Maintenant, nous allons tout simplement le remplacer, et vous noterez que dans cette requête SQL maintenant, 999 01:06:25,070 --> 01:06:29,090 il évalue toujours vrai, car vous remarquerez que 1000 01:06:29,090 --> 01:06:32,240 vous pouvez requête SQL sélectionner toutes ces informations 1001 01:06:32,240 --> 01:06:35,420 ou vous pouvez juste avoir 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Alors que va toujours à true. 1003 01:06:41,030 --> 01:06:46,610 Cela ne va pas vraiment travailler, parce que cela signifie que le pirate peut s'introduire dans votre système. 1004 01:06:46,610 --> 01:06:49,300 La solution à cela est que vous devez utiliser le système AOP, 1005 01:06:49,300 --> 01:06:51,360 ce qui signifie que vous devez utiliser des points d'interrogation, 1006 01:06:51,360 --> 01:06:53,350 qui est ce que vous les gars utilisés dans pset 7, 1007 01:06:53,350 --> 01:06:57,620 où vous allez utiliser un point d'interrogation à la place de l'endroit où vous voulez mettre quelque chose, 1008 01:06:57,620 --> 01:07:01,430 et puis vous allez avoir une virgule, et alors vous aurez de temps après, 1009 01:07:01,430 --> 01:07:07,610 après votre chaîne, les différentes variables que vous souhaitez remplacer dans votre interrogation. 1010 01:07:07,610 --> 01:07:10,330 Ainsi, vous aurez noter ici que maintenant j'ai ces points d'interrogation rouge. 1011 01:07:10,330 --> 01:07:15,420 Puis-je mettre les variables après mes chaînes et je sais de les remplacer dans cet ordre par la suite. 1012 01:07:15,420 --> 01:07:18,470 Cela fera en sorte que si quelqu'un fait comme ça, 1013 01:07:18,470 --> 01:07:24,050 et ils ont le ou 1 = 1 la situation, qui fera en sorte, 1014 01:07:24,050 --> 01:07:30,490 dans la partie arrière, assurez-vous qu'il ne sera pas réellement briser la requête SQL. 1015 01:07:30,490 --> 01:07:33,660 Bon, alors c'est à peu près tout, un tourbillon de PHP et SQL. 1016 01:07:33,660 --> 01:07:41,520 Bonne chance à vous tous, et maintenant à Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Bon tout le monde. Temps d'aller sur un peu de JavaScript 1018 01:07:44,270 --> 01:07:48,840 et d'autres choses très rapidement, de sorte que nous ne vous tiennent pas ce soir. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Oui. JavaScript est une sorte de quelque chose de cool, soi-disant. 1020 01:07:56,930 --> 01:07:59,090 Les choses que vous avez vraiment besoin de savoir sur JavaScript, c'est un peu comme 1021 01:07:59,090 --> 01:08:03,810 la fin côté client de ce que votre application web va faire. 1022 01:08:03,810 --> 01:08:08,280 Il ya certaines choses que vous juste ne voulez pas de prendre soin de tout le temps sur le côté serveur. 1023 01:08:08,280 --> 01:08:12,880 Toutes les petites interactions, soulignant une chose, faire quelque chose de disparaître. 1024 01:08:12,880 --> 01:08:15,340 Vous ne voulez vraiment pas avoir à parler à votre serveur tout le temps pour cela. 1025 01:08:15,340 --> 01:08:18,069 Et certains ce n'est même pas possible de faire sur le côté serveur. 1026 01:08:18,069 --> 01:08:21,899 C'est pourquoi nous avons besoin de quelque chose comme JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Choses cool sur JavaScript: Il est typé dynamiquement. 1028 01:08:24,359 --> 01:08:27,149 Ce que cela signifie est que votre programme n'a pas besoin de savoir 1029 01:08:27,149 --> 01:08:30,970 ce qui, exactement, les variables sont quand vous écrivez sur. 1030 01:08:30,970 --> 01:08:34,510 Il va en quelque sorte de le comprendre comme il fonctionne. 1031 01:08:34,510 --> 01:08:37,520 D'autres choses qui sont cool à ce sujet: Il s'agit d'un langage de accolade, 1032 01:08:37,520 --> 01:08:41,359 ce qui signifie que la syntaxe est similaire à C et PHP. 1033 01:08:41,359 --> 01:08:47,050 Vous n'avez pas à faire beaucoup retravailler quand vous apprenez JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Ici, nous avons un peu de JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Ce qui est intéressant ici, c'est que, si vous regardez, 1036 01:08:52,560 --> 01:08:56,330 nous avons un peu de JavaScript là, dans la balise head. 1037 01:08:56,330 --> 01:08:59,479 Qu'est-ce que ne comprennent est essentiellement juste un fichier JavaScript. 1038 01:08:59,479 --> 01:09:02,260 C'est une façon que vous pouvez inclure JavaScript dans votre programme. 1039 01:09:02,260 --> 01:09:06,910 Ensuite, le second peu est en fait quelque JavaScript en ligne, 1040 01:09:06,910 --> 01:09:10,790 très similaire à un style en ligne avec CSS, 1041 01:09:10,790 --> 01:09:16,180 et vous êtes en train d'écrire un peu de code très rapidement il. 1042 01:09:16,180 --> 01:09:18,120 JavaScript a tableaux. 1043 01:09:18,120 --> 01:09:20,850 Juste une autre manière de conserver les données autour, très utile. 1044 01:09:20,850 --> 01:09:25,180 Très agréable et facile syntaxe. 1045 01:09:25,180 --> 01:09:29,870 Vous utilisez des crochets pour accéder à tout et tout garder ensemble. 1046 01:09:29,870 --> 01:09:35,020 Rien de trop complexe. 1047 01:09:35,020 --> 01:09:38,630 Le truc cool sur JavaScript et les langages de script en général 1048 01:09:38,630 --> 01:09:40,920 c'est que vous n'avez pas à vous soucier de la taille des tableaux. 1049 01:09:40,920 --> 01:09:43,880 Vous pouvez simplement utiliser array.length et de garder trace de celui-ci, 1050 01:09:43,880 --> 01:09:46,960 et aussi le réseau peut augmenter ou diminuer que vous en avez besoin. 1051 01:09:46,960 --> 01:09:49,279 Donc, vous n'avez même pas besoin de s'inquiéter de toute sorte, 1052 01:09:49,279 --> 01:09:57,050 oh non, j'ai besoin d'allouer plus de choses, ou quelque chose comme ça. 1053 01:09:57,050 --> 01:10:00,090 >> Le truc cool, ici, c'est que JavaScript a quelque chose appelé objets. 1054 01:10:00,090 --> 01:10:04,800 C'est un langage orienté objet, si ce qu'il a est, en substance, 1055 01:10:04,800 --> 01:10:10,100 une façon pour vous de données de groupe ensemble, un peu semblable à une structure, 1056 01:10:10,100 --> 01:10:17,280 mais vous pouvez y accéder comme une structure ou dans une syntaxe de tableau associatif. 1057 01:10:17,280 --> 01:10:22,520 C'est assez simple et ce que vous pouvez faire avec ce sont des données de regrouper 1058 01:10:22,520 --> 01:10:24,810 si vous avez un tas de données qui est lié. 1059 01:10:24,810 --> 01:10:26,850 Parce que c'est tout ce dont vous avez besoin pour décrire une voiture, 1060 01:10:26,850 --> 01:10:29,050 vous n'avez pas besoin de l'avoir dans un tas d'endroits différents. 1061 01:10:29,050 --> 01:10:35,300 Vous pouvez simplement coller dans 1 objet en JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Comme vous le savez probablement, l'itération est une de ces tâches fastidieuses. 1063 01:10:39,090 --> 01:10:43,810 Vous venez de le faire sur un nouveau. Vous avez besoin de parler à tous les objets dans la voiture, 1064 01:10:43,810 --> 01:10:47,340 ou vous avez besoin de passer par chaque élément dans une liste ou quelque chose comme ça. 1065 01:10:47,340 --> 01:10:51,770 Donc JavaScript a, similaire à PHP, une syntaxe foreach. 1066 01:10:51,770 --> 01:10:54,590 Dans ce cas, c'est un pour en boucle. 1067 01:10:54,590 --> 01:10:57,300 Vous voulez utiliser seulement sur des objets. 1068 01:10:57,300 --> 01:11:01,030 Il ya quelques problèmes qui se produisent si vous utilisez ce sur des tableaux. 1069 01:11:01,030 --> 01:11:03,750 Il est généralement une de ces choses, si, c'est très utile, 1070 01:11:03,750 --> 01:11:06,590 parce que vous éliminez beaucoup de frais généraux 1071 01:11:06,590 --> 01:11:10,270 parce que vous n'avez pas à tirer vers le haut tout en votre objet par vous-même. 1072 01:11:10,270 --> 01:11:12,300 Vous n'avez pas à me souvenir de tous les noms de clés. 1073 01:11:12,300 --> 01:11:18,270 Vous venez de sorte de les récupérez dans cette syntaxe. 1074 01:11:18,270 --> 01:11:21,500 En cela, avec pour, vous voulez juste de se rappeler 1075 01:11:21,500 --> 01:11:27,180 que vous reprendre toutes les clés, d'une manière très similaire à la table de hachage. 1076 01:11:27,180 --> 01:11:30,880 Si vous vous souvenez de cela, lorsque vous mettriez dans une chaîne que vous pourriez obtenir quelque chose 1077 01:11:30,880 --> 01:11:33,840 qui aurait une valeur qui lui est associée. 1078 01:11:33,840 --> 01:11:36,360 Ce que vous pouvez faire avec ceci est que vous pouvez dire, tout droit, 1079 01:11:36,360 --> 01:11:42,120 J'ai mis dans une voiture, et je l'ai appelé une Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Ainsi, vous pouvez mettre dans la chaîne Ferrari plus tard, et vous pouvez obtenir cela. 1081 01:11:45,290 --> 01:11:50,000 Et vous pouvez le faire dans une boucle, avec le pour en boucle. 1082 01:11:50,000 --> 01:11:53,320 Il suffit donc de plus sur les objets. L'essentiel de ce que vous devez retenir 1083 01:11:53,320 --> 01:12:00,340 est que vous pouvez utiliser la structure de l'objet comme syntaxe quand vous voulez avec ces derniers, 1084 01:12:00,340 --> 01:12:04,590 sauf si ce que vous allez utiliser comme une chaîne n'est pas un nom de variable valide. 1085 01:12:04,590 --> 01:12:07,650 Donc, si vous regardez ce que là-bas, nous avons la clé avec des espaces. 1086 01:12:07,650 --> 01:12:12,500 Eh bien, si vous deviez mettre object.key, l'espace, avec l'espace, les espaces, 1087 01:12:12,500 --> 01:12:15,320 qui n'aurait tout simplement pas de sens syntaxique. 1088 01:12:15,320 --> 01:12:22,730 Alors que vous pouvez faire avec ce type de syntaxe de support. 1089 01:12:22,730 --> 01:12:26,520 >> En outre, le JavaScript est très portée-sage de PHP. 1090 01:12:26,520 --> 01:12:29,050 Vous avez 2 façons d'aborder la portée. 1091 01:12:29,050 --> 01:12:31,960 Vous ne pouvez pas avoir le var en face d'une variable, 1092 01:12:31,960 --> 01:12:34,060 et cela signifie juste que c'est mondial. 1093 01:12:34,060 --> 01:12:37,050 Vous pouvez le voir à partir de n'importe où. Même si vous deviez mettre cela dans une déclaration si, 1094 01:12:37,050 --> 01:12:42,430 n'importe où ailleurs dans votre code après ce stade, vous pourriez voir que variable. 1095 01:12:42,430 --> 01:12:46,730 Une autre chose, cependant, est le var, c'est limité à quelque fonction que vous êtes po 1096 01:12:46,730 --> 01:12:48,870 Si vous n'êtes pas dans une fonction, ainsi, il est mondial. 1097 01:12:48,870 --> 01:12:53,900 Mais si vous êtes dans une fonction c'est seulement visible dans cette fonction. 1098 01:12:53,900 --> 01:12:56,420 Je n'ai pas d'exemple, mais, oui. C'est une de ces choses où 1099 01:12:56,420 --> 01:12:59,900 vous pouvez gérer les variables que vous voulez être globale, 1100 01:12:59,900 --> 01:13:03,810 les variables que vous voulez être locale, mais vous ne devez faire attention à ce sujet, 1101 01:13:03,810 --> 01:13:06,890 parce que vous n'avez pas le type de contrôle à grain fin que vous faites dans C, 1102 01:13:06,890 --> 01:13:15,820 où si quelque chose est déclarée dans une boucle, il va rester dans cette boucle. 1103 01:13:15,820 --> 01:13:18,790 La chose nous nous soucions réellement de l'aide de JavaScript pour manipule les pages web, non? 1104 01:13:18,790 --> 01:13:21,800 Je veux dire, c'est pourquoi nous faisons cela. 1105 01:13:21,800 --> 01:13:23,840 >> Pour ce faire, nous utilisons ce qu'on appelle le DOM. 1106 01:13:23,840 --> 01:13:25,850 Le modèle objet de document. 1107 01:13:25,850 --> 01:13:29,430 Fondamentalement, ce qu'il fait est qu'il prend tout votre HTML 1108 01:13:29,430 --> 01:13:34,110 et modèles dehors dans un tas d'objets qui sont imbriqués les uns dans les autres. 1109 01:13:34,110 --> 01:13:37,080 Vous commencez avec quelque chose comme ça. 1110 01:13:37,080 --> 01:13:44,770 Vous avez, sur la droite pour moi, un tas de code là-bas que c'est une sorte de - 1111 01:13:44,770 --> 01:13:46,640 On pourrait penser que ce serait très difficile à manipuler, 1112 01:13:46,640 --> 01:13:48,700 parce que vous seriez analysez travers un tas de texte 1113 01:13:48,700 --> 01:13:52,080 et d'avoir à reconstituer part des choses. Et si elle n'a pas été correctement formaté? 1114 01:13:52,080 --> 01:13:54,880 Les mauvaises choses se passeraient. 1115 01:13:54,880 --> 01:13:58,140 Donc, JavaScript prend soin de cela pour vous, et vous obtenez une structure de données bien, 1116 01:13:58,140 --> 01:14:01,390 comme celui sur ma gauche, où vous avez seulement un document, 1117 01:14:01,390 --> 01:14:03,530 et à l'intérieur que vous avez quelque chose appelé HTML, 1118 01:14:03,530 --> 01:14:05,600 et à l'intérieur que vous avez une tête et un corps, 1119 01:14:05,600 --> 01:14:08,420 et à l'intérieur que la tête vous avez un titre, etcetera, etcetera, etcetera. 1120 01:14:08,420 --> 01:14:11,810 Cela simplifie la manipulation d'une page Web de sorte que c'est juste, 1121 01:14:11,810 --> 01:14:14,190 oh, je veux juste parler de cet objet. 1122 01:14:14,190 --> 01:14:21,340 Sorte de façon très similaire, vous souhaitez parler à un autre objet vous vous faites. 1123 01:14:21,340 --> 01:14:25,980 Comme je l'ai dit, tout le DOM est dans l'objet du document. 1124 01:14:25,980 --> 01:14:29,290 Soit c'est juste un endroit et puis vous pouvez aller à l'intérieur pour trouver des choses, 1125 01:14:29,290 --> 01:14:33,880 et vous pouvez le faire - c'est le style ancien de le faire, là-haut, 1126 01:14:33,880 --> 01:14:38,130 où vous faites document.getElementById, puis le nom, 1127 01:14:38,130 --> 01:14:42,420 et comme vous pouvez le dire, cela devient très lourd après un certain temps. 1128 01:14:42,420 --> 01:14:44,480 Donc probablement que vous ne voulez pas le faire. C'est pourquoi nous avons 1129 01:14:44,480 --> 01:14:48,760 la prochaine chose que nous allons parler après cela. 1130 01:14:48,760 --> 01:14:52,510 L'essentiel ici est que, tout droit, vous avez tous ces éléments, non? 1131 01:14:52,510 --> 01:14:56,400 Alors peut-être que je peux changer la couleur de quelque chose de chargement de la page. 1132 01:14:56,400 --> 01:14:58,380 Alors quoi? Que faire si mon utilisateur clique sur quelque chose? 1133 01:14:58,380 --> 01:15:00,540 Je veux faire quelque chose d'intéressant quand ils cliquent quelque chose. 1134 01:15:00,540 --> 01:15:02,600 C'est pourquoi nous avons des événements. 1135 01:15:02,600 --> 01:15:05,330 Vous pouvez, en fait, trouver un élément dans votre DOM, 1136 01:15:05,330 --> 01:15:08,560 puis dire, hey. Lorsque cette charge ou quelqu'un clique dessus, 1137 01:15:08,560 --> 01:15:11,410 ou quand ils souris dessus, faire quelque chose avec elle. 1138 01:15:11,410 --> 01:15:15,330 Et ce que vous avez dit, vous avez des fonctions qui gèrent pour vous. 1139 01:15:15,330 --> 01:15:17,980 Ces fonctions sont des gestionnaires d'événements. 1140 01:15:17,980 --> 01:15:20,440 Qu'est-ce que: ils sont - c'est juste une façon élégante de dire, 1141 01:15:20,440 --> 01:15:23,500 cette fonction n'est exécutée que si cet événement se produit. 1142 01:15:23,500 --> 01:15:28,070 Donc, il gère l'événement qui se produit. 1143 01:15:28,070 --> 01:15:30,810 C'est la façon dont vous souhaitez disposer d'un gestionnaire d'événement. 1144 01:15:30,810 --> 01:15:34,750 J'ai un peu de bouton, et lorsque vous cliquez dessus, il explose. 1145 01:15:34,750 --> 01:15:40,560 Donc, ne cliquez pas sur le bouton. 1146 01:15:40,560 --> 01:15:42,910 C'est une façon d'aborder, non? 1147 01:15:42,910 --> 01:15:46,430 Vous avez une étiquette de bouton, et le clic vous avez une chaîne qui dit, 1148 01:15:46,430 --> 01:15:50,460 oh, en passant, je fais cette chose explosion pour moi. 1149 01:15:50,460 --> 01:15:53,990 Sinon, c'est comme un bouton ordinaire vous venez de faire. 1150 01:15:53,990 --> 01:15:56,550 Vous pouvez également le faire d'une autre manière, 1151 01:15:56,550 --> 01:16:02,770 en saisissant l'élément DOM, mais nous allons économiser qu'après nous parlons de jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Il s'agit d'une bibliothèque qui est cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Vous pouvez l'utiliser dans à peu près tout. 1154 01:16:09,580 --> 01:16:12,090 Et il vous donne juste un tas d'outils pour travailler avec. 1155 01:16:12,090 --> 01:16:15,850 Parce JavaScript, tout puissant, n'a pas tous les outils dont vous avez besoin 1156 01:16:15,850 --> 01:16:20,550 de la boîte de s'attaquer vraiment une application Web, vous voudrez peut-être à faire. 1157 01:16:20,550 --> 01:16:24,650 Donc, il simplifie beaucoup de choses, vous donne beaucoup de fonctions 1158 01:16:24,650 --> 01:16:28,760 hors de la boîte que vous auriez normalement à écrire vous-même, encore et encore et encore. 1159 01:16:28,760 --> 01:16:31,600 Et rend juste les choses très simples. 1160 01:16:31,600 --> 01:16:35,780 Vous avez également sélecteurs, qui vous permettent de prendre tous ces éléments 1161 01:16:35,780 --> 01:16:42,800 à partir de votre DOM beaucoup plus simplement, au lieu d'avoir à utiliser ces appels de fonction très longues. 1162 01:16:42,800 --> 01:16:46,630 Plus d'informations sur ces sélecteurs. Vous avez, là vous avez, disons 1163 01:16:46,630 --> 01:16:49,800 Je veux obtenir un élément avec l'ID "rock". 1164 01:16:49,800 --> 01:16:56,450 Eh bien, dans jQuery, c'est juste de dollars, puis une chaîne qui a une livre, puis "rock". 1165 01:16:56,450 --> 01:17:01,960 C'est très simple et beaucoup plus rapide que la façon traditionnelle de JavaScript s'attaquer à ce problème. 1166 01:17:01,960 --> 01:17:06,120 Et vous avez des choses similaires pour les classes et les types d'éléments. 1167 01:17:06,120 --> 01:17:08,140 jQuery est - l'un des fonctionnalités intéressantes est que vous pouvez sorte de comprimer 1168 01:17:08,140 --> 01:17:14,350 en bas de vos questions sur votre DOM très, très rapide. 1169 01:17:14,350 --> 01:17:18,980 Maintenant, nous sommes de retour à la gestion des événements, et c'est la façon dont vous souhaitez gérer un événement dans jQuery. 1170 01:17:18,980 --> 01:17:23,090 Donc, ce que nous allons ici nous disons, tout droit. J'ai une balise script, non? 1171 01:17:23,090 --> 01:17:25,400 Donc, j'ai cette ligne JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Ce que nous allons faire, c'est que nous allons dire, tout droit. 1173 01:17:27,750 --> 01:17:30,860 Lorsque le document est prêt, ce qui signifie le document a été chargé, 1174 01:17:30,860 --> 01:17:34,660 nous allons aller dans cette fonction, et nous allons dire, tout droit, 1175 01:17:34,660 --> 01:17:37,060 cette fonction est en train de faire autre chose. 1176 01:17:37,060 --> 01:17:42,320 Il s'agit essentiellement de dire, tout droit, me chercher l'élément avec l'ID "myid." 1177 01:17:42,320 --> 01:17:47,960 Et puis donner à ce gestionnaire de fonction qui s'exécute lorsque vous cliquez dessus. 1178 01:17:47,960 --> 01:17:49,820 Fondamentalement, ce que cela fait est, dit-il, tout droit. 1179 01:17:49,820 --> 01:17:52,630 La page est chargée, donc je vais dans, trouver cet élément, 1180 01:17:52,630 --> 01:17:56,420 lui donner ce gestionnaire d'événements, et il définit fondamentalement votre page pour vous. 1181 01:17:56,420 --> 01:18:00,520 Et c'est ainsi que vous voulez penser à la gestion des événements. 1182 01:18:00,520 --> 01:18:06,310 Vous voulez juste à penser, tout droit, quand quelque chose se produit, ce que je veux arriver? 1183 01:18:06,310 --> 01:18:10,520 Vous ne voulez pas y penser, d'accord, j'ai besoin de s'assurer que les pourparlers de cette chose à cette chose, 1184 01:18:10,520 --> 01:18:14,660 cette chose bla bla bla, parce que vous voulez juste parler chose en termes d'événements. 1185 01:18:14,660 --> 01:18:17,650 Lorsque cela se produit, cela se produit. Lorsque cela arrive, cela arrive. 1186 01:18:17,650 --> 01:18:20,240 Et si les choses déclenchent d'autres choses, c'est très bien. 1187 01:18:20,240 --> 01:18:22,150 Mais vous ne voulez pas essayer de faire du code compliqué 1188 01:18:22,150 --> 01:18:24,130 où vous déclencher plusieurs choses en même temps, 1189 01:18:24,130 --> 01:18:28,860 parce que vous allez juste pour vous donner un mal de tête. 1190 01:18:28,860 --> 01:18:32,340 >> Tous droite. Maintenant, nous pouvons obtenir notre page de gestion des événements, 1191 01:18:32,340 --> 01:18:35,640 mais disons que mon utilisateur clique sur un bouton. 1192 01:18:35,640 --> 01:18:38,040 Que faire si je veux envoyer cette demande au serveur, 1193 01:18:38,040 --> 01:18:41,100 mais je ne veux pas de recharger la page, car avoir à recharger une nouvelle page 1194 01:18:41,100 --> 01:18:44,390 chaque fois que se genre de fastidieux, et pourquoi ai-je besoin 1195 01:18:44,390 --> 01:18:47,430 à tirer vers le bas la tête à nouveau, et le pied de page à nouveau, 1196 01:18:47,430 --> 01:18:49,670 et tous les éléments de la page à nouveau 1197 01:18:49,670 --> 01:18:53,180 juste pour rafraîchir la salutation ou le temps? 1198 01:18:53,180 --> 01:18:55,290 Donc, c'est pourquoi nous avons quelque chose comme Ajax. 1199 01:18:55,290 --> 01:18:59,150 Ce que nous pouvons faire ici avec l'Ajax, c'est que nous pouvons dire, d'accord, 1200 01:18:59,150 --> 01:19:01,290 Je veux envoyer des données au serveur, 1201 01:19:01,290 --> 01:19:04,010 et je veux obtenir une réponse afin que je puisse mettre à jour ma page, 1202 01:19:04,010 --> 01:19:12,120 ou peut-être juste faire un peu de calcul algorithmique qui ne montre pas nécessairement quelque chose à l'utilisateur. 1203 01:19:12,120 --> 01:19:15,500 Que devez-vous faire cela? Eh bien, vous avez besoin d'une URL que vous avez besoin de parler. 1204 01:19:15,500 --> 01:19:18,650 Votre serveur ne peut pas juste écouter magie de nulle part. 1205 01:19:18,650 --> 01:19:21,960 Vous avez besoin d'un endroit spécifique que vous envoyez ces données. 1206 01:19:21,960 --> 01:19:26,240 Et vous avez aussi besoin de certaines données à envoyer, ou c'est peut-être une requête sans données. 1207 01:19:26,240 --> 01:19:31,380 Vous voulez juste faire un ping vers le serveur et dire, bon, je suis en vie, ou quelque chose comme ça. 1208 01:19:31,380 --> 01:19:35,150 Et puis, vous voulez une fonction qui gère essentiellement avec succès. 1209 01:19:35,150 --> 01:19:38,250 Disons que vous obtenez en retour des informations sur votre serveur, 1210 01:19:38,250 --> 01:19:42,960 et vous voulez changer le titre de l'utilisateur sur sa page. 1211 01:19:42,960 --> 01:19:44,930 Ainsi, vous obtiendrez les informations de retour, 1212 01:19:44,930 --> 01:19:48,860 et vous pousser que de l'écran. 1213 01:19:48,860 --> 01:19:51,170 Qu'est-ce qui se passe, c'est que lorsque la page est prête, 1214 01:19:51,170 --> 01:19:56,500 vous créez une sur la fonction de clic pour ce bouton appelé greeter. 1215 01:19:56,500 --> 01:19:58,810 Que cela ne puis est, lorsque ce bouton est enfoncé, 1216 01:19:58,810 --> 01:20:03,700 vous parlez à greetings.php, vous faites une requête POST, 1217 01:20:03,700 --> 01:20:07,290 et vous dites, hé, obtenez-moi quelque chose à partir de votre page. 1218 01:20:07,290 --> 01:20:09,890 Nous n'avons pas vraiment besoin de décrire, mais greetings.php, 1219 01:20:09,890 --> 01:20:12,480 disons simplement que, redonne "Bonjour tout le monde." 1220 01:20:12,480 --> 01:20:15,650 Donc, nous revenons ce «monde bonjour», et sur le succès de cette, 1221 01:20:15,650 --> 01:20:20,730 en supposant que tout se passe bien, alors que nous venons de passer à cet endroit cible 1222 01:20:20,730 --> 01:20:25,720 que nous avons précisé et nous tenons simplement la réponse là-dedans. 1223 01:20:25,720 --> 01:20:31,560 Et c'est un moyen très simple de mettre en place une requête Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Très vite, Rob sorte de mentionné déjà, 1225 01:20:34,340 --> 01:20:37,170 les choses peuvent aller mal, les mauvaises choses peuvent se produire, 1226 01:20:37,170 --> 01:20:42,660 si vous voulez vous familiariser avec ces codes de réponse HTTP. 1227 01:20:42,660 --> 01:20:46,030 Qu'est-ce que ce sont sont juste, comme, 200, tout s'est bien passé. 1228 01:20:46,030 --> 01:20:48,670 Quelque chose d'autre, de mauvaises choses se sont passées. 1229 01:20:48,670 --> 01:20:50,790 Il est généralement la chose que vous voulez vous rappeler. 1230 01:20:50,790 --> 01:20:53,440 Mais il est bon de savoir tout cela. 1231 01:20:53,440 --> 01:20:55,970 Et enfin, une fois que nous avons traversé tout cela, 1232 01:20:55,970 --> 01:20:58,680 nous avons besoin de parler très rapidement sur la conception, 1233 01:20:58,680 --> 01:21:00,620 et alors nous pouvons vous permettre de tout quitter. 1234 01:21:00,620 --> 01:21:03,410 Conception. Choses que vous voulez vous rappeler. 1235 01:21:03,410 --> 01:21:06,950 Posez-vous ces questions: Qui emploiera ceci? 1236 01:21:06,950 --> 01:21:09,580 Que vont-ils l'utiliser pour? Qu'est-ce que mes utilisateurs se soucient? 1237 01:21:09,580 --> 01:21:11,750 Qu'est-ce qu'ils se soucient pas? 1238 01:21:11,750 --> 01:21:14,500 Vous ne voulez pas de faire une application et laisser pousser juste 1239 01:21:14,500 --> 01:21:18,270 et devenir ce géant, dévorante chose que vous ne pouvez même pas terminer. 1240 01:21:18,270 --> 01:21:23,900 Vous voulez avoir des objectifs distincts et des plans et des choses que vous souhaitez aborder. 1241 01:21:23,900 --> 01:21:29,000 Assurez-il facile. Tout cela dit, fondamentalement, 1242 01:21:29,000 --> 01:21:34,950 rendre facile pour l'utilisateur de l'utiliser, ne pas en faire un blob géant de texte comme cette diapositive est, en fait. 1243 01:21:34,950 --> 01:21:38,020 Vous voulez juste que ce soit quelque chose où il est très facile pour quelqu'un d'aller dans 1244 01:21:38,020 --> 01:21:40,800 et font ce qu'ils veulent faire. 1245 01:21:40,800 --> 01:21:42,920 Vous ne voulez pas qu'ils aient à parcourir 5 pages 1246 01:21:42,920 --> 01:21:45,460 pour accéder à votre fonction principale de votre site. 1247 01:21:45,460 --> 01:21:49,290 Si Google avait 5 pages avant que vous pourriez même chercher quelque chose, 1248 01:21:49,290 --> 01:21:53,080 personne ne l'utiliser. 1249 01:21:53,080 --> 01:21:55,890 Et enfin, prototype de papier, groupe de discussion. 1250 01:21:55,890 --> 01:21:59,220 Avoir une bonne conception et les pratiques de dépistage. 1251 01:21:59,220 --> 01:22:00,730 Juste parce que vous pensez que cela fonctionne pour vous, 1252 01:22:00,730 --> 01:22:04,860 ne signifie pas que quiconque pense cela fonctionne. 1253 01:22:04,860 --> 01:22:14,490 Mais oui, c'est ça. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]