ActionScript: Is there ever a good reason to use 'as' casting?

actionscript-3

Solution

You need to use `as` to cast in two scenarios: casting to a `Date`, and casting to an `Array`.

For dates, a call to `Date(xxx)` behaves the same as new `Date().toString()`.

For arrays, a call to `Array(xxx)` will create an `Array` with one element: xxx.

The `Class()` casting method has been shown to be faster than `as` casting, so it may be preferable to `as` when efficiency matters (and when not working with Dates and Arrays).

import flash.utils.*;

var d = Date( 1 );

trace( "'" + d, "'is type of: ",getQualifiedClassName( d ) );

var a:Array = Array( d );

trace( "'" + a, "' is type of: ", getQualifiedClassName( a ) );

    //OUTPUT
        //'Mon Jun 15 12:12:14 GMT-0400 2009 'is type of:  String
        //'Mon Jun 15 12:12:14 GMT-0400 2009 ' is type of:  Array

    //COMPILER ERRORS/WARNINGS:
        //Warning: 3575: Date(x) behaves the same as new Date().toString(). 
        //To cast a value to type Date use "x as Date" instead of Date(x).
        //Warning: 1112: Array(x) behaves the same as new Array(x).
        //To cast a value to type Array use the expression x as Array instead of Array(x).

`

Problem

From what I understand of ActionScript, there are two kinds of casts: ``` var bar0:Bar = someObj as Bar; // "as" casting var bar1:Bar = Bar(someObj); // "class name" casting (for want of a better name) ``` Also, and please correct me if I'm wrong here, `as` casting will either return an instance of the class or `null`, while "class name" casting will either return an instance of the class or raise an exception if the cast is impossible – other than this, they are identical. Given this, though, `as` casting seems to be a massive violation of the fail-fast-fail-early principle... And I'm having trouble imagining a situation where it would be preferable to use an `as` cast rather than a class name cast (with, possibly, an `instanceof` thrown in there). So, my question is: under what circumstances would it be preferable to use `as` casting?

Original source