[Test: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Université de Harvard] [C'est CS50.] [CS50.TV] [Lucas Freitas] Bienvenue à tous. C'est l'examen de test 1. Tout comme un avertissement, cela est - je veux dire, nous allons essayer de couvrir autant de matériel que possible, mais cela ne signifie pas que nous allons couvrir toutes les choses qui peuvent être en jeu-questionnaire 1. Assurez-vous donc que vous prenez aussi un oeil à la conférence, les articles, tout ce que vous pouvez. Quiz 1 va être le mercredi, mercredi prochain. Veillez donc à étudier. Il va être, à peu près, comme le premier test en ce qui concerne sa forme, mais il va probablement être beaucoup plus difficile. Au moins, l'année dernière, lorsque j'ai pris 50 ans, je pensais que c'était beaucoup plus difficile. Donc beaucoup étudier. Je vais couvrir les structures de données et le codage de Huffman. C'est quelque chose que beaucoup de gens pensent est complexe, mais je vais essayer de le rendre aussi facile que possible. Tout d'abord, ce que nous voulons vous les gars de savoir questionnaire 1 est de comprendre les descriptions conceptuelles de chacune des structures de données que je vais présenter. Cela signifie que vous n'avez pas réellement mettre en œuvre une table de hachage dans votre quiz 1. Nous ne voulons pas d'implémenter toute une table de hachage, peut-être nous essaierons pour vous faire mettre en œuvre certaines fonctions, opérations les plus courantes, mais nous n'allons pas vous faire mettre en œuvre tout. Il est donc important que vous compreniez le concept derrière chaque structure de données et aussi que vous êtes capable de coder en C, seulement les opérations les plus communes qu'ils ont pour chaque structure de données. Et aussi être en mesure d'examiner les pointeurs et les structures, car ils apparaissent beaucoup dans ces structures de données. Abord, listes liées. Les listes chaînées sont en fait très similaires aux tableaux, mais la différence entre une liste chaînée et d'un tableau, tout d'abord, que est une liste liée a une taille très flexible, tandis que dans les tableaux que vous avez à choisir soit une très grande taille pour le réseau, si vous savez que vous allez être en mesure de stocker toutes vos données dans ce tableau, ou vous devez utiliser malloc pour avoir une longueur flexible de tableau. Dans les listes chaînées, il est très facile d'obtenir simplement plus d'éléments, mettre plusieurs éléments dans la liste chaînée ou supprimer des éléments. Et en fait, si vous ne voulez pas la liste liée à trier, vous pouvez rechercher et supprimer des éléments en temps constant, si O (1) temps, il est donc très pratique. Vous avez juste à faire attention à ne pas oublier de malloc et free nœuds, simplement parce que si vous ne le faites pas, vous aurez des fuites de mémoire. Alors listes liées - la définition d'un noeud est juste comme ce que nous avons là. Je mets int n, mais vous pouvez stocker les données que vous souhaitez. Donc, si vous souhaitez stocker une chaîne, c'est bien. Si vous souhaitez stocker une structure, c'est bien, un double, ce que vous voulez. Je viens de mettre int n pour les exemples ici. Et vous avez un pointeur vers le nœud suivant. Donc, en gros, une liste liée a des données, et il pointe vers le nœud suivant. Si c'est le dernier élément de la liste chaînée, il va pointer vers NULL. Il s'agit donc d'un exemple d'une liste chaînée. 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. Tout d'abord, une fonction insert sera de type void parce que je ne veux pas retourner tout. Et je vais prendre un int comme argument, parce que je veux savoir ce que je veux insérer. Alors, quelle est la première chose que je dois faire? Eh bien, je dois malloc sur newnode, de sorte que c'est la première ligne. Je suis juste la création d'un nouveau nœud à mettre dans une liste chaînée. Alors, que puis-je faire? Eh bien, nous savons que dans nos implémentations de listes chaînées en classe, nous avons toujours mis la tête comme une variable globale. Donc, ce que nous pouvons faire est de changer la tête. Je peux faire ce nouveau nœud être le nouveau chef, et il va pointer vers l'ancien chef. Comment pouvons-nous faire? La première chose que j'ai à faire est de changer le 'n' dans le nouveau nœud à la valeur, qui a été transmis à la fonction. Puis newnode est la prochaine va être la tête. La tête va être newNode. Il est donc assez simple. Pour supprimer un nœud, nous pouvons le faire comme - Une façon de le faire c'est-à-dire, ok, si je voulais supprimer, par exemple, 3, ce que je pouvais faire, c'est juste pointer le noeud précédent au noeud suivant de trois. Donc, je voudrais juste faire quelque chose comme ça. Mais quel est le problème avec cela? J'ai une fuite de mémoire, donc je n'ai plus accès au numéro 3. Le problème, c'est que je ne vais pas être en mesure de libérer ce nœud. Je vais avoir une fuite de mémoire et (inintelligible) va me haïr. Ainsi, au lieu de le faire, je devrais probablement avoir un pointeur temporaire. Alors, j'ai mis température. Il va pointer vers le nœud que je veux supprimer. Et puis je peux déplacer les nœuds précédents à point à un autre noeud du nœud que je veux supprimer. Et enfin, je peux libérer le pointeur. Dois-je libérer le pointeur que j'ai créé là? Je n'ai pas à, juste parce que - la différence est que ce nœud a été créée en utilisant malloc, il est donc dans le tas, tandis que celui-ci a été déclaré juste comme un commutateur NULL dans la pile. Donc, je n'ai pas à le libérer. Okay. Donc, maintenant nous allons parler de piles. Piles sont assez simples. Nous avons fait des piles et des files d'attente dans la classe juste en utilisant des tableaux, mais vous devriez être familier - juste être conscient que vous pouvez également faire des piles dans les files d'attente à l'aide de listes chaînées ainsi. Donc, si vous avez un tableau, ce serait une pile? Une pile, en premier lieu, devra avoir une taille. Vous devez stocker ce qui est de la taille de la pile que vous avez en ce moment. Et aussi, vous auriez un tableau, dans ce cas des numéros, mais si vous voulez, il peut être un tableau de chaînes, un tableau de struct, tout ce que vous voulez stocker. A propos de la pile: La différence entre une pile et une liste chaînée est que dans la pile, vous avez seulement accès au dernier élément qui a été mis dans la pile. C'est ce qu'on appelle dernier entré, premier sorti. Tout comme vous avez une pile de plateaux, si vous mettez un plateau sur le dessus de la pile, vous devez supprimer ce premier plateau à avoir accès aux autres plateaux. C'est la même chose avec des piles. Donc, si je veux, par exemple, ajouter un élément à une pile, que dois-je faire? C'est ce qu'on appelle poussée, et c'est assez simple. La première chose que vous avez à faire est de vérifier si la taille de la pile n'est pas supérieure ou égale à la capacité de la pile. Parce que si vous êtes déjà en pleine capacité, vous ne pouvez pas ajouter quoi que ce soit d'autre. Et puis sinon, il vous suffit d'ajouter l'élément à la pile. Et enfin, augmenter la taille. Il est donc assez simple. Donc, je viens d'ajouter le chiffre 2. Et si je veux pop, ce qui signifie que je veux supprimer le dernier élément qui a été ajouté et le retour de la valeur de l'élément, la première chose que je dois faire est de vérifier que la pile n'est pas vide. Parce que si elle est vide, je ne peux pas retourner quoi que ce soit. Dans ce cas, je suis de retour -1. Sinon, je vais diminuer la taille de la spécification, et revenir numéros (s.size). Pourquoi ai-je diminuer la taille puis retourne s.size? C'est parce que, dans ce cas, la spécification est de taille 4, et je veux revenir le quatrième élément, non? Mais ce qui est l'indice du quatrième élément? Trois. Comme je ne taille - va être 3, je ne peux revenir s.numbers (s.size) parce que c'est 3. Donc, c'est juste l'indice. Maintenant files d'attente. Les files d'attente sont à peu près la même chose. La seule différence est que, au lieu d'avoir dernier entré, premier sorti, vous devez d'abord entré, premier sorti. Probablement, si vous êtes en attente d'aller à un concert, vous ne seriez pas heureux si vous aviez une pile à la place d'une file d'attente. Étant la dernière personne à venir serait la première personne à entrer dans le concert. Vous n'auriez probablement pas être heureux. Dans la file d'attente, la première personne à entrer en est également la première personne à sortir. Ainsi, dans la définition d'une file d'attente, en plus d'avoir la taille de la matrice, vous devez aussi avoir la tête, ce qui est l'indice à la tête de la pile. Ainsi, le premier élément à l'heure actuelle. Enqueue est la même chose que pour les piles bouton. Si vous avez été très naïf, vous venez de dire, bien, je ne peux faire exactement la même chose que j'ai fait pour pousser. Je peux juste vérifier si elle n'est pas au-delà de la capacité. Si c'est le cas, je reviens faux, sinon je ne peux exporter la nouvelle valeur puis augmenter la taille. Mais pourquoi est-ce mal? Voyons cet exemple. J'essaie de enqueue un tas de trucs, et puis je vais dequeue et en file d'attente. Il ya beaucoup de commandes, mais c'est très simple. Je vais en file d'attente 5, il faut donc ajouter 5, puis 7, 1, 4, 6, et puis je veux dequeue quelque chose, ce qui signifie que je vais enlever le premier élément. Donc, je vais supprimer le numéro 3, non? Le premier élément. Très bien. Maintenant, si j'essaie d'en file d'attente d'autre chose, ce qui va se passer? Selon ma mise en œuvre, J'allais mettre le numéro suivant dans la q.size d'index. Dans ce cas, la taille est de 8, si l'indice 8 sera ici en dernière position. Si j'essaie d'en file d'attente 1 ici, je serais d'écraser la dernière position pour le numéro 1, ce qui est complètement faux. Ce que je veux faire est de s'enrouler autour et aller à la première position. Peut-être que vous voulez juste dire, eh bien, je viens de vérifier si je peux effectivement mettre quelque chose là-bas. Sinon, je viens de dire, oh, la nouvelle capacité totale est en fait la capacité - 1, et vous ne pouvez pas mettre un élément là. Mais quel est le problème? Le problème est que si je DEQUEUE tout ici et puis j'essaie d'ajouter quelque chose d'autre, il serait tout simplement dire, bien, vous étiez à pleine capacité, ce qui est 0. Donc, votre file d'attente est parti. Vous devez enrouler autour, et une façon d'envelopper autour que vous les gars apprises dans psets visionnaires et autres utilisait mod. Vous pouvez l'essayer à la maison pour comprendre pourquoi vous feriez q.size + q.head capacité mod, mais si vous vérifiez ici, nous pouvons voir que cela fonctionne. Ainsi, dans le dernier exemple, q.size était 8 et la tête était de 1, parce que c'était cette position ici du tableau. Ainsi, il sera 8 + 1, 9. Capacité Mod 9 serait 0. Il irait à l'indice 0. Nous serons dans la bonne position. Et puis essayer de la file d'attente à la maison. Quelques points importants: essayer de comprendre la différence entre une pile et une file d'attente. A la maison, essayez d'obtenir très familier avec la mise en œuvre enqueue, dequeue, poussée et pop. Et aussi comprendre lorsque vous souhaitez utiliser chacun d'entre eux. Donc, nous allons vous détendre pendant 10 secondes avec un tas de Pokémons. Et maintenant, revenons à des structures de données. Hash tables. Beaucoup de gens avaient peur de tables de hachage. dans le problème de la série 6, le vérificateur d'orthographe. Des tables et des essais de hachage, beaucoup de gens ont peur d'eux. Ils pensent qu'ils sont si difficile à comprendre. Ouais? [Rob Bowden] Problème réglé 5. Problème réglé 5, ouais. Merci Rob. Ouais. Six était Huff n 'Puff, ouais. Problème posé 5 a été correcteur orthographique, et vous avez eu à utiliser une table de hachage ou un essai. Beaucoup de gens pensaient qu'ils étaient super difficile à comprendre, mais ils sont en fait assez simple. Qu'est-ce qu'une table de hachage, fondamentalement? Une table de hachage est un tableau de listes chaînées. La seule différence entre une matrice et une table de hachage est que, dans la table de hachage vous avez quelque chose qui s'appelle une fonction de hachage. Qu'est-ce qu'une fonction de hachage? Je ne sais pas si vous pouvez lire ici. Ceci est un exemple d'une table de hachage. Donc vous pouvez voir que vous avez un tableau avec 31 éléments. Et ce que nous faisons dans une table de hachage est doté d'une fonction de hachage qui va traduire une clé, chaque int à un indice. Si, par exemple, si je veux choisir pour B. Harrison, Je mettrais B. Harrison dans mes fonctions de hachage, et la fonction de hachage reviendrait 24. Donc, je sais que je veux stocker B. Harrison en 24. Voilà donc la différence entre avoir juste un tableau et ayant une table de hachage. Dans la table de hachage, vous avez une fonction qui va vous dire où stocker les données que vous souhaitez stocker. Pour la fonction de hachage, vous voulez chercher une fonction de hachage c'est déterministe et bien réparties. Comme vous pouvez le voir ici, vous voyez que beaucoup de données que je voulais magasin était en fait 19 au lieu d'utiliser 31 et 30 et 29, qui étaient tous gratuits. Ainsi, la fonction de hachage que j'ai utilisé n'était pas très bien distribué. Quand nous disons bien distribué, cela signifie que nous voulons avoir, plus ou moins, au moins 1 ou 2 pour chacun de la - analogue, une différence de 1 ou 2, pour chacun des indices dans les tableaux. Vous voulez avoir, à peu près, le même nombre d'éléments dans chaque liste liée dans le tableau. Et il est facile de vérifier si elle est valide dans la table de hachage, voir que des tables de hachage. Ensuite, les arbres >>. Il s'agit d'un arbre. Arbres en informatique sont à l'envers pour une raison quelconque. Donc, ici, vous avez la racine de l'arbre et les feuilles. Vous devez juste savoir la nomenclature pour les parents et l'enfant. Chaque noeud dispose de ses enfants, qui sont les noeuds qui sont en dessous de la mère. Ainsi, par exemple, 2 va être le parent de 3 et pour l'autre enfant là, tandis que 3 va être le parent pour 1 et les autres enfants qui sont là. Et 1 va être l'enfant de 3, et ainsi de suite. Nous avons quelque chose de beaucoup plus intéressant, appelé un arbre binaire de recherche, dans laquelle toutes les valeurs relatives au droit d'un nœud vont être sur la droite, juste ici - sur la droite, vont être plus grand que l'élément dans la racine. Donc, si j'ai le numéro 5 ici, tous les éléments sur le droit vont être supérieur à 5, et sur la gauche tous les éléments vont être inférieur à 5. Pourquoi est-ce utile? Eh bien, si je veux vérifier si le nombre 7 est ici, par exemple, Je viens d'aller à 5 première et je vais voir, c'est 7 plus ou moins de 5? C'est plus, donc je sais que ça va devoir être sur la droite de l'arbre. J'ai donc beaucoup moins de choses à regarder. Dans la mise en œuvre d'un arbre binaire de recherche, le noeud, je vais juste avoir des données, si int n; vous pourriez aussi avoir une chaîne ou tout ce que vous vouliez. Vous avez juste à être prudent sur la définition de ce qui est grand, ce qui est moins. Donc, si vous aviez des chaînes, par exemple, vous pouvez définir que toutes ces choses sur le droit vont avoir plus grande longueur, la gauche vont avoir des longueurs inférieures, il est vraiment à vous. Comment puis-je mettre en œuvre pour trouver BST? La première chose que nous avons à faire est de vérifier si la racine est NULL. Si c'est NULL, cela signifie que la chose n'est pas là parce que vous n'avez même pas un arbre, pas vrai? Je reviens donc faux. Sinon, je vais vérifier si le nombre est supérieur que la valeur de la racine. Je vais essayer de trouver l'élément sur la droite de l'arbre. Vous voyez que je suis en utilisant la récursivité ici. Et puis, si c'est moins, je vais regarder à gauche. Et enfin, sinon, si ce n'est pas moins ou pas plus, cela signifie que c'est la valeur elle-même. Donc, je reviens juste vrai. Vous pouvez voir ici que j'ai utilisé si, si, si. Et rappelez-vous, dans quizz 0, nous avons eu un problème qui avait si, si, si, et vous étiez censé trouver l'inefficacité, et l'inefficacité, c'est que si vous avez utilisé. Vous devriez avoir utilisé if, else if, else si, et autre. Alors, dois-je utiliser autre if et else if et else ici? Est-ce que n'importe qui - oui? [Parlant de l'élève, inaudible] C'est parfait. Alors, elle dit que ce n'est pas grave, juste parce que l'inefficacité que nous avions avant était-ce parce que, peut-être si une condition est satisfaite, si vous avez effectué une action, mais vous aller vérifier toutes les autres conditions. Mais dans ce cas, il est revenu tout de suite, de sorte qu'il n'a pas d'importance. Donc, vous n'avez pas à utiliser d'autre si. Et enfin, nous allons parler de tentatives, qui est le favori de tous. Un essai est un arbre de tableaux. Il est très rapide pour rechercher des valeurs, mais il utilise beaucoup de mémoire. Et c'est généralement pour filtrer mots, donc quand vous vouloir mettre en œuvre, par exemple, je ne sais pas, comme un annuaire téléphonique dans votre téléphone et vous voulez être en mesure de type B et juste avoir des noms de personnes qui ont B. Il est très facile à mettre en œuvre que l'aide d'un essai, par exemple. Comment définissez-vous un noeud dans un essai? Vous venez d'avoir un booléen qui va être is_word. Cela représente que l'utilisation de tous les caractères avant ce nœud, vous étiez en mesure de former un mot, et alors vous aurez un tableau de pointeurs vers des noeuds. Pouvez-vous voir que nous avons un ensemble de nœuds parents, afin noeud * tableau? Ouais? Voyons comment cela va fonctionner. Pour la vérification de l'orthographe, nous avons un tableau de 27 éléments, parce que nous avons toutes les lettres ainsi que l'apostrophe. Avant ici, je vais juste utiliser 2 parce que je veux être en mesure d'écrire sur la carte. Très bien. C'est donc un exemple d'un essai. Si je viens de définir le premier noeud, je vais avoir un tableau de 2 éléments qui sont deux pointeurs NULL, alors j'ai mis 'a' et 'b'. Et je vais avoir un booléen qui dit is_word. Ça va être faux pour le premier, juste parce que, avant que vous n'avez pas tous les caractères. Ainsi, un mot vide n'est pas un mot. Il est donc faux. Si je veux ajouter 'a' à ce dictionnaire, qu'est-ce que je dois faire? Je voudrais juste avoir à malloc un nouveau nœud pour 'a', puis ajouter son mot à vrai. Donc, il représente juste qu'après avoir 'a' va être vrai. Donner un sens? Alors, si je veux ajouter 'ba', je vais devoir malloc 1 pour 'b', et puis je vais mettre en place le booléen false, car «b» en lui-même n'est pas un mot. Ensuite, je vais à malloc un autre pour 'a', donc 'ba', et puis je vais mettre en place c'est un mot de vrai. Parce que «ba» est un mot. Et puis, si je veux voir si 'b' est dans ce dictionnaire, Je peux aller à la première, 'b'. Je descends, et je regarde est le mot, et il dit faux. Donc ce n'est pas un mot. Si je veux vérifier 'ba', Je vais à la première, «b», puis aller à 'a', et je vois vrai, si c'est un mot. Donner un sens? Beaucoup de gens se confondre par essais. Non? Enfin, le codage de Huffman. Codage de Huffman est très utile pour économiser de la mémoire et de compresser des fichiers texte, juste parce qu'un grand nombre de fois que vous utilisez «a» et «e», par exemple, dans vos documents, mais je ne sais pas si vous utiliser 'q' ou 'z' autant. Ayant tout juste 1 octet pour chaque caractère, chaque unique - les 256 caractères que nous avons dans la table ASCII n'est pas très optimale, juste parce qu'il ya des caractères que vous utilisez beaucoup plus, de sorte que vous devriez probablement utiliser moins de mémoire pour ceux. Comment puis-je utiliser codage de Huffman? Nous devons faire un arbre de Huffman.  Un arbre de Huffman a des nœuds qui ont un symbole qui va être comme, 'a', 'b', 'c', la lettre, la lettre que vous avez, une fréquence qui est la fréquence que le mot apparaît dans le texte, que vous créez l'arbre de Huffman pour, puis un noeud qui va pointer vers la gauche de l'arbre de Huffman et un autre noeud qui va pointer vers la droite. Ainsi, tout comme un arbre. Comment voulez-vous construire un arbre de Huffman? Vous allez choisir les deux nœuds qui ont les fréquences les plus basses. Si vous avez un lien que vous allez choisir les 2 nœuds qui ont les valeurs les plus faibles ASCII ainsi. Ensuite, vous allez créer une nouvelle arborescence de ces 2 nœuds qui va avoir la fréquence combinée dans le nœud parent. Et puis vous allez supprimer les 2 enfants de la forêt et les remplacer par le parent. Et vous allez répéter jusqu'à ce que vous avez seulement 1 arbre dans la forêt. Donc, nous allons voir comment vous feriez un arbre de Huffman pour ZAMYLA. Vous pouvez voir ici que toutes les lettres ont une fréquence 1, sauf pour les «A»; qui a la fréquence 2. 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. Donc, si je veux créer le premier arbre, ce sera avec «L» et «M». Alors c'est ici. La fréquence de la paire sera 2 parce que c'est 1 + 1, alors le prochain 2 avec les fréquences les plus basses sont «Y» et «Z». Et puis j'ai tout d'eux étant - ont une fréquence de 2. Donc, ceux qui sont celles qui ont la plus faible valeur ASCII pour le prochain? «A» et «L». Je crée donc le nouveau nœud, et enfin, il est 4 et 2, de sorte que 2 va être sur la gauche. Et c'est l'arbre de Huffman. Alors, si je veux écrire un texte, comme en binaire à convertir en texte, en utilisant l'arbre de Huffman est très facile. 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, Qu'est-ce que cela va représenter? Donc, comme 1, 1, si droite, droite, puis 0, donc gauche serait L, puis 1, 0, 0. Donc, 1, 0, de sorte que seulement 1, 0, 'A'. Et puis 0, 1, donc 'Z'. Et puis 1, 0, 0 - pas. 0, 0 sera «Y», si paresseux. Donc, c'est tout pour moi, Rob va prendre le relais. [Rob Bowden] Ainsi, la semaine 7 trucs. Nous avons beaucoup d'aller plus très vite. Opérateurs sur les bits, débordement de tampon, bibliothèque CS50, puis HTML, HTTP, CSS. Tout comme en 15 à 20 minutes. Opérateurs sur les bits. Il ya 6 d'entre eux que vous devez savoir. Bit à bit et, au niveau du bit ou, XOR, décalage à gauche, décalage vers la droite, et non. Décalage à droite et non vous avez à peine vu dans la leçon à tous. Nous allons passer en revue rapidement ici, mais il est bon de savoir que ce sont les 6 qui existent. Rappelez-vous que les opérateurs binaires sont comme quand vous faites 3 + 4. Vous n'êtes pas affaire avec le binaire de 3 et 4. Avec les opérateurs binaires vous êtes réellement affaire avec les différents bits des numéros 3 et 4. Donc le premier que nous disons, c'est au niveau du bit pas, et tout ce qu'il fait est d'appuyer tous les bits. Donc ici, si vous écrivez cela en C, vous ne seriez pas écrire comme ~ 11011 ou autre, vous l'écrire comme ~ 4, et alors il serait retourner la représentation binaire de 4. Donc, ici, ~ certains nombre binaire 1101101 va retourner exactement tous des 1 à 0 et tous les 0 à 1 de. Comme je le dis là, l'utilisation fréquente de ce fait, et nous allons le voir un peu, c'est comme on veut arriver à un certain nombre où tous les bits sont à 1, à l'exception de l'un d'eux. Ainsi, il est généralement plus facile d'exprimer le nombre où juste que seul bit est défini, et puis prendre le ~ de celui-ci, de sorte que chaque autre bit est mis à l'exception de celui-là. C'est ce que nous allons utiliser plus un peu. Au niveau du bit ou. Voici deux nombres binaires, et ces deux chiffres sont assez représentatifs, car ils représentent tous les possibles combinaison de bits vous pourriez avoir besoin pour opérer. Ici, quand je séparées par OR chaque bit, nous allons juste de comparer directement vers le bas. Donc, sur le côté gauche nous avons un 1 et un 1. Quand je BitWise | ceux, que vais-je obtenir? Une. Ensuite, au niveau du bit | 0 et 1 va me donner? Une. Bit à bit 1 et 0 va être la même chose, un. Au niveau du bit 0 | 0 va me donner 0. Donc, le seul cas où je reçois 0 est dans le 0 | 0 cas. Et vous pouvez penser que, tout comme vos ors logiques. Donc, si vous pensez à une véritable et 0 comme fausse, la même chose s'applique ici. Alors vrai ou vrai, c'est vrai, vrai ou faux est vrai. Faux ou vrai, c'est vrai, faux ou faux est la seule chose qui est en fait fausse. Voici l'exemple que vous devez savoir comme un bon exemple de cas où les opérateurs de bits sont utilisés. Ici, si nous ou au capital 'A' avec Ox20, et nous allons voir ceux-ci dans une seconde, nous obtenons quelque chose. Et si nous ou minuscules «a» avec Ox20, nous obtenons quelque chose. Donc, nous allons tirer vers le haut la table ASCII. Très bien. Nous voyons ici que «A» est - ici nous avons 'A' est décimal 65. Mais je vais aller avec hexadécimal, qui est Ox41. Sûr que nous avons vu en classe. Je pense que nous l'avons vu en classe qu'il est assez facile de convertir en hexadécimal en binaire. Donc ici, si je veux mettre 4 en binaire, qui va juste être 0100. C'est de 1 place, la place de la 2, la place de 4, si ce n'est 4. Ensuite, je peux diviser 1 en binaire, qui va être 0001. Et si cela va être la représentation de «A» en binaire. Prenant minuscule «a», il est maintenant va être Ox61, où, diviser cela en compte dans son binaire, donc un 6 - Disons effectivement le faire - n'est-il pas la gomme? Eraser. Ox61. Donc, le fractionnement 6 en binaire va être 0 + 4 + 2 + 0. Et la division 1 sera 0001. En regardant la différence entre ces deux, nous voyons que la seule différence entre une minuscule et un 'A' est ce seul bit. Pour en revenir à ici - bien. Pour en revenir à ici, si nous regardons ce que le bit est Ox20, aussi séparer Ox20 à son binaire, est 0010, 0000. Ox20, le seul bit mis ce peu que nous sommes préoccupés par, avec commutation entre le capital et les minuscules 'a'. Si je ou «A», qui est celui-ci, «A», si je ou 'A' avec Ox20, que vais-je obtenir? [Étudiants, inaudible] minuscules 'a', parce que ça va faire basculer ce bit à 1. Et si je ou «un» avec Ox20, que vais-je obtenir? Minuscules un, parce que juste oring 'a' avec Ox20, Je vais être oring ce seul bit à un 1, c'est déjà un 1, il n'a pas d'importance. Nous obtenons donc 'a' et 'a'. Au niveau du bit et. Encore une fois, nous pouvons penser à ce que notre contrepartie logique et. Sur le côté gauche, nous avons vrai et vrai. Ça va être vrai, et pour tous les cas, faux et vrai ou vrai et faux, ou faux et faux, aucune de ces choses sont vraies. Donc, ce que nous finissons est de 1000. Alors maintenant, ici, ici c'est là que je l'ai utilisé le bit fidèle pas, où nous avons eu Ox20. C'est donc Ox20. Maintenant, ce que je veux faire, au niveau du bit ~ de Ox20. Cela va retourner tous les bits. J'ai donc 1101, 1111. Et si 'A' AND avec ~ Ox20 va me donner quoi? Le seul petit, nous devons vraiment penser est celui-ci, car, si tous ces bits sont mis à 1, alors nous allons obtenir exactement ce que «A» était, sauf pour, peut-être, ce que ce bit est. Parce que si c'était un 1, maintenant ça va être réglé sur 0, parce que tout cela est, AND avec ce va être 0. Alors, quelle est 'A' & ~ Ox20 va me donner? [Les élèves répondent, inaudible] Et ce qui est 'a' et - c'est 'A'. Et ce qui est 'a' et ~ Ox20 va me donner? «A.» Parce que c'est actuellement un 1. Anding avec ce 0 va faire un 0, et maintenant nous allons obtenir un «A». Tous les deux sont «A», et le dernier mais non le moindre de ce type, nous avons XOR. C'est très bien comme ou, sauf que cela signifie exclusivement ou. C'est comme ce que vous pensez habituellement comme ou dans le monde réel. Alors que vous faites soit «x» ou «y», mais pas les deux. Voici 1 ^ 1 va être 0. Parce que le vrai, c'est - il ne fonctionne pas aussi bien avec le vrai et le faux logique comme au niveau du bit et et ou faire, mais vrai ^ vrai est faux. Parce que nous ne voulons retourner true si un seul d'entre eux est vrai. Donc, 1 ^ 1 est 0. Qu'en est-0 ^ 1? Est 1. 1 ^ 0 est 1, 0 ^ 0 est 0. Donc, en toutes circonstances, 0 bit 0 quelque chose va être 0. 1 bit quelque chose 0 ou 0 bit 1, si c'est | ou ^, ça va être un 1, et si c'est et ce sera 0. Et le seul cas où une opération de bits 1 n'est pas une exclusive est avec ou. C'est 0110. Alors, voici maintenant, en utilisant XOR - si nous sommes de retour à 20. 'A' ^ Ox20 sont ces 2 bits nous comparant. Ainsi, un 1 ^ 0 va me donner quoi? A un. 'A' ^ Ox20 va me donner? Minuscules un. 'A' ^ Ox20 va me donner? Capital A. Parce que quoi que ce fait, cette disjonction avec Ox20 effectivement renversant tout ce qui ce bit est. Si c'est un 0, il est maintenant va devenir un 1. Comme il s'agit d'un 1, 1, 1 ^ est égal à 0. Donc, notre «a» est devenu «A», et notre «A» est devenu «un». Donc XOR est un moyen très pratique de feuilletant le cas. Vous voulez juste pour itérer sur une chaîne de lettres et alterner le cas de tous les personnages, vous venez tout XOR avec Ox20. Maintenant, nous avons laissé changement. Décalage vers la gauche va juste, au fond, pousser tous les numéros dans, ou à gauche, et insérer des 0 derrière eux. Nous avons donc ici 00001101. Nous allons pousser 3 de 0 de la droite, et nous obtenons 01101000. En termes non binaires, nous voyons que c'est vraiment traiter 13 gauche décalée par 3, ce qui nous donne 104. Alors déplacement gauche, nous voyons ici, x << y est fondamentalement x * 2 ^ y. 13 * 2 ^ 3, ^ 3 est 2 8, de sorte 13 * 8 est 104. Si vous venez de penser binaire en général, comment chaque chiffre, si nous partons de la droite, c'est la place de la 1, puis lieu de la 2, puis la place de la 4. Donc, en poussant des 0 de la droite, nous sommes en train de pousser les choses qui étaient à la place de la 4 à la place du 8, et les choses qui étaient à la place de la 8 à la place du 16. Chaque changement multiplie juste par 2. Ouais? [Étudiants] Qu'est-ce qui se passe si vous avez changé de 5? [Bowden] Si vous avez changé de 5 vous venez de perdre chiffres. Inévitablement, c'est la même chose. Comme, entiers sont sur 32 bits, si vous ajoutez deux très grands entiers, il ne s'intègre pas dans un entier. Donc, c'est la même chose ici. Si vous décalée de 5, nous tout simplement perdre celui-là. Et c'est un peu ce que je veux dire par «à peu près», où si vous passez trop loin, vous perdez bits. Décalage à droite va être le contraire, où nous allons pousser 0 de l'extrémité, et pour nos fins, remplir les 0 de la gauche. Ce faisant, nous sommes fondamentalement inverser ce que nous avions déjà fait. Et nous voyons que les trois des 0 sur la droite ont juste tombé, et nous avons poussé la 1101 tout le chemin à droite. Ce fait 104 3, qui est, de manière efficace, x / 2 ^ y. Alors maintenant, ici, c'est une idée similaire. Pourquoi est-il juste environ x / 2 ^ y, et pas réellement x / 2 ^ y? Parce que si je l'avais changé par 4, j'aurais perdu un 1. Fondamentalement, ce que vous pensez, il suffit de penser de la division entière en général. Donc, comme 5/2 est 2. Ce n'est pas 2,5. C'est la même idée ici. Lorsque l'on divise par 2, nous pouvons perdre bits impairs le long du chemin. Alors maintenant - c'est tout pour bit. C'est tout ce que vous devez savoir. Rappelez-vous les cas d'utilisation que nous avons vu en classe, comme un masque de bits est utile pour les opérateurs binaires, ou vous les utilisez pour les masques de bits. Les lettres majuscules et minuscules, des conversions est un exemple assez prototypique. Okay, donc les attaques par débordement de tampon. Quelqu'un se souvient-ce qui n'allait pas avec cette fonction? Notez que nous déclarions un tableau de 12 octets, 12 caractères, puis nous copions dans notre tampon de 12 caractères de la barre de chaîne entière. Alors, quel est le problème ici? Le nombre magique 12 devrait à peu près immédiatement sortir comme - pourquoi 12? Que faire si la barre se trouve être plus de 12 caractères? Que faire si la barre est des millions de caractères? Ici la question est memcpy. Si la barre est assez long, il sera juste complètement - 'c', 'c' ne se soucie pas que c'était seulement 12 caractères; «C» ne se soucie pas qu'il ne peut pas s'adapter à ce nombre d'octets. Il sera juste complètement écraser char, les 12 octets, nous avons alloué pour cela, et tout passé en mémoire qui ne lui appartiennent pas en ce tampon avec tout ce que la barre de chaîne est. C'était donc l'image que nous avons vu en classe où nous avons notre pile de grandir. Vous devez être habitué à ces images ou de vous familiariser à nouveau avec eux. Nous avons notre pile de grandir, des adresses de mémoire commencent à 0 au sommet et grandir jusqu'à 4 milliards de en bas. Nous avons notre tableau «c» quelque part en mémoire, puis nous avons notre pointeur de bar juste en dessous de lui, et puis nous avons ce pointeur à cadre enregistrées dans notre adresse de retour et la pile de notre routine de parent. Rappelez-vous quelle est l'adresse de retour est? C'est quand principale appelle une fonction foo, appelle une barre de fonctions, inévitablement, bar rendements. Ainsi, lorsque le rendement de la barre, ils ont besoin de savoir que ça va à foo qui l'a appelé. Donc, l'adresse de retour est l'adresse de la fonction qu'il doit retourner à quand le retour de la fonction. La raison pour laquelle c'est important pour tampons attaques par débordement parce que, idéalement, les pirates aiment changer cette adresse de retour. Au lieu d'aller à foo, je vais retourner à l'endroit où le pirate veut que je retourne à. Et, idéalement, où le pirate veut souvent revenir à est le début de la mémoire tampon que nous avions à l'origine. Donc remarquer, encore une fois, Little Indian. L'appareil est un exemple d'un système indien Little, si un nombre entier ou un pointeur est stocké avec les octets inversés. Donc, ici, nous voyons - est-ce? Ouais. Nous voyons Ox80, OxC0, OX35, OxO8. Rappelez-vous les chiffres hexadécimaux? Nous ne renversons pas les chiffres hexadécimaux Little Indian, parce que 2 chiffres hexadécimaux forment un seul octet, et nous inverser les octets. C'est pourquoi nous ne stockons pas, comme, 80530CO8. Nous conservons, au contraire, chaque paire de 2 chiffres, à partir de la droite. Cette adresse se réfère à l'adresse de début de notre tampon que nous voulions vraiment copier dans en premier lieu. La raison qui est utile parce que, si l'attaquant arrivé, au lieu d'avoir une chaîne qui était juste une chaîne inoffensif comme leur nom ou quelque chose, si, au contraire, cette chaîne était juste un peu de code arbitraire qui faisaient ce qu'ils voulaient qu'il fasse? Ils pourraient donc - je ne peux pas penser à tout code cool. Il pourrait être n'importe quoi, cependant. Tout code catastrophique. S'ils voulaient, ils pourraient simplement faire quelque chose à défauts segments, mais ce serait inutile. Ils le font habituellement pour pirater votre système. Okay. bibliothèque de CS50. Ceci est, fondamentalement, getInt, getString, toutes ces fonctions, nous avons fourni pour vous. Nous avons donc char * string, et c'est l'abstraction que nous avons fait sauter loin à un certain moment au cours du semestre. Rappelez-vous que la chaîne est juste un tableau de caractères. Donc, nous voyons ici une version abrégée de getString. Vous devriez regarder en arrière pour se rappeler comment il est effectivement mis en œuvre. Les principaux détails sont, remarquons que nous obtenons en un seul caractère à la fois de la norme dans, ce qui est tout comme nous taper sur le clavier. Donc un seul caractère à la fois, et si nous obtenons trop de caractères, si n + 1 est supérieure à la capacité, alors nous avons besoin d'augmenter la capacité de notre tampon. Donc, ici, nous avons doublé la taille de notre tampon. Et qui ne cesse, nous insérons le caractère dans notre buffer jusqu'à ce que nous recevons une nouvelle ligne ou la fin du fichier ou que ce soit, dans ce cas, nous en avons terminé avec la chaîne et puis le vrai getString rétrécit la mémoire, comme si nous avons consacré trop de mémoire, il va revenir et réduire un peu. Donc, nous ne montrons pas, mais l'idée principale est il doit lire en un seul caractère à la fois. Il peut non seulement lire en tout une chose à la fois, parce que leur tampon est seulement d'une certaine taille. Donc, si la chaîne qu'il tente d'insérer dans le tampon est trop grand, alors il serait déborder. Donc, ici, nous empêchons que par lecture seule dans un seul caractère à la fois et de plus en plus à chaque fois que nous devons. Donc getInt et les autres fonctions de la bibliothèque CS50 ont tendance à utiliser getString dans leur mise en œuvre. Donc, j'ai souligné les choses importantes ici. Il appelle getString pour obtenir une chaîne. Si getString n'a pas la mémoire de retour, rappelez-vous que getString mallocs quelque chose, donc chaque fois que vous appelez getString vous ne devriez pas (inaudible) libérer cette chaîne que vous avez obtenu. Donc ici, si elle n'a pas réussi à malloc quelque chose, nous revenons INT_MAX comme un simple indicateur qui, hey, nous n'étions pas vraiment en mesure d'obtenir un nombre entier. Vous devez ignorer ce que je reviens à vous, ou vous ne devez pas traiter cela comme une entrée valide. Enfin, en supposant que ne réussissent, nous utilisons sscanf avec ce drapeau spécial, ce qui signifie, d'abord correspondre à un nombre entier, alors correspondre à des caractères après que entier. Donc, remarquons que nous voulons rendre égale 1. Donc rendements SSCANF combien de matchs si bien fait? Il sera de retour 1 si elle correspondait avec succès un nombre entier, il sera de retour 0 si elle ne correspond un nombre entier, et il sera de retour 2 si elle correspondait un nombre entier suivi par un certain caractère. Donc, nous remarquons réessayer si nous comparons tout sauf une. Donc, si nous sommes entrés dans 1, 2, 3, C ou 1, 2, 3, X, puis 1, 2, 3 se serait stockée dans le nombre entier, X serait sauvegardée sur le caractère, sscanf reviendraient 2, et nous aimerions recommencer, parce que nous voulons seulement un nombre entier. Souffle rapidement grâce à HTML, HTTP, CSS. HyperText Markup Language est la structure et la sémantique du web. Voici l'exemple de la conférence où nous avons des balises HTML. Nous avons balises head, étiquettes de corps, nous avons des exemples de balises vides où l'on ne fait pas avoir un début et balise de fin, nous avons juste le lien et l'image. Il n'ya pas d'image de balise de fermeture il ya juste une seule balise qui accomplit tout le tag doit faire. Le lien est un exemple, nous allons voir comment vous vous connectez à CSS, le script est un exemple de la façon dont vous vous connectez à un JavaScript externe. C'est assez simple, et souvenez-vous, HTML n'est pas un langage de programmation. Ici, souvenez-vous comment vous définiriez une forme ou tout au moins ce que cela ferait? Une telle forme a une action et une méthode. Les méthodes que vous ne jamais voir sont GET et POST. Donc GET est la version où la chose se mettre dans l'URL. POST est où il n'est pas mis dans l'URL. Au lieu de cela, toutes les données du formulaire est inséré plus caché dans la requête HTTP. Donc, ici, l'action définit où la requête HTTP va. Où il va est google.com / search. Méthode. Rappelez-vous les différences entre GET et POST, et, disons juste titre d'exemple, si vous voulez quelque chose de signet. Vous ne serez jamais en mesure de mettre en signet une URL POST parce que les données ne sont pas inclus dans l'adresse URL. HTTP, maintenant, est le protocole de transfert hypertexte. Le protocole de transfert hypertexte, vous pouvez vous attendre à transférer HyperText Markup Language, et il le fait. Mais il transfère également les images que vous trouverez sur le Web, tous les téléchargements que vous effectuez commencent comme une requête HTTP. Donc HTTP est seulement la langue de la World Wide Web. Et ici, vous devez reconnaître ce genre de requête HTTP. Voici HTTP/1.1 sur le côté dit juste que c'est la version du protocole que j'utilise. Il est à peu près toujours va être HTTP/1.1, comme vous le verrez. Ensuite, nous voyons que ce n'était EEG, l'alternative étant POST, que vous pourriez voir. Et l'URL que je voulais visiter était www.google.com/search?q = blah, blah, blah. Alors, n'oubliez pas que cela, le point d'interrogation q = blah blah blah, est le genre de choses qui est soumis par un formulaire. La réponse, il pourrait revenir à moi ressemblerait à quelque chose comme ça. Encore une fois, en commençant par le protocole, qui va être que, suivi par le code de statut. Ici, c'est 200 OK. Et enfin, la page Web que j'ai effectivement demandé sera suivie. Le code d'état possible, vous verrez peut-être, et vous devez savoir plusieurs d'entre eux. 200 OK, vous avez probablement vu avant. 403 Forbidden, 404 Not Found, 500 Internal Server Error est généralement si vous allez à un site Web et quelque chose est cassé ou leurs accidents de code PHP, alors que dans l'appareil, nous avons cette grande boîte orange qui vient et dit, comme, quelque chose ne va pas, ce code ne fonctionne pas ou de mauvaise cette fonction. Habituellement sites ne veulent pas que vous le sachiez quelles sont les fonctions réellement mauvais, si au contraire, ils vont juste vous donner 500 erreurs de serveur interne. TCP / IP est une sous-couche HTTP. Rappelez-vous que il ya Internet en dehors de la World Wide Web. Comme si vous jouez un jeu en ligne qui ne passe pas par HTTP, il va par un autre - il est toujours en utilisant l'Internet, mais il n'utilise pas HTTP. HTTP est un exemple de protocole construit sur TCP / IP. IP signifie littéralement le protocole Internet. Chaque ordinateur possède une adresse IP, ils sont les choses à 4 chiffres comme 192.168.2.1, ou que ce soit; qui tend à être un local. Mais c'est le modèle d'une adresse IP. Ainsi, le DNS, Domain Name Service, C'est ce que traduit choses comme google.com à une adresse IP réelle. Donc, si vous tapez cette adresse IP en une adresse URL, cela vous amènera à Google, mais vous avez tendance à ne pas se souvenir de ces choses. Vous avez tendance à retenir google.com place. La dernière chose que nous avons est des ports, où cela est la partie de TCP de la propriété intellectuelle. TCP fait plus. Pensez, comme, vous avez votre navigateur Web en marche. Peut-être que vous avez une application de messagerie fonctionnement; peut-être vous avez un autre programme qui utilise l'Internet fonctionne. Ils ont tous besoin d'un accès à Internet, mais votre ordinateur ne dispose que d'une carte WiFi ou autre. Donc ports sont le moyen que nous sommes en mesure de diviser comment ces applications sont en mesure d'utiliser l'Internet. Chaque application obtient 1 port spécifique qu'il peut écouter, et par défaut, HTTP utilise le port 80. Certains services de messagerie utilisent 25. Ceux numéro est faible ont tendance à être réservé. Vous êtes généralement en mesure d'obtenir les plus-numérotées pour vous-même. CSS, Cascading Style Sheets. Pages web nous de style avec CSS, pas en HTML. Il ya 3 endroits où vous pouvez mettre votre CSS. Il peut être en ligne, entre les balises de style, ou dans un fichier à part entière et ensuite lié po Et ici est juste un exemple de CSS. Vous devez reconnaître ce modèle, où le premier exemple est que nous sommes correspondant à la balise body, et ici nous centrer la balise body. Le deuxième exemple, nous faisons écho à la chose avec ID pied de page, et nous appliquons des modèles à cela. Notez que les ID de bas de page manuels aligne à gauche, tandis que le centre-corps texte s'aligne. Pied de page est à l'intérieur du corps. Il sera, au contraire, text-align gauche, même si le corps dit centre text-align. C'est toute la partie en cascade de lui. Vous pouvez avoir - vous pouvez spécifier les styles pour le corps, et puis les choses dans le corps, vous pouvez spécifier des styles plus spécifiques, et les choses fonctionnent comme prévu. Prescripteurs CSS plus spécifiques priment. Je crois que c'est tout. [Ali Nahm] Salut tout le monde. Si seulement je pouvais obtenir votre attention. Je suis Ali et je vais passer par PHP et SQL très rapide. Nous pouvons donc commencer. PHP est l'abréviation de PHP: Hypertext Preprocessor. Et comme vous devez savoir, c'est un langage de script côté serveur, et nous l'utilisons pour l'extrémité arrière de sites Web, et comment il fait beaucoup de calculs, la partie arrière-scènes. Syntaxe. Ce n'est pas comme C, surprise, surprise. Il doit toujours commencer avec l', si vous pouvez le voir, le - je ne peux pas aller de l'avant. Vous pouvez voir vous avez besoin de nouveaux types de supports et alors vous devez également? Php. C'est toujours la façon dont vous devez encadrer votre texte PHP, votre code PHP. Donc, il ne peut pas juste être comme C, où vous sorte de le mettre en premier lieu. Vous devez toujours entourer. Et maintenant, la syntaxe est important que toutes les variables doivent commencer par le caractère $. Vous devez faire lorsque vous les définir, vous devez le faire lorsque vous parlez à eux plus tard. Vous avez toujours besoin que $. C'est votre nouveau meilleur ami, à peu près. Vous n'avez pas - contrairement à C, vous n'avez pas besoin de mettre ce genre de type de variable il est. Ainsi, alors que vous avez besoin de l'$, vous n'avez pas besoin de mettre, comme, int x ou y chaîne, etcetera, etcetera. Ainsi, une légère différence. À la suite de cela, il signifie que PHP est un type faiblement. PHP est un langage de type faiblement, et il a des variables faiblement typé. En d'autres termes, cela signifie que vous pouvez basculer entre les différentes sortes de types de variables. Vous pouvez enregistrer votre numéro 1 comme un int, vous pouvez le stocker sous forme de chaîne, et vous pouvez l'enregistrer comme un flotteur, et tout sera que numéro 1. Même si vous êtes le stocker sous différentes formes, c'est encore - les types de variables tiennent toujours à la fin. Donc, si vous regardez ici, si vous vous souvenez de pset 7, beaucoup d'entre vous ont probablement des problèmes avec cela. Deux signes d'égalité, 3, 4 signes égal signe égal. D'accord, il n'y a pas de 4 signes égal, mais il ya 2 et 3. Vous utilisez deux signes égal à vérifier les valeurs. Il peut vérifier tous les types. Donc, si vous pouvez le voir au premier exemple, J'ai num_int == num_string. Donc, votre int et votre chaîne sont à la fois techniquement, 1, mais ils sont de différents types. Mais pour les doubles égaux, ça va encore passer. Toutefois, pour les triples égaux, il vérifie la valeur ainsi que les différents types. Cela signifie qu'il ne va pas se passer dans ce second cas en l'espèce, où vous utilisez trois signes égal à la place. C'est donc une grande différence que vous devriez tous avoir montré aujourd'hui. Concaténation de chaîne est une autre chose puissante que vous pouvez utiliser en PHP. Il est fondamentalement juste cette notation de point pratique, et c'est ainsi que vous pouvez lier des chaînes de caractères. Donc si vous avez de chat et de chien que vous avez, et vous voulez mettre les deux cordes ensemble, vous pouvez utiliser la période, et c'est une sorte de comment cela fonctionne. Vous pouvez aussi les placer à côté de l'autre, comme vous pouvez le voir dans l'exemple ici bas, où j'ai écho chaîne 1, l'espace chaîne 2. PHP saura les remplacer en tant que tel. Tableaux. Maintenant, en PHP, il existe 2 types de tableaux. Vous pouvez avoir des tableaux réguliers, et vous pouvez aussi avoir des tableaux associatifs, et nous allons passer par eux en ce moment. Réseaux réguliers sont tout cela en C, et si vous avez des indices qui sont numérotés. En ce moment nous allons juste créer un et mettre - C'est donc ainsi que nous créons un tableau vide, alors nous allons mettre dans le numéro d'index 0. Nous allons mettre le numéro 6, la valeur 6. Vous pouvez le voir en bas ici. Where's - à l'index numéro 1, nous allons mettre le numéro de valeur 4, et si vous pouvez le voir il ya un 6, il ya un 4, et alors que nous sommes l'impression des choses, quand nous essayons d'imprimer la valeur stockée au numéro d'index 0, puis nous verrons la valeur 6 est imprimé. Cool? C'est donc réseaux réguliers pour vous. Une autre façon, vous pouvez également ajouter des choses à réseaux réguliers maintenant est que vous pouvez simplement les ajouter à la fin. Cela signifie que vous n'avez pas à spécifier l'index spécifique. Vous pouvez voir le numéro, puis dans les crochets il n'y a pas d'index spécifié. Et il saura - PHP saura juste ajouter à la fin de la liste, la prochaine place libre. Ainsi, vous pouvez voir le 1 là à ce point 0, 2 allés là à la première place. Le 3 va - on ajoute ainsi. Donc, ce genre de logique. Vous êtes juste constamment ajouter, et puis quand nous sommes en écho à l'indice de numéro 1, il affichera la valeur 2. Ensuite, nous avons des tableaux qui sont des tableaux associatifs. Les tableaux associatifs, au lieu d'avoir des indices numériques, ce qu'ils font est, ils ont des indices qui sont par chaîne. Vous pouvez le voir, à la place de - je me suis débarrassé de tous ces indices numériques, et maintenant il est key1, key2, key3, et ils sont entre guillemets pour signifier que ce sont tous des chaînes. Donc, nous pouvons avoir un exemple. L'exemple de ceci est que nous avons la tf, et c'est le nom de l'index. Nous allons mettre "Ali" que le nom, à l'index, les calories consommées, nous pouvons mettre un int cette fois au lieu d'une chaîne, puis à les goûts de l'indice, nous pouvons mettre un tableau entier à l'intérieur de celui-ci. Donc c'est un peu - c'est un concept similaire à la façon dont nous avions Indices de chiffres, mais maintenant nous pouvons changer les indices autour de de les avoir comme des chaînes à la place. Vous pouvez aussi le faire, mais pas seulement le faire individuellement, vous pouvez faire tout cela en une seule fois. Donc vous pouvez voir que tf de ce tableau, puis nous les mettons dans un géant ensemble de crochet. Alors, ça peut accélérer les choses. Il s'agit plus d'un choix stylistique que non. Nous avons aussi des boucles. En C, nous avons boucles qui fonctionnent comme ça. Nous avons eu notre réseau, et nous sommes allés de l'index 0 à la fin de la liste, et nous imprimons le tout, non? Sauf que le problème est, pour les tableaux associatifs, nous ne savons pas nécessairement les indices numériques parce que maintenant nous avons les indices de chaîne. Maintenant, nous utilisons boucles foreach, qui, encore une fois, vous nous l'espérons utilisés dans pset 7. boucles foreach suffit de savoir chaque partie de la liste. Et il n'a pas à savoir exactement l'indice numérique que vous avez. Donc, vous avez la syntaxe foreach, il est donc foreach, vous mettez le tableau. Donc, mon tableau est appelé ensemble de processeurs, et alors que, comme le mot, et puis vous mettez cette variable temporaire locale que vous allez utiliser juste pour la chose spécifique qui va tenir le spécifique - une instance ou une section de la matrice. Pset nombre tiendra 1, et alors peut-être qu'il tiendra le numéro 6, et il tiendra le numéro 2. Mais il est garanti de passer par chaque valeur unique qui est dans le tableau. Fonctions utiles que vous devez savoir en PHP sont le besoin, de sorte que permet de s'assurer que vous êtes y compris certains fichiers, écho, sortie, vide. Je vous recommande fortement de regarder pset 7 et regardez ces fonctions. Vous pourriez avoir à connaître ceux, donc je ne sais vraiment quoi, exactement, ceux qui font tous. Et maintenant, nous allons passer par la portée très rapidement. Dans le périmètre, PHP est une sorte de chose génial, contrairement au C, et donc nous allons juste passer rapidement. Alors disons que nous commençons à cette flèche que nous avons là. Et nous allons commencer avec $ i. Donc, la variable 'i' va être 0, et nous allons simplement continuer à imprimer dans cette grande boîte blanche là-bas. Nous allons commencer avec i0, et puis nous allons faire écho. Donc, il ya le 0. Et puis nous allons incrémenter par la boucle pour, et puis ça va être la valeur 1. L'un est inférieur à 3, donc ça va passer à travers cette boucle, et puis nous allons le voir à nouveau imprimé. Nous allons augmenter de nouveau pour 2, et 2 est inférieur à 3, il y passe la boucle, et il y imprimer le 2. Ensuite, vous noterez que 3 n'est pas inférieur à 3, nous allons donc à sortir de la boucle. Alors maintenant, nous avons sortis, puis nous allons passer en AFunction. Très bien. Donc, vous devez noter que cette variable que nous avons créé, la variable «i», n'est pas scope localement. Cela signifie que ce n'est pas à la boucle locale, et que cette variable nous pouvons encore accéder et modifier ensuite, et il sera toujours efficace. Donc, si vous allez dans la fonction maintenant, vous verrez que nous utilisons aussi la variable «i», et nous allons augmenter 'i' + +. On pourrait penser, à première vue, sur la base de C, que c'est une copie de la variable «i». C'est une chose totalement différente, ce qui est correct. Ainsi, lorsque nous imprimons, nous allons imprimer 'i' + +, qui va imprimer que 4, et puis nous allons - désolé. Ensuite, nous allons finir de cette fonction, et nous allons être où que la flèche est en ce moment. Cela signifie que là, cependant, même si la fonction a changé la valeur de «i», il n'a pas changé en dehors de la fonction, parce que la fonction a une portée distincte. Cela signifie que lorsque nous faisons écho à «i», il n'a pas changé dans le champ d'application de la fonction, et alors nous allons imprimer 3 fois. Des choses différentes sur la portée en PHP qu'en C Maintenant en PHP et HTML. PHP est utilisé pour créer des pages web dynamiques. Il sorte de choses différentes. Nous avons différent de HTML. Avec le HTML, nous avons toujours juste la même chose statique, comme la façon dont Rob a montré, alors que PHP, vous pouvez changer les choses en fonction de qui est l'utilisateur. Donc, si j'ai cela, je l'ai, "Vous êtes connecté en tant que -" puis le nom, et je peux changer le nom. Donc maintenant le nom est Joseph, et il a le "sur-moi", mais je peux aussi changer le nom d'avoir Tommy. Et ce serait une chose différente. Alors nous pouvons également changer différentes choses sur lui, et il affichera un contenu différent en fonction du nom. Alors PHP peut sorte de changer ce qui se passe dans votre site Web. Même ici. Pourtant, note qu'ils ont un contenu différent, même si vous êtes techniquement accédez toujours à la même page web sur la surface. Génération HTML. Il ya 2 façons différentes que vous pouvez faire cela. Nous allons donc à travers ce droit maintenant. La première façon est, vous avez - ouais, désolé. Donc, vous avez juste votre régulière pour la boucle en PHP, et puis vous l'écho en PHP et vous echo sur HTML. En utilisant ce que Rob vous a montré de l'écriture HTML et puis en utilisant l'impression de PHP pour tout imprimer à la page web. L'autre façon est de faire comme si vous vous séparez le PHP et le code HTML. Ainsi, vous pouvez avoir une ligne de PHP qui commence la boucle, alors vous pouvez avoir la ligne de code HTML dans une chose distincte, puis vous finissez la boucle, à nouveau, avec un PHP. Donc, c'est une sorte de séparation dehors. Sur le côté gauche, vous pouvez que vous avez toutes les - c'est juste une partie de PHP. Sur la droite, vous pouvez voir que vous avez une ligne de PHP, vous avez une ligne de code HTML, et vous avez une ligne de PHP à nouveau. Donc séparer dehors dans ce qu'ils font. Et vous remarquerez que de toute façon, pour l'un d'eux, ils impriment toujours sur l'image, l'image, l'image, de sorte que HTML est encore imprimé de la même façon. Et puis, vous verrez toujours les 3 images apparaissent sur votre site. C'est donc deux façons différentes de faire la même chose. Maintenant, nous avons des formulaires et des demandes. Comme Rob vous a montré, existe des formes de HTML, et nous juste en coup de vent à travers cela. Vous avez une action et vous avez une méthode, et votre action sorte de vous où vous allez envoyer montre, et la méthode est de savoir si ça va être un GET ou POST. Et une requête GET, comme l'a dit Rob, signifie que vous allez mettre dans une forme et vous verrez comme une URL, alors une requête POST vous ne verrez pas dans une URL. Ainsi, une légère différence. Cependant, une chose qui est la même chose est que POST et GET sont également précaires. Alors vous pouvez penser que juste parce que vous ne le voyez pas dans l'URL, cela signifie que le POST est plus sûr, mais vous pouvez toujours le voir dans vos cookies dans les informations que vous envoyez. Donc, ne pensez pas que sur l'un ou l'autre. Une autre chose à noter est que vous avez également des variables de la section. Vous les gars utilisé ce dans pset 7 pour obtenir vos informations d'identification d'utilisateur. Ce qui s'est passé, c'est que vous pouvez utiliser ce tableau associatif $ _SESSION, et alors vous êtes en mesure d'accéder à des choses différentes et stocker des choses différentes à travers les pages. La dernière chose est que nous avons SQL, Structured Query Language, et il s'agit d'un langage de programmation pour la gestion de bases de données. Qu'est-ce, exactement, sont bases de données? Ils sont des collections de tableaux, et chaque table peut avoir le même genre d'objets. Nous avons donc eu une table d'utilisateurs dans votre pset des finances. Et pourquoi sont-ils utiles? Parce que c'est un moyen de stocker de façon permanente des informations. C'est un moyen de suivre les choses et de gérer les choses et effectivement le voir sur les différentes pages et de garder la trace. Alors que si vous stockez juste il à ce seul moment immédiate et ensuite l'utiliser plus tard, vous ne serez pas en mesure d'accéder à tout ce que vous avez enregistré. Nous avons 4 choses importantes que nous utilisons pour les commandes SQL. Nous avons select, insert, delete et update. Ce sont vraiment important pour vous les gars à savoir pour votre quiz. Nous allons rapidement passer en revue sélectionnons maintenant. Fondamentalement, vous sélectionnez les lignes d'une base de données. Donc, si vous avez, ici - nous avons ces deux choses différentes, et nous voulons sélectionner la table des classes où génial - où dans la colonne impressionnante la valeur est 1. Donc vous pouvez voir ici, nous avons ces deux choses de nom de la classe, CS50 et Stat110, et nous avons les ID de classe et le slogan. Donc, nous voulons sélectionner toutes ces informations. Ensuite, vous pouvez voir ici que c'est le genre de cueillette de cette colonne impressionnant, 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. Comment faites-vous exactement dans votre code? Vous devez utiliser PHP. C'est donc une sorte de comment PHP et SQL sont liés les uns aux autres. Maintenant, nous avons notre code, et nous allons utiliser notre fonction de recherche comme nous l'avons fait dans pset 7, et nous allons exécuter la requête SQL. Ensuite, nous allons avoir - nous devons toujours vérifier si triple égalité de rang si elle est fausse. Encore une fois, vous voulez vérifier le type et la valeur, et puis si cela ne fonctionne pas, alors vous voulez faire des excuses, comme d'habitude, comme nous l'avons fait dans pset 7. Sinon, vous voulez faire une boucle par tout ceux à portée de main foreach que nous venons de voir. Maintenant que nous sommes une boucle à travers et nous avons fait le passé, Supposons que notre requête passé, maintenant nous avons notre boucle foreach. Et la première ligne, il a, alors voici la ligne, ici, il est enfermé dans une boîte. Il va imprimer toutes les informations qu'il a obtenu. Cela va donc à imprimer en bas "Voulez savoir HTML?" Ensuite, il va aller à la ligne suivante, parce que c'est terminé la première boucle, et oui, alors il va imprimer la deuxième ligne de celui-ci, qui va être STAT110, Retrouvez tous les moments. Une dernière chose est sur SQL vulnérabilités. Je sais que David en a parlé un peu en cours. Vous pouvez lire plus tard. C'est vraiment drôle. Injection SQL est une sorte de chose délicate. Disons que vous venez de coller ces variables directement dans votre requête, comme vous pouvez le voir dans cette première ligne. Il semble donc bien, non? Vous êtes juste mettre dans le nom d'utilisateur 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. Cela semble assez simple. Donc, disons que quelqu'un met en, pour le mot de passe, ce texte OU ici - devrait en fait être dans la zone rouge. Donc, disons qu'ils ont mis ce mot de passe en - c'est ce qu'ils entrent. Alors qu'ils mettent ou "1" = 1. Une sorte de mot de passe idiot d'avoir. Maintenant, nous allons tout simplement le remplacer, et vous noterez que dans cette requête SQL maintenant, il évalue toujours vrai, car vous remarquerez que vous pouvez requête SQL sélectionner toutes ces informations ou vous pouvez juste avoir 1 = 1. Alors que va toujours à true. Cela ne va pas vraiment travailler, parce que cela signifie que le pirate peut s'introduire dans votre système. La solution à cela est que vous devez utiliser le système AOP, ce qui signifie que vous devez utiliser des points d'interrogation, qui est ce que vous les gars utilisés dans pset 7, où vous allez utiliser un point d'interrogation à la place de l'endroit où vous voulez mettre quelque chose, et puis vous allez avoir une virgule, et alors vous aurez de temps après, après votre chaîne, les différentes variables que vous souhaitez remplacer dans votre interrogation. Ainsi, vous aurez noter ici que maintenant j'ai ces points d'interrogation rouge. Puis-je mettre les variables après mes chaînes et je sais de les remplacer dans cet ordre par la suite. Cela fera en sorte que si quelqu'un fait comme ça, et ils ont le ou 1 = 1 la situation, qui fera en sorte, dans la partie arrière, assurez-vous qu'il ne sera pas réellement briser la requête SQL. Bon, alors c'est à peu près tout, un tourbillon de PHP et SQL. Bonne chance à vous tous, et maintenant à Oregon [Oreoluwatomiwa Babarinsa] Bon tout le monde. Temps d'aller sur un peu de JavaScript et d'autres choses très rapidement, de sorte que nous ne vous tiennent pas ce soir. JavaScript. Oui. JavaScript est une sorte de quelque chose de cool, soi-disant. Les choses que vous avez vraiment besoin de savoir sur JavaScript, c'est un peu comme la fin côté client de ce que votre application web va faire. Il ya certaines choses que vous juste ne voulez pas de prendre soin de tout le temps sur le côté serveur. Toutes les petites interactions, soulignant une chose, faire quelque chose de disparaître. Vous ne voulez vraiment pas avoir à parler à votre serveur tout le temps pour cela. Et certains ce n'est même pas possible de faire sur le côté serveur. C'est pourquoi nous avons besoin de quelque chose comme JavaScript. Choses cool sur JavaScript: Il est typé dynamiquement. Ce que cela signifie est que votre programme n'a pas besoin de savoir ce qui, exactement, les variables sont quand vous écrivez sur. Il va en quelque sorte de le comprendre comme il fonctionne. D'autres choses qui sont cool à ce sujet: Il s'agit d'un langage de accolade, ce qui signifie que la syntaxe est similaire à C et PHP. Vous n'avez pas à faire beaucoup retravailler quand vous apprenez JavaScript. Ici, nous avons un peu de JavaScript. Ce qui est intéressant ici, c'est que, si vous regardez, nous avons un peu de JavaScript là, dans la balise head. Qu'est-ce que ne comprennent est essentiellement juste un fichier JavaScript. C'est une façon que vous pouvez inclure JavaScript dans votre programme. Ensuite, le second peu est en fait quelque JavaScript en ligne, très similaire à un style en ligne avec CSS, et vous êtes en train d'écrire un peu de code très rapidement il. JavaScript a tableaux. Juste une autre manière de conserver les données autour, très utile. Très agréable et facile syntaxe. Vous utilisez des crochets pour accéder à tout et tout garder ensemble. Rien de trop complexe. Le truc cool sur JavaScript et les langages de script en général c'est que vous n'avez pas à vous soucier de la taille des tableaux. Vous pouvez simplement utiliser array.length et de garder trace de celui-ci, et aussi le réseau peut augmenter ou diminuer que vous en avez besoin. Donc, vous n'avez même pas besoin de s'inquiéter de toute sorte, oh non, j'ai besoin d'allouer plus de choses, ou quelque chose comme ça. Le truc cool, ici, c'est que JavaScript a quelque chose appelé objets. C'est un langage orienté objet, si ce qu'il a est, en substance, une façon pour vous de données de groupe ensemble, un peu semblable à une structure, mais vous pouvez y accéder comme une structure ou dans une syntaxe de tableau associatif. C'est assez simple et ce que vous pouvez faire avec ce sont des données de regrouper si vous avez un tas de données qui est lié. Parce que c'est tout ce dont vous avez besoin pour décrire une voiture, vous n'avez pas besoin de l'avoir dans un tas d'endroits différents. Vous pouvez simplement coller dans 1 objet en JavaScript. Comme vous le savez probablement, l'itération est une de ces tâches fastidieuses. Vous venez de le faire sur un nouveau. Vous avez besoin de parler à tous les objets dans la voiture, ou vous avez besoin de passer par chaque élément dans une liste ou quelque chose comme ça. Donc JavaScript a, similaire à PHP, une syntaxe foreach. Dans ce cas, c'est un pour en boucle. Vous voulez utiliser seulement sur des objets. Il ya quelques problèmes qui se produisent si vous utilisez ce sur des tableaux. Il est généralement une de ces choses, si, c'est très utile, parce que vous éliminez beaucoup de frais généraux parce que vous n'avez pas à tirer vers le haut tout en votre objet par vous-même. Vous n'avez pas à me souvenir de tous les noms de clés. Vous venez de sorte de les récupérez dans cette syntaxe. En cela, avec pour, vous voulez juste de se rappeler que vous reprendre toutes les clés, d'une manière très similaire à la table de hachage. Si vous vous souvenez de cela, lorsque vous mettriez dans une chaîne que vous pourriez obtenir quelque chose qui aurait une valeur qui lui est associée. Ce que vous pouvez faire avec ceci est que vous pouvez dire, tout droit, J'ai mis dans une voiture, et je l'ai appelé une Ferrari. Ainsi, vous pouvez mettre dans la chaîne Ferrari plus tard, et vous pouvez obtenir cela. Et vous pouvez le faire dans une boucle, avec le pour en boucle. Il suffit donc de plus sur les objets. L'essentiel de ce que vous devez retenir est que vous pouvez utiliser la structure de l'objet comme syntaxe quand vous voulez avec ces derniers, sauf si ce que vous allez utiliser comme une chaîne n'est pas un nom de variable valide. Donc, si vous regardez ce que là-bas, nous avons la clé avec des espaces. Eh bien, si vous deviez mettre object.key, l'espace, avec l'espace, les espaces, qui n'aurait tout simplement pas de sens syntaxique. Alors que vous pouvez faire avec ce type de syntaxe de support. En outre, le JavaScript est très portée-sage de PHP. Vous avez 2 façons d'aborder la portée. Vous ne pouvez pas avoir le var en face d'une variable, et cela signifie juste que c'est mondial. Vous pouvez le voir à partir de n'importe où. Même si vous deviez mettre cela dans une déclaration si, n'importe où ailleurs dans votre code après ce stade, vous pourriez voir que variable. Une autre chose, cependant, est le var, c'est limité à quelque fonction que vous êtes po Si vous n'êtes pas dans une fonction, ainsi, il est mondial. Mais si vous êtes dans une fonction c'est seulement visible dans cette fonction. Je n'ai pas d'exemple, mais, oui. C'est une de ces choses où vous pouvez gérer les variables que vous voulez être globale, les variables que vous voulez être locale, mais vous ne devez faire attention à ce sujet, parce que vous n'avez pas le type de contrôle à grain fin que vous faites dans C, où si quelque chose est déclarée dans une boucle, il va rester dans cette boucle. La chose nous nous soucions réellement de l'aide de JavaScript pour manipule les pages web, non? Je veux dire, c'est pourquoi nous faisons cela. Pour ce faire, nous utilisons ce qu'on appelle le DOM. Le modèle objet de document. Fondamentalement, ce qu'il fait est qu'il prend tout votre HTML et modèles dehors dans un tas d'objets qui sont imbriqués les uns dans les autres. Vous commencez avec quelque chose comme ça. Vous avez, sur la droite pour moi, un tas de code là-bas que c'est une sorte de - On pourrait penser que ce serait très difficile à manipuler, parce que vous seriez analysez travers un tas de texte et d'avoir à reconstituer part des choses. Et si elle n'a pas été correctement formaté? Les mauvaises choses se passeraient. Donc, JavaScript prend soin de cela pour vous, et vous obtenez une structure de données bien, comme celui sur ma gauche, où vous avez seulement un document, et à l'intérieur que vous avez quelque chose appelé HTML, et à l'intérieur que vous avez une tête et un corps, et à l'intérieur que la tête vous avez un titre, etcetera, etcetera, etcetera. Cela simplifie la manipulation d'une page Web de sorte que c'est juste, oh, je veux juste parler de cet objet. Sorte de façon très similaire, vous souhaitez parler à un autre objet vous vous faites. Comme je l'ai dit, tout le DOM est dans l'objet du document. Soit c'est juste un endroit et puis vous pouvez aller à l'intérieur pour trouver des choses, et vous pouvez le faire - c'est le style ancien de le faire, là-haut, où vous faites document.getElementById, puis le nom, et comme vous pouvez le dire, cela devient très lourd après un certain temps. Donc probablement que vous ne voulez pas le faire. C'est pourquoi nous avons la prochaine chose que nous allons parler après cela. L'essentiel ici est que, tout droit, vous avez tous ces éléments, non? Alors peut-être que je peux changer la couleur de quelque chose de chargement de la page. Alors quoi? Que faire si mon utilisateur clique sur quelque chose? Je veux faire quelque chose d'intéressant quand ils cliquent quelque chose. C'est pourquoi nous avons des événements. Vous pouvez, en fait, trouver un élément dans votre DOM, puis dire, hey. Lorsque cette charge ou quelqu'un clique dessus, ou quand ils souris dessus, faire quelque chose avec elle. Et ce que vous avez dit, vous avez des fonctions qui gèrent pour vous. Ces fonctions sont des gestionnaires d'événements. Qu'est-ce que: ils sont - c'est juste une façon élégante de dire, cette fonction n'est exécutée que si cet événement se produit. Donc, il gère l'événement qui se produit. C'est la façon dont vous souhaitez disposer d'un gestionnaire d'événement. J'ai un peu de bouton, et lorsque vous cliquez dessus, il explose. Donc, ne cliquez pas sur le bouton. C'est une façon d'aborder, non? Vous avez une étiquette de bouton, et le clic vous avez une chaîne qui dit, oh, en passant, je fais cette chose explosion pour moi. Sinon, c'est comme un bouton ordinaire vous venez de faire. Vous pouvez également le faire d'une autre manière, en saisissant l'élément DOM, mais nous allons économiser qu'après nous parlons de jQuery. JQuery: Il s'agit d'une bibliothèque qui est cross-browser. Vous pouvez l'utiliser dans à peu près tout. Et il vous donne juste un tas d'outils pour travailler avec. Parce JavaScript, tout puissant, n'a pas tous les outils dont vous avez besoin de la boîte de s'attaquer vraiment une application Web, vous voudrez peut-être à faire. Donc, il simplifie beaucoup de choses, vous donne beaucoup de fonctions hors de la boîte que vous auriez normalement à écrire vous-même, encore et encore et encore. Et rend juste les choses très simples. Vous avez également sélecteurs, qui vous permettent de prendre tous ces éléments à partir de votre DOM beaucoup plus simplement, au lieu d'avoir à utiliser ces appels de fonction très longues. Plus d'informations sur ces sélecteurs. Vous avez, là vous avez, disons Je veux obtenir un élément avec l'ID "rock". Eh bien, dans jQuery, c'est juste de dollars, puis une chaîne qui a une livre, puis "rock". C'est très simple et beaucoup plus rapide que la façon traditionnelle de JavaScript s'attaquer à ce problème. Et vous avez des choses similaires pour les classes et les types d'éléments. jQuery est - l'un des fonctionnalités intéressantes est que vous pouvez sorte de comprimer en bas de vos questions sur votre DOM très, très rapide. 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. Donc, ce que nous allons ici nous disons, tout droit. J'ai une balise script, non? Donc, j'ai cette ligne JavaScript. Ce que nous allons faire, c'est que nous allons dire, tout droit. Lorsque le document est prêt, ce qui signifie le document a été chargé, nous allons aller dans cette fonction, et nous allons dire, tout droit, cette fonction est en train de faire autre chose. Il s'agit essentiellement de dire, tout droit, me chercher l'élément avec l'ID "myid." Et puis donner à ce gestionnaire de fonction qui s'exécute lorsque vous cliquez dessus. Fondamentalement, ce que cela fait est, dit-il, tout droit. La page est chargée, donc je vais dans, trouver cet élément, lui donner ce gestionnaire d'événements, et il définit fondamentalement votre page pour vous. Et c'est ainsi que vous voulez penser à la gestion des événements. Vous voulez juste à penser, tout droit, quand quelque chose se produit, ce que je veux arriver? Vous ne voulez pas y penser, d'accord, j'ai besoin de s'assurer que les pourparlers de cette chose à cette chose, cette chose bla bla bla, parce que vous voulez juste parler chose en termes d'événements. Lorsque cela se produit, cela se produit. Lorsque cela arrive, cela arrive. Et si les choses déclenchent d'autres choses, c'est très bien. Mais vous ne voulez pas essayer de faire du code compliqué où vous déclencher plusieurs choses en même temps, parce que vous allez juste pour vous donner un mal de tête. Tous droite. Maintenant, nous pouvons obtenir notre page de gestion des événements, mais disons que mon utilisateur clique sur un bouton. Que faire si je veux envoyer cette demande au serveur, mais je ne veux pas de recharger la page, car avoir à recharger une nouvelle page chaque fois que se genre de fastidieux, et pourquoi ai-je besoin à tirer vers le bas la tête à nouveau, et le pied de page à nouveau, et tous les éléments de la page à nouveau juste pour rafraîchir la salutation ou le temps? Donc, c'est pourquoi nous avons quelque chose comme Ajax. Ce que nous pouvons faire ici avec l'Ajax, c'est que nous pouvons dire, d'accord, Je veux envoyer des données au serveur, et je veux obtenir une réponse afin que je puisse mettre à jour ma page, ou peut-être juste faire un peu de calcul algorithmique qui ne montre pas nécessairement quelque chose à l'utilisateur. Que devez-vous faire cela? Eh bien, vous avez besoin d'une URL que vous avez besoin de parler. Votre serveur ne peut pas juste écouter magie de nulle part. Vous avez besoin d'un endroit spécifique que vous envoyez ces données. Et vous avez aussi besoin de certaines données à envoyer, ou c'est peut-être une requête sans données. Vous voulez juste faire un ping vers le serveur et dire, bon, je suis en vie, ou quelque chose comme ça. Et puis, vous voulez une fonction qui gère essentiellement avec succès. Disons que vous obtenez en retour des informations sur votre serveur, et vous voulez changer le titre de l'utilisateur sur sa page. Ainsi, vous obtiendrez les informations de retour, et vous pousser que de l'écran. Qu'est-ce qui se passe, c'est que lorsque la page est prête, vous créez une sur la fonction de clic pour ce bouton appelé greeter. Que cela ne puis est, lorsque ce bouton est enfoncé, vous parlez à greetings.php, vous faites une requête POST, et vous dites, hé, obtenez-moi quelque chose à partir de votre page. Nous n'avons pas vraiment besoin de décrire, mais greetings.php, disons simplement que, redonne "Bonjour tout le monde." Donc, nous revenons ce «monde bonjour», et sur le succès de cette, en supposant que tout se passe bien, alors que nous venons de passer à cet endroit cible que nous avons précisé et nous tenons simplement la réponse là-dedans. Et c'est un moyen très simple de mettre en place une requête Ajax. Très vite, Rob sorte de mentionné déjà, les choses peuvent aller mal, les mauvaises choses peuvent se produire, si vous voulez vous familiariser avec ces codes de réponse HTTP. Qu'est-ce que ce sont sont juste, comme, 200, tout s'est bien passé. Quelque chose d'autre, de mauvaises choses se sont passées. Il est généralement la chose que vous voulez vous rappeler. Mais il est bon de savoir tout cela. Et enfin, une fois que nous avons traversé tout cela, nous avons besoin de parler très rapidement sur la conception, et alors nous pouvons vous permettre de tout quitter. Conception. Choses que vous voulez vous rappeler. Posez-vous ces questions: Qui emploiera ceci? Que vont-ils l'utiliser pour? Qu'est-ce que mes utilisateurs se soucient? Qu'est-ce qu'ils se soucient pas? Vous ne voulez pas de faire une application et laisser pousser juste et devenir ce géant, dévorante chose que vous ne pouvez même pas terminer. Vous voulez avoir des objectifs distincts et des plans et des choses que vous souhaitez aborder. Assurez-il facile. Tout cela dit, fondamentalement, rendre facile pour l'utilisateur de l'utiliser, ne pas en faire un blob géant de texte comme cette diapositive est, en fait. Vous voulez juste que ce soit quelque chose où il est très facile pour quelqu'un d'aller dans et font ce qu'ils veulent faire. Vous ne voulez pas qu'ils aient à parcourir 5 pages pour accéder à votre fonction principale de votre site. Si Google avait 5 pages avant que vous pourriez même chercher quelque chose, personne ne l'utiliser. Et enfin, prototype de papier, groupe de discussion. Avoir une bonne conception et les pratiques de dépistage. Juste parce que vous pensez que cela fonctionne pour vous, ne signifie pas que quiconque pense cela fonctionne. Mais oui, c'est ça. [CS50.TV]