[Flashcoders] Why does this work?!

2007-04-17 Thread Andy Herrman

I just realized that there are a number of switch statements in my
code which probably shouldn't work, yet appear to, and I'm wondering
why.

Here's a really simple example.  I have a class that tracks the
connection state of my app, with the following values used as the
states (read-only attributes simulating constants):

 public static function get CONNECTED():String { return CONNECTED; }
 public static function get FAILURE():String { return FAILURE; }
 public static function get NOT_CONNECTED():String { return NOT_CONNECTED; }

In the code that lets you set the state to a particular value it does
a sanity check to make sure the state value is one that's expected
(since in theory the user could provide any string value):

 public function setConnectionState(cs:String):Void {
   switch(cs) {
 case ConnectionState.CONNECTED:
 case ConnectionState.FAILURE:
 case ConnectionState.NOT_CONNECTED:
   break;
 default:
   cs = ConnectionState.NOT_CONNECTED;
   break;
   }
   this._connectionState = cs;
 }

Now in Java switch statements must use constants for the case values.
You can do something like I just did, but the variables being
referenced must be declared final (so the compiler knows they won't
change).  There isn't any equivalent to this in Flash (I simulate
constants by doing read only properties), so why does the case
statement work?  Does flash actually execute the stuff after the
'case' keyword?  What happens if multiple of those things return the
same value (for instance, say both CONNECTED and FAILURE returned
foo)?

  -Andy
___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] Why does this work?!

2007-04-17 Thread Hans Wichman

Hi,
what were your own test results? :)

Yes you can do this, and flash will execute the first matching case
statement. Any other matches will be ignored.

greetz
JC


On 4/17/07, Andy Herrman [EMAIL PROTECTED] wrote:


I just realized that there are a number of switch statements in my
code which probably shouldn't work, yet appear to, and I'm wondering
why.

Here's a really simple example.  I have a class that tracks the
connection state of my app, with the following values used as the
states (read-only attributes simulating constants):

public static function get CONNECTED():String { return CONNECTED; }
public static function get FAILURE():String { return FAILURE; }
public static function get NOT_CONNECTED():String { return
NOT_CONNECTED; }

In the code that lets you set the state to a particular value it does
a sanity check to make sure the state value is one that's expected
(since in theory the user could provide any string value):

public function setConnectionState(cs:String):Void {
   switch(cs) {
 case ConnectionState.CONNECTED:
 case ConnectionState.FAILURE:
 case ConnectionState.NOT_CONNECTED:
   break;
 default:
   cs = ConnectionState.NOT_CONNECTED;
   break;
   }
   this._connectionState = cs;
}

Now in Java switch statements must use constants for the case values.
You can do something like I just did, but the variables being
referenced must be declared final (so the compiler knows they won't
change).  There isn't any equivalent to this in Flash (I simulate
constants by doing read only properties), so why does the case
statement work?  Does flash actually execute the stuff after the
'case' keyword?  What happens if multiple of those things return the
same value (for instance, say both CONNECTED and FAILURE returned
foo)?

  -Andy
___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] Why does this work?!

2007-04-17 Thread eka

Hello :)

in AS2 you can create constants with the ASSetProgFlags global method :

public static var CONNECTED:String =  CONNECTED ;
public static var FAILURE:String= FAILURE ;
public static var NOT_CONNECTED:String = NOT_CONNECTED;

private static var __ASPF__ = _global.ASSetPropFlags( ConnectionState ,
null , 7, 7 ) ;

ConnectionState is the name of your enumeration static class :)

For me.. your code is ok :

public function setConnectionState(cs:String):Void
{
switch(cs)
{
 case ConnectionState.CONNECTED :
 case ConnectionState.FAILURE :
 {
 break;
 }

 default :
 {
  cs = ConnectionState.NOT_CONNECTED ;
 }
  }
  this._connectionState = cs ;
}

EKA+ :)


2007/4/17, Andy Herrman [EMAIL PROTECTED]:


I just realized that there are a number of switch statements in my
code which probably shouldn't work, yet appear to, and I'm wondering
why.

Here's a really simple example.  I have a class that tracks the
connection state of my app, with the following values used as the
states (read-only attributes simulating constants):

  public static function get CONNECTED():String { return CONNECTED; }
  public static function get FAILURE():String { return FAILURE; }
  public static function get NOT_CONNECTED():String { return
NOT_CONNECTED; }

