Felhantering i ActionScript 3.0

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Eftersom många program kan köras utan någon logik för att hantera fel är det många utvecklare som försöker skjuta upp felhanteringen i sina program. Men utan någon form av felhantering är det lätt att programmet hänger sig eller att användaren blir frustrerad över att programmet inte fungerar som det ska. I ActionScript 2.0 finns en Error-klass som du kan använda för att skapa egna logiska funktioner så att ett specifikt meddelande ges när något oväntat inträffar. Eftersom felhantering är en viktig del av ett användarvänligt program, innehåller ActionScript 3.0 en utökad arkitektur för att fånga upp eventuella fel.

Obs! I Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen beskrivs undantag som genereras av många metoder, men alla möjliga undantag för alla metoder finns kanske inte med. En metod kan generera ett undantag vid syntaxfel eller något annat problem som inte uttryckligen beskrivs i metodbeskrivningen, även om beskrivningen listar några av de undantag som metoden kan generera.

Felhanteringselement i ActionScript 3.0

I ActionScript 3.0 finns många verktyg för felhantering, bland annat:

  • Felklasser. ActionScript 3.0 innehåller en mängd Error-klasser som täcker in fler situationer som kan generera felobjekt. Varje felklass används i programmet för att hantera och besvara specifika felförhållanden, oberoende av om de är relaterade till systemfel (som ett MemoryError-villkor), kodningsfel (som ett ArgumentError-villkor), nätverks- eller kommunikationsfel (som ett URIError-villkor) eller andra situationer. Mer information om varje klass finns i Jämföra felklasserna.

  • Färre tysta fel. I tidigare versioner av Flash Player genererades och rapporterades fel bara när du använde programsatsen throw. I Flash Player 9 och senare, genererar interna ActionScript-metoder och -egenskaper körningsfel. Dessa fel gör det möjligt att hantera undantagen mer effektivt när de inträffar, i stället för att agera på varje undantag individuellt.

  • Tydliga felmeddelanden visas under felsökningen. När du använder felsökningsversionen av en Flash-miljö genererar problematiska kodavsnitt eller situationer tydliga felmeddelanden, som hjälper dig att identifiera orsaken till varför ett visst kodblock inte fungerar. Tack vare dessa meddelanden kan du åtgärda felen mer effektivt. Du hittar mer information i Arbeta med felsökningsversioner av Flash-miljöer.

  • Exakta fel innebär tydligare felmeddelanden för användaren. I tidigare versioner av Flash Player returnerade metoden FileReference.upload() det booleska värdet false om upload()-anropet inte lyckades. Detta visade att det fanns fem möjliga fel. Om ett fel inträffar när du anropar metoden upload() i ActionScript 3.0, kan fyra olika fel hjälpa dig att visa mer exakta felmeddelanden för slutanvändarna.

  • Förfinad felhantering. Distinkta fel erhålls för många vanliga situationer. I ActionScript 2.0 hade exempelvis egenskapen name värdet null innan ett FileReference-objekt fylldes i med värden (vilket innebar att du, innan du kunde använda eller visa egenskapen name, var tvungen att se till att ett värde angavs, och inte null). Om du i ActionScript 3.0 försöker få åtkomst till egenskapen name innan den har ett värde, kommer felet IllegalOperationError att levereras från Flash Player eller AIR, vilket anger att värdet inte är angivet och måste du sedan använda try..catch..finally-blocken för att hantera felet. Mer information finns i Använda try..catch..finally-satser.

  • Inga märkbara prestandaförsämringar. När du använder try..catch..finally-blocken för felhantering kommer små eller inga ytterligare resurser att tas i anspråk om du jämför med tidigare versioner av ActionScript.

  • Du använder en ErrorEvent-klass för att bygga upp avlyssnare för specifika asynkrona felhändelser. Mer information finns i Svara på felhändelser och status.

Strategier för felhantering

Så länge inga fel uppstår i programmet kan det fortsätta att fungera utan att du bygger in någon logik för felhantering i koden. Om du emellertid väljer att inte aktivt hantera fel och ett problem uppstår, kommer användarna aldrig att förstå varför programmet inte gör som det är tänkt.

Det finns olika sätt att närma sig felhanteringsproblematiken i programmet. Här nedan sammanfattas de tre vanligaste sätten att hantera fel:

  • Använda try..catch..finally-satser. Dessa satser fångar upp synkrona fel när de inträffar. Du kan kapsla programsatserna i en hierarkisk struktur för att fånga upp undantagen på olika nivåer när koden körs. Mer information finns i Använda try..catch..finally-satser.

  • Skapa egna felobjekt. Du kan använda klassen Error för att skapa egna felobjekt för att spåra operationer i programmet som inte täcks av de byggda feltyperna. Sedan kan du använda try..catch..finally-satser i egna felobjekt. Mer information finns i Skapa egna felklasser.

  • Skriva händelseavlyssnare och hanterare för att besvara felhändelser. Om du väljer den här strategin kan du skapa en global felhantering där liknande händelser hanteras utan att du behöver duplicera en massa kod i try..catch..finally-block. Det troligaste är att du med det här sättet att arbeta kommer att fånga upp asynkrona fel. Mer information finns i Svara på felhändelser och status.