‫Bon retour et cette vidéo, nous allons enfin résoudre les problèmes que nous avions dans notre programme
‫ici, notre programme virtuel que nous avons créé, et nous allons également nous pencher sur la programmation défensive.
‫Donc, l'idée de la programmation défensive est de faire du code sécurisé qui pense vraiment déjà aux problèmes qui pourraient survenir, car dans ce
‫cas, les problèmes qui pourraient survenir sont que, par exemple, la liste est
‫vide ou que nous voulons avoir trop d'amis.
‫Nous voulons donc inviter plus d'amis que nous n'en avons.
‫Et dans ce cas, la liste est super simple que nous avons créée manuellement.
‫Mais imaginez que cela provienne d'une base de données.
‫Donc ça vient d'une base de données ou ça vient du web, d'une base de données cloud ou quelque chose comme ça.
‫Et puis ce serait une autre histoire parce que nous ne saurions jamais quelle est la taille de la liste dans ce cas.
‫Nous pouvons le voir dans le code, mais nous pourrions ne pas le savoir selon d'où il vient.
‫Dans ce cas, nous devons anticiper les différents problèmes qui pourraient survenir et nous pouvons les tester nous-mêmes lors
‫du développement.
‫Par exemple, nous l'avons déjà fait, n'est-ce pas ?
‫Nous avons entré plus d'amis que nous avons dans la liste.
‫C'est donc simple.
‫Nous l'exécutons simplement, puis nous obtenons cet argument en dehors de la plage d'exception.
‫Mais où nous obtenons c'est intéressant.
‫Donc, nous l'obtenons au point de notre méthode d'ami du parti, même si le problème se situe ailleurs,
‫car si nous le regardons, il indique la liste de noms de Shorris zéro.
‫Nous essayons donc d'accéder à un élément illicite qui n'est pas disponible car nous avons dépassé la liste.
‫Obtenez un ami du parti et nous passons cette liste ici.
‫Donc, si nous regardons d'où nous obtenons cette liste, cela pourrait être un bon point de départ car nous pouvons voir ici que nous
‫essayons d'accéder à quelque chose qui n'est pas disponible.
‫Alors, quel est le problème avec ce qui est mis à disposition ?
‫Nous pouvons donc regarder cette ligne ici, obtenir une partie avant.
‫C'est là que ça s'appelle.
‫Et nous pouvons voir.
‫Très bien, c'est le tampon.
‫Droit?
‫Nous obtenons donc un tampon, qui est cette liste ici.
‫Donc, ce que nous obtenons est une liste du plus haut niveau.
‫Donc, encore une fois, nous pouvons voir, d'accord, nous obtenons cette liste de tant de personnes et c'est de
‫là que nous obtenons la valeur.
‫Et bien, un bon point pour vérifier si la liste est bonne est en fait la méthode arget party friends, car ici on
‫obtient la bonne liste.
‫Donc, à ce stade, nous avons une liste afin que nous puissions vérifier cette liste.
‫Nous pouvons voir si cette liste est assez bonne pour ce que nous voulons faire.
‫Et ce que nous voulons faire, c'est écrire quelque chose en fonction du compte des éléments
‫de cette liste afin que nous puissions vérifier si le nombre est supérieur au nombre de points de la liste.
‫Et c'est la liste qui nous a été transmise.
‫Donc, si c'est le cas, ce que nous pouvons faire, c'est simplement imprimer quelque chose, ne pas faire ça ou faire une erreur ou quelque chose
‫comme ça.
‫Mais une chose encore meilleure que nous pouvons faire est de créer le programme Kresh.
‫Nous savons donc que le programme a un problème.
‫Mais en même temps, nous arrêtons l'exécution du programme à un stade très précoce, car imaginez que nous ayons une connexion à une base de données et
‫que nous créons maintenant toutes ces différentes erreurs ou nous parcourons simplement le code et cette méthode devient un ami de la
‫fête est en cours d'exécution et disons qu'il est connecté à une base de données et écrivons quelque chose
‫dans la base de données, puis nous exécutons à nouveau le code.
‫Et pour une raison quelconque, l'état de la base de données a changé et maintenant nous sommes époustouflés parce que les données qui nous
‫sont affichées sont complètement absurdes et nous travaillons en quelque sorte avec elles.
‫Corriger ce bug serait donc un vrai problème.
‫D'accord.
‫Nous pouvons donc déjà l'attraper le plus tôt possible afin que nous puissions simplement lancer une exception d'argument hors plage ici.
‫Alors lancez de nouveaux arguments hors de la plage d'exception parce que c'est ce que nous obtenions correctement.
‫Et un argument hors de l'exception Reagan a une surcharge multiple.
‫Nous pouvons donc avoir celui-ci ici avec un nom Parum.
‫Nous pouvons avoir un message et à l'exception ou un nom Perram avec un message.
‫Donc ici, je pourrais juste dire quelque chose comme, OK, le nombre est le problème et le nombre ne peut pas être supérieur aux
‫éléments de la liste ou quelque chose comme ça.
‫OK, ce serait donc un exemple de ce que nous pourrions afficher.
‫Exécutons-le à nouveau, car nous devrions maintenant pouvoir intercepter cette erreur ou au moins lancer une exception d'argument hors plage
‫une fois que nous obtenons cette erreur.
‫D'accord.
‫On peut donc voir l'exceptionnel non géré.
‫C'est un argument système hors de portée.
‫L'exception ne peut pas être supérieure aux éléments de la liste.
‫Nombre de paramètres.
‫C'est donc le résultat de ce que nous avons écrit ici.
‫OK, voici à quoi ressemblera l'exception.
‫Alors maintenant, nous savons quel est le problème.
‫C'est un peu plus expressif juste avant que le problème ne soit pas là.
‫Alors laissez-moi commenter ces deux lignes.
‫Le problème n'a pas été jeté à ce stade, mais il a été jeté plus loin.
‫Cela a été jeté dans notre méthode get different, donc c'est à la ligne 42, mais le problème réel est survenu beaucoup plus tôt,
‫n'est-ce pas.
‫Et index était toute l'exception, mais c'est aussi une déclaration très générique, n'est-ce pas ?
‫Cela pourrait être n'importe quoi.
‫Droit.
‫Donc, l'attraper plus tôt nous aide à voir où sont les problèmes que nous avons.
‫Donc, ce que nous pourrions, bien sûr, faire, c'est dire, d'accord, une fois que nous avons saisi cette
‫valeur et disons que cette valeur provient d'un utilisateur qui saisit une valeur.
‫Droit.
‫Vous pouvez donc entrer n'importe quelle valeur de zéro au nombre d'éléments de liste que nous avons.
‫Ainsi, nous pourrions l'attraper encore plus tôt.
‫On pourrait faire un test même ici.
‫Donc si.
‫Amis, ce compte est.
‫Moins que la valeur que nous saisissons ici et nous pourrions obtenir à nouveau cette valeur de l'utilisateur, alors nous pourrions lui donner un
‫message, n'est-ce pas ?
‫Nous ne lèverions pas notre exception.
‫Nous ne ferions pas planter notre programme.
‫Nous demanderions simplement à l'utilisateur d'entrer à nouveau une nouvelle valeur.
‫Mais nous ne le faisons pas ici car nous, en tant que programmeur, pouvons entrer la valeur ici et nous forçons ces erreurs manuellement
‫dès maintenant.
‫Droit.
‫OK, c'est donc une façon de le résoudre ou en fait une façon de l'attraper dès le début.
‫Maintenant, disons.
‫Nous entrons ici une valeur stupide, telle que moins un.
‫Très bien, réexécutons maintenant.
‫En fait, exécutons-le à nouveau.
‫Et notre programme semble fonctionner, mais il ne montre rien là-bas, donc il n'en montre rien.
‫Les flèches n'ont généré aucune erreur, mais elles ne montrent aucun ami.
‫Eh bien, notre programme semble fonctionner avec moins un parce que nous essayons d'obtenir des éléments de liste à moins
‫un de notre liste et eh bien, cela ne nous donne aucune information précieuse.
‫Alors maintenant, ce que nous pouvons, bien sûr, faire, c'est ajouter une autre condition ici.
‫Le compte doit être Krater est égal à zéro.
‫Si ce n'est pas le cas, alors nous pourrions écrire quelque chose comme le code ne peut pas être supérieur
‫aux éléments de la liste ou inférieur à zéro.
‫OK, donc c'est juste une façon de l'exprimer.
‫Et maintenant, si nous l'exécutons à nouveau, nous lancerons cette erreur.
‫D'ACCORD.
‫C'est donc quelque chose où le programme n'a pas été traité auparavant, mais maintenant, en tant que développeur, nous avons compris, OK, c'est un
‫état que nous ne voulons pas avoir.
‫C'est une situation avec laquelle nous ne voulons pas travailler, d'accord ?
‫Et comme je l'ai dit, nous coupions pendant que nous essayions d'obtenir cette valeur de quelque part et nous essayions de
‫l'attraper même avant cela.
‫Maintenant, supposons que nous ayons une situation encore plus amusante.
‫Nous avons donc une situation où ma liste d'amis est vide.
‫Je vais donc juste créer une liste vide ici.
‫Ainsi.
‫Maintenant, cela va être mis en doute et maintenant nous avons cette liste vide, exécutons-la à nouveau et voyons si notre
‫programme fonctionne toujours.
‫Et maintenant, nous obtenons toujours notre argument hors de portée, donc c'est plutôt cool.
‫Il semble donc que l'exception que nous avons créée ici résout même ce problème.
‫Nous n'avons donc pas à regarder manuellement à quoi ressemble la liste, même si elle est vide.
‫Droit.
‫Donc, si vous regardez notre liste d'amis, notre liste d'amis est vide, mais au final, nous obtenons un compte de
‫zéro.
‫Ainsi, même si la liste est nulle, la liste est toujours à zéro.
‫Donc la valeur que nous obtenons là-bas est toujours nulle.
‫Mais ce n'est pas tout ce que nous pouvons réellement faire maintenant.
‫Ainsi, au lieu d'analyser France avec France, qui est cette liste vide, nous pouvons en fait passer null ici.
‫Disons donc que pour une raison quelconque, nous n'avons pas pu créer cette liste car la connexion à la base de données n'a pas fonctionné ou quelque
‫chose comme ça.
‫Et nous entrons en conséquence.
‫Et maintenant, nous passons maintenant et nous essayons de passer maintenant dans une méthode qui nécessite en fait une liste.
‫Alors exécutons-le et voyons quel type d'erreur nous obtenons cette fois.
‫Alors maintenant, nous obtenons une référence nulle, une exception, une référence d'objet, non définie sur une instance d'une liste d'objets
‫était nulle.
‫Donc, la liste que nous avons adoptée maintenant était maintenant.
‫Nous obtenons donc cette erreur avant même de pouvoir lancer une erreur.
‫Donc, ce que nous pourrions faire, bien sûr, c'est que nous pourrions également détecter cette situation, afin que nous puissions aller de
‫l'avant et écrire une autre instruction if.
‫Si list est null, alors lève une autre exception de pointeur.
‫Lancez une nouvelle exception null d'argument.
‫Alors liste.
‫La liste est vide, d'accord, bien sûr, cela peut être plus descriptif ici, et donc la liste ne doit pas
‫être vide.
‫Veuillez vérifier la connexion Internet ou quelque chose comme ça.
‫Il peut s'agir de la connexion Internet ou de l'endroit d'où vous obtenez vos données.
‫D'ACCORD.
‫Exécutons-le à nouveau, et nous devrions lancer notre argument null exception, comme vous pouvez le voir, la
‫liste est une liste de paramètres vide parfaite.
‫D'accord.
‫Maintenant, vous vous demandez peut-être pourquoi faisons-nous tout cela ?
‫Je ne veux pas que mon programme plante tout le temps.
‫Eh bien, nous faisons cela afin que notre programme ne se retrouve pas dans l'état où il changerait réellement quelque chose dans la base
‫de données.
‫On ne change rien à la base de données et à notre petit programme.
‫Mais imaginez que ce serait le cas alors.
‫C'est une situation très différente et nous pouvons créer de sérieux problèmes ici.
‫Maintenant, je veux vous montrer une dernière chose, parce qu'avant nous avions tout droit, donc avant nous avions
‫cette déclaration if et celle-ci et celle-là et ainsi de suite, et avant que nous ayons la liste de cet ami.
‫Oui, je pourrais m'arrêter avant que nous ayons ces amis ici et que nous croisions des amis là-bas, puis nous essayons d'avoir 10
‫amis à notre fête, mais nous n'avons que sept amis.
‫Donc, cette situation, une fois que nous avons couru, ce que nous pouvons faire est de forcer cette erreur que nous avons eue et que l'erreur était dans notre
‫ami de la fête.
‫OK, donc nous obtenons cet argument hors de portée.
‫L'index d'exception était hors de portée.
‫C'est donc un problème que nous avions avant de le résoudre.
‫Droit.
‫Mais maintenant, la chose intéressante que nous pouvons regarder est la pile d'appels.
‫Il y a donc quelque chose appelé pile d'appels.
‫Et permettez-moi de l'agrandir un peu ici, en fait.
‫Je veux dire, fermez tout ça.
‫Voyons maintenant cette pile d'appels.
‫Cette pile d'appels indique ici que nous sommes actuellement en ligne quarante-six.
‫D'accord.
‫C'est là que nous sommes.
‫Nous devons donc obtenir une méthode différente.
‫Maintenant, si nous allons un peu plus haut, nous pouvons voir que c'est là que la méthode de façade a été appelée.
‫Maintenant, nous sommes à l'intérieur de la méthode plurielle get party friends.
‫Et ce que nous voulons savoir où cette méthode a été appelée.
‫Eh bien, il a été appelé à la ligne 13.
‫Ainsi, avec la pile d'appels, nous pouvons voir d'où nous avons été appelés, d'où nous avons été appelés à nouveau et ainsi de
‫suite.
‫Ainsi, nous pouvons monter jusqu'au niveau auquel nous le ferons.
‫La méthode initiale a été appelée et la méthode initiale était d'obtenir des amis du parti a été appelée.
‫Ensuite, nous entrons dans cette boucle while, puis get get party friend est appelé et nous entrons dans cette méthode ici.
‫Et puis enfin notre variable est créée sur la base d'une liste qui est vide.
‫OK d'accord.
‫J'espère donc que cela vous a donné une petite introduction au débogage.
‫Bien sûr, il y a beaucoup plus à savoir, mais je ne veux pas vous ennuyer avec tous
‫les détails car certaines choses sont utiles.
‫Mais beaucoup d'entre eux ne seront pas nécessaires dans votre vie de tous les jours car, je veux dire, en
‫général, vous pouvez, bien sûr, aller de l'avant et aller au débogage, puis vérifier toutes les différentes fenêtres que vous
‫pouvez obtenir ici et vous pouvez examinez les menaces qui s'exécutent en parallèle, les processus, etc.
‫Mais je pense que ce que vous voyez maintenant va vraiment être les principales choses ou vont être les principales
‫choses dont vous aurez besoin, les principaux outils dont vous aurez besoin pour déboguer
‫votre logiciel.
‫D'accord.
‫J'espère donc que cela vous a plu et j'espère que vous pourrez l'utiliser dans vos futurs programmes.
‫Et maintenant, vous pouvez enfin voir comment le débogage est résolu.
‫Et au fait, merci d'avoir donné ce retour, car j'ai eu le retour qu'une section de débogage manquait,
‫j'ai donc décidé de créer cette petite section.
‫Alors merci beaucoup pour vos retours.
‫Si vous pensez qu'il manque quelque chose dans ce cours ou si vous pensez que quelque chose est très
‫mauvais, veuillez ne pas me donner une mauvaise note directement.
‫Mais dites-moi ce que c'est pour que je puisse améliorer le cours, car mon objectif est d'en faire la meilleure utilisation, bien
‫sûr, sur le marché.
‫Alors merci beaucoup pour votre aide et j'espère vous voir dans la prochaine vidéo.