In the code that lets you set the state to a particular value it does
a sanity check to make sure the state value is one that's expected
(since in theory the user could provide any string value):

  public function setConnectionState(cs:String):Void {
switch(cs) {
  case ConnectionState.CONNECTED:
  case ConnectionState.FAILURE:
  case ConnectionState.NOT_CONNECTED:
break;
  default:
cs = ConnectionState.NOT_CONNECTED;
break;
}
this._connectionState = cs;
  }

Now in Java switch statements must use constants for the case values.
You can do something like I just did, but the variables being
referenced must be declared final (so the compiler knows they won't
change).  There isn't any equivalent to this in Flash (I simulate
constants by doing read only properties), so why does the case
statement work?  Does flash actually execute the stuff after the
'case' keyword?  What happens if multiple of those things return the
same value (for instance, say both CONNECTED and FAILURE returned
foo)?

   -Andy
___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] Why does this work?!

2007-04-17 Thread Andy Herrman

Oh, the code is OK, and it works.  I'm just surprised Flash lets you
have case statements with non-constant values.  Since the case values
are actually functions that are evaluated it's possible that you can
have multiple case statements of the same value.  I'm not used to
languages/compilers allowing those situations.

  -Andy

On 4/17/07, eka [EMAIL PROTECTED] wrote:

Hello :)

in AS2 you can create constants with the ASSetProgFlags global method :

 public static var CONNECTED:String =  CONNECTED ;
 public static var FAILURE:String= FAILURE ;
 public static var NOT_CONNECTED:String = NOT_CONNECTED;

 private static var __ASPF__ = _global.ASSetPropFlags( ConnectionState ,
null , 7, 7 ) ;

ConnectionState is the name of your enumeration static class :)

For me.. your code is ok :

public function setConnectionState(cs:String):Void
{
 switch(cs)
 {
  case ConnectionState.CONNECTED :
  case ConnectionState.FAILURE :
  {
  break;
  }

  default :
  {
   cs = ConnectionState.NOT_CONNECTED ;
  }
   }
   this._connectionState = cs ;
 }

EKA+ :)


2007/4/17, Andy Herrman [EMAIL PROTECTED]:

 I just realized that there are a number of switch statements in my
 code which probably shouldn't work, yet appear to, and I'm wondering
 why.

 Here's a really simple example.  I have a class that tracks the
 connection state of my app, with the following values used as the
 states (read-only attributes simulating constants):

   public static function get CONNECTED():String { return CONNECTED; }
   public static function get FAILURE():String { return FAILURE; }
   public static function get NOT_CONNECTED():String { return
 NOT_CONNECTED; }

 In the code that lets you set the state to a particular value it does
 a sanity check to make sure the state value is one that's expected
 (since in theory the user could provide any string value):

   public function setConnectionState(cs:String):Void {
 switch(cs) {
   case ConnectionState.CONNECTED:
   case ConnectionState.FAILURE:
   case ConnectionState.NOT_CONNECTED:
 break;
   default:
 cs = ConnectionState.NOT_CONNECTED;
 break;
 }
 this._connectionState = cs;
   }

 Now in Java switch statements must use constants for the case values.
 You can do something like I just did, but the variables being
 referenced must be declared final (so the compiler knows they won't
 change).  There isn't any equivalent to this in Flash (I simulate
 constants by doing read only properties), so why does the case
 statement work?  Does flash actually execute the stuff after the
 'case' keyword?  What happens if multiple of those things return the
 same value (for instance, say both CONNECTED and FAILURE returned
 foo)?

-Andy
 ___
 Flashcoders@chattyfig.figleaf.com
 To change your subscription options or search the archive:
 http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

 Brought to you by Fig Leaf Software
 Premier Authorized Adobe Consulting and Training
 http://www.figleaf.com
 http://training.figleaf.com

___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] Why does this work?!

2007-04-17 Thread Andy Herrman

Oh, it works correctly, assuming I'm not dumb and give a couple
constants the same values.  It just seems strange for this to be
allowed.  Thus the question why does this work.  I would think it
shouldn't even compile.

 -Andy

On 4/17/07, Hans Wichman [EMAIL PROTECTED] wrote:

Hi,
what were your own test results? :)

Yes you can do this, and flash will execute the first matching case
statement. Any other matches will be ignored.

greetz
JC


