‫Welkom terug en met deze video gaan we eindelijk de problemen oplossen die we hadden in
‫ons programma hier, ons virtuele programma dat we hebben gemaakt, en we gaan ook kijken naar defensieve programmering.
‫Het idee van defensief programmeren is dus om veilige code te maken die echt al nadenkt over welke problemen zich zouden kunnen voordoen, omdat in
‫dit geval de problemen die zich kunnen voordoen, bijvoorbeeld zijn dat de lijst leeg
‫is of dat we te veel vrienden willen hebben.
‫We willen dus meer vrienden uitnodigen dan we hebben.
‫En in dit geval is de lijst supereenvoudig die we handmatig hebben gemaakt.
‫Maar stel je voor dat het uit een database komt.
‫Dus het komt uit een database of het komt van het web, uit een clouddatabase of iets dergelijks.
‫En dan zou het een ander verhaal zijn, want we zouden nooit weten hoe groot de lijst in dit geval is.
‫We kunnen het in de code zien, maar we weten het misschien niet, afhankelijk van waar het vandaan komt.
‫In dit geval moeten we anticiperen op verschillende problemen die zich kunnen voordoen en kunnen we ze zelf testen bij
‫het ontwikkelen.
‫Dat hebben we bijvoorbeeld al gedaan toch?
‫We hebben meer vrienden ingevoerd die we in de lijst hebben.
‫Het is dus een simpele.
‫We voeren dit gewoon uit en dan krijgen we dit argument buiten bereik.
‫Maar waar we het krijgen, is interessant.
‫Dus we krijgen het op het punt van onze partijvriendenmethode, ook al ligt het probleem
‫ergens anders, want als we ernaar kijken, staat er Shorris-naamlijst nul.
‫We proberen dus toegang te krijgen tot een illegaal element dat niet beschikbaar is omdat we de lijst voorbij zijn.
‫Maak een feestvriend en we geven deze lijst hier door.
‫Dus als we kijken waar we deze lijst vandaan halen, zou dat een goed startpunt kunnen zijn, omdat we hier kunnen zien dat we proberen
‫toegang te krijgen tot iets dat niet beschikbaar is.
‫Dus wat is het probleem met wat beschikbaar wordt gesteld?
‫Dus we kunnen deze regel hier bekijken, een deel vooraan krijgen.
‫Zo heet het.
‫En we kunnen zien.
‫Oké, dat is de buffer.
‫Rechts?
‫Dus we krijgen een buffer, dat is deze lijst hier.
‫Dus wat we krijgen is een lijst van het hoogste niveau.
‫Dus nogmaals, we kunnen zien, oké, we krijgen deze lijst van zo-en-zo, zoveel mensen en dit is waar
‫we de waarde vandaan halen.
‫En goed, een goed punt om te controleren of de lijst goed is, is eigenlijk in de methode van arget party friends, want hier krijgen
‫we de lijst goed.
‫Dus op dit moment hebben we een lijst zodat we deze lijst kunnen controleren.
‫We kunnen zien of deze lijst goed genoeg is voor wat we willen doen.
‫En wat we willen doen, is iets schrijven op basis van het account van elementen
‫in die lijst, zodat we kunnen controleren of het aantal groter is dan het aantal punten in de lijst.
‫En dit is de lijst die aan ons is doorgegeven.
‫Dus als dat het geval is, kunnen we gewoon iets afdrukken, dat niet doen of een fout maken of iets
‫dergelijks.
‫Maar wat we nog beter kunnen doen, is dat we het programma Kresh kunnen maken.
‫We weten dus dat het programma een probleem heeft.
‫Maar tegelijkertijd stoppen we het uitvoeren van het programma in een heel vroeg stadium, want stel je voor dat we een verbinding hebben met een
‫database en nu maken we al deze verschillende fouten of we gaan gewoon door de code en deze methode, get
‫party friend draait en laten we zeggen dat het is verbonden met een database en iets in
‫de database schrijft en dan voeren we de code opnieuw uit.
‫En om de een of andere reden is de databasestatus veranderd en nu zijn we verbijsterd omdat de gegevens die
‫aan ons worden getoond complete onzin zijn en we ermee werken.
‫Dus het oplossen van die bug zou een echt probleem zijn.
‫Oke.
‫Dus we kunnen het al zo vroeg mogelijk opvangen, dus we kunnen hier eenvoudig een argument buiten bereik gooien.
‫Dus gooi nieuwe argumenten buiten het bereik van de uitzondering, want dat is wat we goed begrepen.
‫En een argument uit de Reagan-uitzondering heeft meervoudige overbelasting.
‫Dus we kunnen deze hier hebben met een Parum-naam.
‫We kunnen een bericht hebben en met uitzondering of een Perram-naam met een bericht.
‫Dus hier zou ik iets kunnen zeggen als, OK, het aantal is het probleem en het aantal kan niet groter zijn
‫dan elementen in de lijst of iets dergelijks.
‫OK, dus dat zou een voorbeeld zijn van wat we zouden kunnen laten zien.
‫Dus laten we het opnieuw uitvoeren, want nu zouden we in staat moeten zijn om deze fout daadwerkelijk op te vangen of op zijn minst een argument
‫buiten bereik te gooien zodra we deze fout krijgen.
‫Oke.
‫Dus we kunnen uitzonderlijk onverwerkt zien.
‫Het is een systeemargument buiten bereik.
‫Uitzondering kan niet groter zijn dan elementen in de lijst.
‫Aantal parameters.
‫Dat is dus het resultaat van wat we hier hebben geschreven.
‫OK, dus dit is hoe de uitzondering eruit zal zien.
‫Dus nu weten we wat het probleem is.
‫Het is wat expressiever net voordat het probleem er niet echt was.
‫Dus laat me die twee regels eruit becommentariëren.
‫Het probleem werd niet op dit punt gegooid, maar het werd verder naar beneden gegooid.
‫Het werd gegooid in onze get different-methode, dus het staat in regel 42, maar het eigenlijke probleem deed zich veel eerder
‫voor, toch.
‫En index was de uitzondering, maar het is ook een heel generieke verklaring, toch?
‫Het kan van alles zijn.
‫Rechts.
‫Dus als we het eerder opvangen, kunnen we zien waar de problemen zijn die we hebben.
‫Dus wat we natuurlijk zouden kunnen doen, is dat we kunnen zeggen, OK, als we deze waarde eenmaal hebben ingevoerd en
‫laten we zeggen dat deze waarde afkomstig is van een gebruiker die een waarde invoert.
‫Rechts.
‫U kunt dus elke waarde invoeren van nul tot het aantal lijstelementen dat we hebben.
‫Zodat we het nog eerder konden opvangen.
‫We zouden zelfs hier een test kunnen doen.
‫Dus als.
‫Vrienden, dat is de telling.
‫Minder dan de waarde die we hier invullen en we zouden deze waarde opnieuw kunnen krijgen van de gebruiker, dan zouden we hem een
‫bericht kunnen geven, toch?
‫We zouden onze uitzondering niet weggooien.
‫We zouden ons programma niet laten crashen.
‫We zouden de gebruiker gewoon vragen om opnieuw een nieuwe waarde in te voeren.
‫Maar we doen het hier niet omdat wij als programmeur de waarde hier kunnen invoeren en we forceren deze fouten
‫nu handmatig.
‫Rechts.
‫OK, dus dat is een manier om het op te lossen of eigenlijk een manier om het vroeg op te vangen.
‫Laten we zeggen.
‫We voeren hier een domme waarde in, zoals min één.
‫Oké, laten we het nu opnieuw doen.
‫Laten we het eigenlijk nog eens herhalen.
‫En ons programma lijkt te werken, maar het laat daar niets zien, dus het liet niets zien.
‫Arrows heeft geen fouten gegooid, maar hij laat geen vrienden zien.
‫Nou, ons programma lijkt te werken met min één omdat we proberen om min één lijstelementen uit
‫onze lijst te halen en het geeft ons geen waardevolle informatie.
‫Dus wat we nu natuurlijk kunnen doen, is dat we hier nog een voorwaarde kunnen toevoegen.
‫De telling moet zijn dat Krater gelijk is aan nul.
‫Als dat niet het geval is, kunnen we iets schrijven als code die niet groter kan zijn dan
‫de elementen in de lijst of lager nul.
‫Oké, dus dat is maar één manier om het uit te drukken.
‫En als we het nu opnieuw uitvoeren, zullen we deze fout veroorzaken.
‫OKE.
‫Dus dat is iets waar het programma eerder niet voorkwam, maar nu begrepen wij als ontwikkelaar, OK, dit is een
‫toestand die we niet willen hebben.
‫Dit is een situatie waar we niet mee willen werken, oké?
‫En zoals ik al zei, we zouden snijden terwijl we zouden proberen deze waarde ergens vandaan te halen en we zouden proberen
‫het zelfs daarvoor te vangen.
‫Laten we nu aannemen dat we een situatie hebben die nog grappiger is.
‫Dus we hebben een situatie waarin mijn vriendenlijst leeg is.
‫Dus ik ga hier gewoon een lege lijst maken.
‫Zoals zo.
‫Dit zal gaan twijfelen en nu we deze lege lijst hebben, laten we hem opnieuw uitvoeren en kijken of ons programma
‫nog steeds werkt.
‫En nu krijgen we ons argument nog steeds buiten bereik, dus dat is best cool.
‫Dus het lijkt erop dat de uitzondering die we hier hebben gemaakt, zelfs dit probleem oplost.
‫We hoeven dus niet handmatig te kijken hoe de lijst eruitziet, ook al is deze leeg.
‫Rechts.
‫Dus als je naar onze vriendenlijst kijkt, is onze vriendenlijst leeg, maar uiteindelijk krijgen we een telling van
‫nul.
‫Dus ook al is de lijst nul, de lijst is nog steeds nul.
‫Dus de waarde die we daar krijgen is nog steeds nul.
‫Maar dat is niet alles wat we kunnen voor een echt nu.
‫Dus in plaats van Frankrijk te parseren met Frankrijk, wat deze lege lijst is, kunnen we hier eigenlijk null doorgeven.
‫Dus laten we zeggen dat we om de een of andere reden deze lijst niet konden maken omdat de databaseverbinding niet werkte of
‫iets dergelijks.
‫En daardoor komen we binnen.
‫En nu gaan we nu voorbij en we proberen nu over te gaan naar een methode die eigenlijk een lijst vereist.
‫Dus laten we het uitvoeren en kijken wat voor soort fout we deze keer krijgen.
‫Dus nu krijgen we een null-referentie, uitzondering, objectreferentie, niet ingesteld op een instantie van een objectlijst
‫was null.
‫Dus de lijst die we nu passeerden was nu.
‫Dus we krijgen deze fout nog voordat we een fout kunnen genereren.
‫Dus wat we natuurlijk zouden kunnen doen, is dat we deze situatie ook kunnen opvangen, zodat we door kunnen
‫gaan en nog een if-statement kunnen schrijven.
‫Als lijst null is, gooi dan nog een pointer-uitzondering.
‫Gooi een nieuw argument null-uitzondering.
‫Dus lijst.
‫De lijst is leeg, oké, natuurlijk, het kan hier meer beschrijvend zijn, en dus mag de lijst niet
‫leeg zijn.
‫Controleer de internetverbinding of iets dergelijks.
‫Het kan de internetverbinding zijn of waar u uw gegevens ook vandaan haalt.
‫OKE.
‫Dus laten we het opnieuw uitvoeren, en we zouden ons argument null exception moeten gooien, zoals je
‫kunt zien, de lijst is leeg parameterlijst perfect.
‫Oke.
‫Nu vraag je je misschien af, waarom doen we dit allemaal?
‫Ik wil niet dat mijn programma de hele tijd crasht.
‫Welnu, we doen dit om ervoor te zorgen dat ons programma niet in de staat komt waarin het daadwerkelijk iets in de database
‫zou veranderen.
‫We veranderen niets aan de database en ons kleine programma.
‫Maar stel je voor dat het dan zo zou zijn.
‫Het is een heel andere situatie en we kunnen hier serieuze problemen veroorzaken.
‫Nu wil ik je nog een laatste ding laten zien, want voordat we dit allemaal
‫goed hadden, dus voordat we deze if-verklaring hadden en deze en die enzovoort, en voordat we deze vriendenlijst hadden.
‫Ja, ik zou eigenlijk kunnen stoppen voordat we deze vrienden hier hadden en we passeerden vrienden daar, en dan proberen we 10 vrienden
‫op ons feest te hebben, maar we hebben maar zeven vrienden.
‫Dus deze situatie, als we eenmaal rennen, kunnen we deze fout forceren die we hadden en de fout zat in onze
‫'get party friend'.
‫OK, dus we krijgen dit argument buiten bereik.
‫Uitzonderingsindex was buiten bereik.
‫Dus dat is een probleem dat we hadden voordat we het oplosten.
‫Rechts.
‫Maar nu is het interessante waar we naar kunnen kijken de call-stack.
‫Dus er is iets dat call-stack wordt genoemd.
‫En laat me het hier een beetje groter maken, eigenlijk.
‫Ik bedoel, sluit die allemaal af.
‫Laten we nu eens kijken naar deze call-stack.
‫Deze call-stack hier zegt dat we momenteel in rij zesenveertig zitten.
‫Oke.
‫Dat is waar we zijn.
‫Dus we moeten een andere methode krijgen.
‫Nu, als we een stap hoger gaan, kunnen we zien dat dit is waar de party front-methode werd genoemd.
‫Nu zitten we in de meervoudsmethode voor het krijgen van feestvrienden.
‫En wat we willen weten waar deze methode werd genoemd.
‫Nou, het werd gebeld in lijn 13.
‫Dus met de call-stack kunnen we zien van waar we werden gebeld, van waar we opnieuw werden gebeld, enzovoort.
‫Dus we kunnen helemaal omhoog gaan naar het niveau waarop we willen.
‫De eerste methode werd aangeroepen en de eerste methode was om feestvrienden te krijgen.
‫Dan gaan we naar deze while-lus, dan wordt get party friend genoemd en gaan we hier in op deze methode.
‫En tot slot wordt onze variabele gemaakt op basis van een lijst die leeg is.
‫Ja is goed.
‫Dus ik hoop dat dit je een kleine introductie heeft gegeven in het debuggen.
‫Natuurlijk is er nog veel meer te weten, maar ik wil u niet met alle details
‫vervelen omdat sommige dingen nuttig zijn.
‫Maar veel van hen zullen niet nodig zijn in uw dagelijkse leven, want ik bedoel, in het algemeen
‫kunt u natuurlijk doorgaan met debuggen en dan alle verschillende vensters bekijken die u hier kunt krijgen
‫en u kunt kijk naar de bedreigingen die parallel lopen, de processen, enzovoort.
‫Maar ik denk dat wat je nu ziet echt de belangrijkste dingen zullen zijn of de belangrijkste dingen zullen zijn
‫die je nodig hebt, de belangrijkste tools die je nodig hebt om je software
‫te debuggen.
‫Oke.
‫Dus ik hoop dat je dit leuk vond en ik hoop dat je hier gebruik van kunt maken in je toekomstige programma's.
‫En nu kun je eindelijk zien hoe debuggen is opgelost.
‫En trouwens, bedankt voor het geven van deze feedback, omdat ik de feedback kreeg dat er een foutopsporingssectie ontbrak,
‫dus besloot ik deze kleine sectie te maken.
‫Dus heel erg bedankt voor de feedback.
‫Als je iets hebt waarvan je denkt dat het mist in deze cursus of als je denkt dat iets
‫heel slecht is, geef me dan niet direct een slechte beoordeling.
‫Maar laat me weten wat het is, zodat ik de cursus kan verbeteren, want mijn doel is om hier natuurlijk het beste gebruik van
‫te maken op de markt.
‫Dus heel erg bedankt voor je hulp en hopelijk tot ziens in de volgende video.