Foutafhandeling in ActionScript 3.0

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Omdat veel toepassingen kunnen draaien zonder logica voor de afhandeling van fouten, zijn ontwikkelaars geneigd om het inbouwen van foutafhandeling op de lange baan te schuiven. Maar een toepassing zonder foutafhandeling kan snel crashen of voor ergernis bij de gebruiker zorgen omdat iets niet werkt zoals verwacht. ActionScript 2.0 heeft een klasse van het type Error die het mogelijk maakt om logica toe te voegen aan aangepaste functies voor het genereren van uitzonderingenmet een bepaalde foutmelding. Omdat een correcte foutafhandeling cruciaal is voor een gebruiksvriendelijke toepassing, bevat ActionScript 3.0 een uitgebreide architectuur voor het afvangen van fouten.

Opmerking: Hoewel de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform beschrijvingen bevat over de uitzonderingen die door vele methoden worden gegenereerd, is het mogelijk dat niet alle uitzonderingen voor elke methode hierin zijn opgenomen. Ook al bevat de beschrijving informatie over enkele uitzonderingen die door de methode kunnen worden gegenereerd, kan een methode ook uitzonderingen genereren voor syntaxisfouten of andere problemen die niet uitdrukkelijk in de beschrijving van de methode staan vermeld.

Elementen van de foutafhandeling van ActionScript 3.0

ActionScript 3.0 bevat veel gereedschappen voor de afhandeling van fouten, waaronder:

  • Foutklassen. ActionScript 3.0 bevat een groot aantal Error-klassen om het bereik uit te breiden van situaties waardoor foutobjecten kunnen worden gegenereerd. Elke foutklasse helpt toepassingen bij het afhandelen van en reageren op specifieke foutomstandigheden in verband met systeemfouten (zoals bij een MemoryError), coderingsfouten (zoals bij een ArgumentError), netwerk- en communicatiefouten (zoals bij een URIError) en andere omstandigheden. Zie De foutklassen vergelijken voor meer informatie over elke klasse.

  • Minder onopgemerkte fouten. In eerdere versies van Flash Player werden fouten alleen gegenereerd en gemeld als u uitdrukkelijk de instructie throw gebruikte. Bij Flash Player 9 en hoger worden uitvoerfouten gegenereerd door native ActionScript-methoden en -eigenschappen. Door deze fouten kunt u uitzonderingen effectiever afhandelen op het moment dat deze zich voordoen. Vervolgens kunt u op elke uitzondering afzonderlijk reageren.

  • Duidelijke foutmeldingen tijdens het opsporen van fouten. Bij het gebruik van de foutopsporingsversie van Flash-runtime worden bij problematische code of omstandigheden duidelijke foutmeldingen gegenereerd. Aan de hand hiervan kunt u gemakkelijker terugvinden waarom een bepaald codeblok niet goed werkt. Door deze berichten verloopt het opsporen van fouten efficiënter. Zie Werken met de foutopsporingsversies van Flash runtime voor meer informatie.

  • Nauwkeurige fouten maken nauwkeurige foutmeldingen voor de gebruiker mogelijk tijdens de uitvoering. Bij eerdere versies van Flash Player retourneerde de methode FileReference.upload() een Booleaanse waarde false als het aanroepen van upload() mislukte. Dit wees dan op vijf mogelijke fouten. Als een fout optreedt bij het aanroepen van de methode upload() in ActionScript 3.0, kunt u aan de hand van vier specifieke fouten nauwkeurigere foutmeldingen voor de eindgebruikers laten weergeven.

  • Verfijnde foutafhandeling. Voor tal van veelvoorkomende situaties worden specifieke fouten gegenereerd. In ActionScript 2.0 heeft de eigenschap name bijvoorbeeld de waarde null voordat een FileReference-object is gevuld (dus voordat u de eigenschap name kunt gebruiken of weergeven, moet u ervoor zorgen dat de waarde is ingesteld en niet null is). Als u in ActionScript 3.0 probeert de eigenschap name te benaderen voordat die is gevuld, genereert Flash Player of AIR een IllegalOperationError, waarbij wordt gemeld dat de waarde niet is ingesteld. Vervolgens kunt u de fout afhandelen met blokken van het type try..catch..finally . Zie Instructies van het type try..catch..finally gebruiken voor meer informatie.

  • Geen significante nadelen voor de prestaties. Het gebruik van blokken van het type try..catch..finally voor de afhandeling van fouten vergt weinig of geen extra bronnen ten opzichte van eerdere versies van ActionScript.

  • De klasse ErrorEvent maakt het mogelijk om listeners te maken voor specifieke asynchrone foutgebeurtenissen. Zie Reageren op foutgebeurtenissen en een specifieke status voor meer informatie.

Strategieën voor de foutafhandeling

Ook als u geen logica voor de afhandeling van fouten aan uw code toevoegt, werkt uw toepassing normaal zolang er zich geen problemen voordoen. Maar als fouten niet actief worden afgehandeld en uw toepassing komt wel een probleem tegen, komen uw gebruikers nooit te weten waarom de toepassing het op dat specifieke moment niet meer doet.

U kunt de foutafhandeling in uw toepassing op verschillende manieren aanpakken. Hieronder staan de drie belangrijkste opties voor de foutafhandeling:

  • Gebruik instructies van het type try..catch..finally . Hiermee worden synchrone fouten afgevangen op het moment waarop ze zich voordoen. U kunt uw instructies nesten in een hiërarchie om uitzonderingen af te vangen op verschillende niveaus van de uitgevoerde code. Zie Instructies van het type try..catch..finally gebruiken voor meer informatie.

  • Maak uw eigen aangepaste foutobjecten. Met de klasse Error kunt u uw eigen aangepaste foutobjecten maken om specifieke bewerkingen in uw toepassing bij te houden waarvoor geen ingebouwde fouttypen beschikbaar zijn. Vervolgens kunt u de instructies try..catch..finally in uw aangepaste foutobjecten gebruiken. Zie Aangepaste foutklassen maken voor meer informatie.

  • Schrijf gebeurtenislisteners en -handlers om te reageren op foutgebeurtenissen. Aan de hand van deze strategie kunt u algemene fouthandlers maken waarmee u soortgelijke gebeurtenissen kunt afhandelen zonder dat u veel code hoeft te dupliceren in de blokken try..catch..finally . Op deze manier zult u ook sneller asynchrone fouten kunnen afvangen. Zie Reageren op foutgebeurtenissen en een specifieke status voor meer informatie.