On 4/17/07, Andy Herrman [EMAIL PROTECTED] wrote:

 I just realized that there are a number of switch statements in my
 code which probably shouldn't work, yet appear to, and I'm wondering
 why.

 Here's a really simple example.  I have a class that tracks the
 connection state of my app, with the following values used as the
 states (read-only attributes simulating constants):

 public static function get CONNECTED():String { return CONNECTED; }
 public static function get FAILURE():String { return FAILURE; }
 public static function get NOT_CONNECTED():String { return
 NOT_CONNECTED; }

 In the code that lets you set the state to a particular value it does
 a sanity check to make sure the state value is one that's expected
 (since in theory the user could provide any string value):

 public function setConnectionState(cs:String):Void {
switch(cs) {
  case ConnectionState.CONNECTED:
  case ConnectionState.FAILURE:
  case ConnectionState.NOT_CONNECTED:
break;
  default:
cs = ConnectionState.NOT_CONNECTED;
break;
}
this._connectionState = cs;
 }

 Now in Java switch statements must use constants for the case values.
 You can do something like I just did, but the variables being
 referenced must be declared final (so the compiler knows they won't
 change).  There isn't any equivalent to this in Flash (I simulate
 constants by doing read only properties), so why does the case
 statement work?  Does flash actually execute the stuff after the
 'case' keyword?  What happens if multiple of those things return the
 same value (for instance, say both CONNECTED and FAILURE returned
 foo)?

   -Andy
 ___
 Flashcoders@chattyfig.figleaf.com
 To change your subscription options or search the archive:
 http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

 Brought to you by Fig Leaf Software
 Premier Authorized Adobe Consulting and Training
 http://www.figleaf.com
 http://training.figleaf.com

___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


[Flashcoders] Why does this work in Flash 6 Actionscript 2 but not Flash 7 Actionscript 2 ...

2006-12-11 Thread Stephen Ford
Why does the following work when published as Flash 6 Actionscript 2, but not 
Flash 7 actionscript 2 (or Flash 8 Actionscript 2).var nInt:Number;var 
oMain:Object = {};var nCounter:Number;var sClipName:String;var 
nClipDepth:Number;function spawnClip():Void{var mcTemp:MovieClip = 
this.attachMovie(mcCircle, mcCircle+nCounter, nCounter, oMain);
mcTemp._x = Math.random()*600;mcTemp._y = Math.random()*400;
nCounter++;}nInt = setInterval(this, spawnClip, 
500);Thanks,Stephen.___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] Why does this work in Flash 6 Actionscript 2 but not Flash 7 Actionscript 2 ...

2006-12-11 Thread Jake Prime

Hi Stephen,

You are incrementing nCounter without ever initializing it. In Flash 6
and earlier if you incremented an undefined value it treated it as 0,
but in Flash 7 and later it remains undefined. Set nCounter to 0 first
and all should be well.

Jake

On 11/12/06, Stephen Ford [EMAIL PROTECTED] wrote:

Why does the following work when published as Flash 6 Actionscript 2, but not Flash 7 actionscript 2 (or 
Flash 8 Actionscript 2).var nInt:Number;var oMain:Object = {};var nCounter:Number;var sClipName:String;var 
nClipDepth:Number;function spawnClip():Void{var mcTemp:MovieClip = this.attachMovie(mcCircle, 
mcCircle+nCounter, nCounter, oMain);mcTemp._x = Math.random()*600;mcTemp._y = 
Math.random()*400;nCounter++;}nInt = setInterval(this, spawnClip, 
500);Thanks,Stephen.___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


RE: [Flashcoders] Why does this work in Flash 6 Actionscript 2 butnot Flash 7 Actionscript 2 ...

2006-12-11 Thread Steven Sacks | BLITZ
  Why does the following work when published as Flash 6 
 Actionscript 2, but not Flash 7 actionscript 2 (or Flash 8 
 Actionscript 2).var nInt:Number;var oMain:Object = {};var 
 nCounter:Number;var sClipName:String;var 
 nClipDepth:Number;function spawnClip():Void{var 
 mcTemp:MovieClip = this.attachMovie(mcCircle, 
 mcCircle+nCounter, nCounter, oMain);mcTemp._x = 
 Math.random()*600;mcTemp._y = Math.random()*400;
 nCounter++;}nInt = setInterval(this, spawnClip, 
 500);


Posting code without carriage returns makes baby Jesus cry.
___
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com