‫Willkommen zurück und in diesem Video werden wir endlich die Probleme beheben, die wir in unserem Programm
‫hier hatten, unserem virtuellen Programm, das wir erstellt haben, und wir werden uns auch mit der defensiven Programmierung befassen.
‫Die Idee der defensiven Programmierung besteht also darin, sicheren Code zu erstellen, der wirklich bereits darüber nachdenkt, welche Probleme auftreten könnten, denn in diesem
‫Fall könnten die Probleme auftreten, die beispielsweise darin bestehen, dass die Liste leer
‫ist oder wir zu viele Freunde haben möchten.
‫Deshalb wollen wir mehr Freunde einladen, als wir haben.
‫Und in diesem Fall ist die Liste eine super einfache, die wir manuell erstellt haben.
‫Aber stellen Sie sich vor, es stammt aus einer Datenbank.
‫Es kommt also aus einer Datenbank oder aus dem Web, aus einer Cloud-Datenbank oder so ähnlich.
‫Und dann wäre es eine andere Geschichte, weil wir nie wissen würden, wie groß die Liste in diesem Fall ist.
‫Wir können es im Code sehen, aber wir wissen es möglicherweise nicht, je nachdem, woher es kommt.
‫In diesem Fall müssen wir verschiedene auftretende Probleme antizipieren und können diese bei der Entwicklung
‫selbst testen.
‫Das haben wir zum Beispiel schon richtig gemacht?
‫Wir haben mehr Freunde eingetragen, die wir in der Liste haben.
‫Es ist also ein einfaches.
‫Wir führen dies einfach aus und erhalten dann dieses Argument außerhalb des zulässigen Bereichs.
‫Aber wo wir es hinbekommen, ist interessant.
‫Wir bekommen es also auf den Punkt unserer Party-Friend-Methode, auch wenn das Problem woanders
‫liegt, denn wenn wir es betrachten, sagt es Shorris-Namensliste null.
‫Wir versuchen also, auf ein illegales Element zuzugreifen, das nicht verfügbar ist, weil wir die Liste überschritten haben.
‫Holen Sie sich einen Partyfreund und wir geben diese Liste hier weiter.
‫Wenn wir uns also ansehen, woher wir diese Liste erhalten, könnte dies ein guter Ausgangspunkt sein, da wir hier sehen, dass wir
‫versuchen, auf etwas zuzugreifen, das nicht verfügbar ist.
‫Was ist also das Problem mit dem, was zur Verfügung gestellt wird?
‫Also können wir uns diese Zeile hier ansehen und einen Teil der Front erhalten.
‫So heißt es.
‫Und wir können sehen.
‫Okay, das ist der Puffer.
‫Rechts?
‫Wir erhalten also einen Puffer, das ist diese Liste hier.
‫Was wir also bekommen, ist eine Liste von der obersten Ebene.
‫Wir können also noch einmal sehen, dass wir diese Liste von so und so, so vielen Menschen erhalten,
‫und hieraus erhalten wir den Wert.
‫Und nun, ein guter Punkt, um zu überprüfen, ob die Liste gut ist, ist tatsächlich die Methode der Arge-Party-Freunde, denn hier bekommen wir
‫die Liste richtig.
‫An dieser Stelle haben wir also eine Liste, damit wir diese Liste überprüfen können.
‫Wir können sehen, ob diese Liste für das, was wir tun möchten, gut genug ist.
‫Und was wir tun möchten, ist, etwas basierend auf dem Konto der Elemente in
‫dieser Liste zu schreiben, damit wir überprüfen können, ob die Anzahl größer ist als die Anzahl der Listenpunkte.
‫Und das ist die Liste, die uns übergeben wurde.
‫Wenn das der Fall ist, können wir einfach etwas drucken, das nicht tun oder Fehler oder ähnliches
‫machen.
‫Aber noch besser können wir das Programm Kresh machen.
‫Wir wissen also, dass das Programm ein Problem hat.
‫Aber gleichzeitig stoppen wir die Ausführung des Programms zu einem sehr frühen Zeitpunkt, weil wir uns vorstellen, dass wir eine Verbindung zu einer
‫Datenbank haben und jetzt all diese verschiedenen Fehler erzeugen oder wir einfach den Code durchgehen und diese Methode zum
‫Partyfreund machen läuft und sagen wir, es ist mit einer Datenbank verbunden und schreiben etwas in
‫die Datenbank und dann führen wir den Code erneut aus.
‫Und aus irgendeinem Grund hat sich der Datenbankstatus geändert und jetzt sind wir überwältigt, weil die Daten, die uns
‫angezeigt werden, völliger Unsinn sind und wir irgendwie damit arbeiten.
‫Das Beheben dieses Fehlers wäre also ein echtes Problem.
‫Gut.
‫Wir können es also schon so früh wie möglich abfangen, sodass wir hier einfach eine Ausnahme außerhalb des zulässigen Bereichs werfen können.
‫Werfen Sie also neue Argumente außerhalb des zulässigen Bereichs, denn das ist es, was wir richtig gemacht haben.
‫Und ein Argument aus der Reagan-Ausnahme hat mehrere Überladungen.
‫Also können wir diesen hier mit einem Parum-Namen haben.
‫Wir können eine Nachricht und mit Ausnahme oder einen Perram-Namen mit einer Nachricht haben.
‫Hier könnte ich also einfach etwas sagen wie, OK, die Anzahl ist das Problem und die Anzahl kann nicht größer sein
‫als Elemente in der Liste oder so ähnlich.
‫OK, das wäre also ein Beispiel für das, was wir anzeigen könnten.
‫Lassen Sie es uns also noch einmal ausführen, denn jetzt sollten wir diesen Fehler tatsächlich abfangen oder zumindest eine Ausnahme außerhalb des zulässigen
‫Bereichs auslösen können, sobald wir diesen Fehler erhalten.
‫Gut.
‫So können wir außergewöhnliche unbehandelt sehen.
‫Es ist ein Systemargument außerhalb des zulässigen Bereichs.
‫Ausnahme darf nicht größer als Elemente in der Liste sein.
‫Parameteranzahl.
‫Das ist also das Ergebnis dessen, was wir hier geschrieben haben.
‫OK, so wird die Ausnahme aussehen.
‫Jetzt wissen wir also, was das Problem ist.
‫Es ist etwas ausdrucksvoller, kurz bevor das Problem nicht wirklich da war.
‫Lassen Sie mich diese beiden Zeilen auskommentieren.
‫Das Problem wurde an dieser Stelle nicht geworfen, aber es wurde weiter unten geworfen.
‫Es wurde in unsere Get-Andere-Methode eingefügt, also ist es in Zeile 42, aber das eigentliche Problem trat viel früher
‫auf, richtig.
‫Und Index war die Ausnahme, aber es ist auch eine sehr allgemeine Aussage, oder?
‫Es könnte alles sein.
‫Rechts.
‫Wenn wir es also früher erkennen, können wir erkennen, wo die Probleme liegen, die wir haben.
‫Wir könnten also natürlich sagen, OK, sobald wir diesen Wert eingegeben haben und sagen
‫wir, dieser Wert kommt von einem Benutzer, der einen Wert eingibt.
‫Rechts.
‫Sie können also einen beliebigen Wert von Null bis zur Anzahl der Listenelemente eingeben, die wir haben.
‫So konnten wir es noch früher fangen.
‫Auch hier könnten wir einen Test machen.
‫Also wenn.
‫Freunde, das zählt.
‫Weniger als der Wert, den wir hier eingeben und diesen Wert könnten wir vom Benutzer wieder bekommen, dann könnten wir ihm eine
‫Nachricht geben, oder?
‫Wir würden unsere Ausnahme nicht werfen.
‫Wir würden unser Programm nicht zum Absturz bringen.
‫Wir würden den Benutzer nur bitten, erneut einen neuen Wert einzugeben.
‫Aber wir tun es hier nicht, weil wir als Programmierer den Wert hier eingeben können und wir diese Fehler jetzt
‫manuell erzwingen.
‫Rechts.
‫OK, das ist also eine Möglichkeit, es zu lösen oder tatsächlich eine Möglichkeit, es frühzeitig zu erkennen.
‫Sagen wir jetzt.
‫Wir geben hier einen dummen Wert ein, beispielsweise minus eins.
‫In Ordnung, jetzt lassen Sie es uns noch einmal ausführen.
‫Lassen Sie es uns noch einmal ausführen.
‫Und unser Programm scheint zu funktionieren, aber es zeigt dort nichts an, also hat es auch nichts angezeigt.
‫Arrows hat keine Fehler geworfen, aber es zeigt keine Freunde an.
‫Nun, unser Programm scheint mit minus eins zu arbeiten, weil wir versuchen, minus eins Listenelemente aus unserer
‫Liste zu bekommen, und nun, es gibt uns keine wertvollen Informationen.
‫Was wir jetzt natürlich tun können, ist, hier eine weitere Bedingung hinzuzufügen.
‫Die Zählung sollte Krater gleich Null sein.
‫Wenn dies nicht der Fall ist, könnten wir so etwas wie Code schreiben, der nicht größer als die Elemente in
‫der Liste oder niedriger als Null sein kann.
‫OK, das ist nur eine Möglichkeit, es auszudrücken.
‫Und wenn wir es jetzt erneut ausführen, lösen wir diesen Fehler aus.
‫OK.
‫Das ist also etwas, wo das Programm vorher nicht Frontera war, aber jetzt haben wir als Entwickler verstanden, OK, das ist ein
‫Zustand, den wir nicht haben wollen.
‫Das ist eine Situation, mit der wir nicht arbeiten wollen, OK?
‫Und wie gesagt, wir würden schneiden, während wir versuchen, diesen Wert von irgendwoher zu bekommen, und wir würden versuchen, ihn
‫sogar vorher zu fangen.
‫Nehmen wir nun an, wir haben eine Situation, die noch lustiger ist.
‫Wir haben also eine Situation, in der meine Freundesliste leer ist.
‫Also erstelle ich hier einfach eine leere Liste.
‫Wie so.
‫Jetzt werden Zweifel aufkommen und jetzt haben wir diese leere Liste, lassen Sie sie uns erneut ausführen und sehen, ob unser
‫Programm noch funktioniert.
‫Und jetzt bekommen wir immer noch unser Argument außerhalb des zulässigen Bereichs, das ist also ziemlich cool.
‫Es scheint also, dass die Ausnahme, die wir hier erstellt haben, sogar dieses Problem behebt.
‫Wir müssen also nicht manuell nachsehen, wie die Liste aussieht, obwohl sie leer ist.
‫Rechts.
‫Wenn Sie sich also unsere Freundesliste ansehen, ist unsere Freundesliste leer, aber am Ende erhalten wir eine Zählung von
‫Null.
‫Auch wenn die Liste null ist, ist die Liste immer noch null.
‫Der Wert, den wir dort erhalten, ist also immer noch Null.
‫Aber das ist nicht alles, was wir jetzt wirklich können.
‫Anstatt Frankreich mit Frankreich zu analysieren, was diese leere Liste ist, können wir hier tatsächlich null übergeben.
‫Nehmen wir an, wir konnten diese Liste aus irgendeinem Grund nicht erstellen, weil die Datenbankverbindung nicht funktionierte oder
‫so.
‫Und als Ergebnis steigen wir ein.
‫Und jetzt gehen wir jetzt weiter und versuchen, jetzt in eine Methode überzugehen, die tatsächlich eine Liste erfordert.
‫Lassen Sie uns es also ausführen und sehen, welche Art von Fehler wir diesmal erhalten.
‫Jetzt erhalten wir also eine Nullreferenz, eine Ausnahme, eine Objektreferenz, die nicht auf eine Instanz einer Objektliste gesetzt wurde,
‫war null.
‫Die Liste, die wir jetzt bestanden haben, war also jetzt.
‫Wir erhalten diesen Fehler, noch bevor wir einen Fehler auslösen können.
‫Was wir natürlich tun könnten, ist, diese Situation auch zu erfassen, also könnten wir weitermachen
‫und eine weitere if-Anweisung schreiben.
‫Wenn list null ist, lösen Sie eine weitere Zeigerausnahme aus.
‫Auslösen einer neuen Argument-null-Ausnahme.
‫Also Liste auf.
‫Die Liste ist leer, gut, natürlich kann es hier etwas aussagekräftiger sein, und daher sollte die Liste nicht
‫leer sein.
‫Bitte überprüfen Sie die Internetverbindung oder ähnliches.
‫Es kann die Internetverbindung sein oder woher Sie Ihre Daten beziehen.
‫OK.
‫Lassen Sie es uns also noch einmal ausführen, und wir sollten unser Argument null Exception werfen, wie
‫Sie sehen, die Liste ist leer Parameterliste perfekt.
‫Gut.
‫Jetzt fragen Sie sich vielleicht, warum wir das alles tun?
‫Ich möchte nicht, dass mein Programm ständig abstürzt.
‫Nun, wir tun dies, damit unser Programm nicht in den Zustand gelangt, in dem es tatsächlich etwas in der Datenbank
‫ändern würde.
‫Wir ändern nichts an der Datenbank und unserem kleinen Programm.
‫Aber stellen Sie sich vor, es wäre dann so.
‫Es ist eine ganz andere Situation und wir können hier einige ernsthafte Probleme verursachen.
‫Jetzt möchte ich Ihnen noch eine letzte Sache zeigen, denn bevor wir all dies richtig hatten,
‫also bevor wir diese if-Anweisung und diese und jene und so weiter hatten und bevor wir diese Freundesliste hatten.
‫Ja, ich könnte tatsächlich aufhören, bevor wir diese Freunde hier hatten und wir dort Freunde überholten, und dann versuchen wir, 10 Freunde auf
‫unserer Party zu haben, aber wir haben nur sieben Freunde.
‫In dieser Situation können wir, sobald wir ausgeführt haben, diesen Fehler erzwingen, den wir hatten und der Fehler in
‫unserem Get-Party-Freund war.
‫OK, also bekommen wir dieses Argument außerhalb des zulässigen Bereichs.
‫Ausnahmeindex war außer Reichweite.
‫Das ist also ein Problem, das wir hatten, bevor wir es behoben haben.
‫Rechts.
‫Aber das Interessante, was wir uns jetzt ansehen können, ist der Call-Stack.
‫Es gibt also etwas namens Call-Stack.
‫Und lassen Sie es mich hier eigentlich etwas größer machen.
‫Ich meine, mach alle dicht.
‫Sehen wir uns nun diese Aufrufliste an.
‫Diese Aufrufliste hier sagt, dass wir uns derzeit in der Reihe 46 befinden.
‫Gut.
‫Das ist, wo wir sind.
‫Also müssen wir eine andere Methode bekommen.
‫Wenn wir nun einen Schritt höher gehen, können wir sehen, dass hier die Methode zum Abrufen der Partyfront aufgerufen wurde.
‫Jetzt sind wir innerhalb der Methode "Partyfreunde Plural erhalten".
‫Und was wir wissen wollen, wo diese Methode genannt wurde.
‫Nun, es wurde in Zeile 13 aufgerufen.
‫Mit der Aufrufliste können wir also sehen, von wo aus wir aufgerufen wurden, von wo aus wir wieder aufgerufen wurden und so
‫weiter.
‫So können wir bis zu dem Niveau aufsteigen, auf dem wir wollen.
‫Die anfängliche Methode wurde aufgerufen und die anfängliche Methode bestand darin, Partyfreunde zu bekommen wurde aufgerufen.
‫Dann gehen wir in diese while-Schleife, dann wird get get party friend aufgerufen und wir kommen hier in diese Methode.
‫Und schließlich wird unsere Variable basierend auf einer leeren Liste erstellt.
‫OK, alles klar.
‫Ich hoffe, dies gab Ihnen eine kleine Einführung in das Debugging.
‫Natürlich gibt es noch viel mehr zu wissen, aber ich möchte Sie nicht mit allen
‫Details langweilen, denn einiges ist nützlich.
‫Aber viele von ihnen werden in Ihrem täglichen Leben nicht benötigt, denn im Allgemeinen können Sie natürlich
‫zum Debug gehen und dann alle verschiedenen Fenster ausprobieren, die Sie hier bekommen können, und Sie
‫können Schauen Sie sich die parallel laufenden Bedrohungen, die Prozesse usw. an.
‫Aber ich denke, was Sie jetzt sehen, werden wirklich die wichtigsten Dinge sein oder werden die wichtigsten Dinge sein,
‫die Sie benötigen werden, die wichtigsten Tools, die Sie benötigen, um Ihre Software
‫zu debuggen.
‫Gut.
‫Ich hoffe, es hat Ihnen gefallen und ich hoffe, Sie können dies in Ihren zukünftigen Programmen verwenden.
‫Und jetzt können Sie endlich sehen, wie das Debugging gelöst wird.
‫Und übrigens, vielen Dank für dieses Feedback, denn ich habe das Feedback bekommen, dass ein Debug-Abschnitt fehlt, also habe
‫ich mich entschieden, diesen kleinen Abschnitt zu erstellen.
‫Also vielen Dank für die Rückmeldung.
‫Wenn Sie etwas haben, das Ihrer Meinung nach in diesem Kurs fehlt oder Sie meinen, dass etwas sehr schlecht
‫ist, geben Sie mir bitte nicht direkt eine schlechte Bewertung.
‫Aber lassen Sie mich wissen, was es ist, damit ich den Kurs verbessern kann, denn mein Ziel ist es, diesen natürlich am besten
‫auf dem Markt zu nutzen.
‫Also vielen Dank für Ihre Hilfe und hoffen, Sie im nächsten Video zu sehen.