<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Bloques estáticos en AS3</title>
	<atom:link href="http://www.joangarnet.com/blog/?feed=rss2&#038;p=669" rel="self" type="application/rss+xml" />
	<link>http://www.joangarnet.com/blog/?p=669</link>
	<description>Blog acerca de arquitectura y desarrollo de software</description>
	<lastBuildDate>Sun, 05 Sep 2010 13:31:50 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Joan Garnet</title>
		<link>http://www.joangarnet.com/blog/?p=669&#038;cpage=1#comment-1480</link>
		<dc:creator>Joan Garnet</dc:creator>
		<pubDate>Tue, 11 Aug 2009 07:26:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.joangarnet.com/blog/?p=669#comment-1480</guid>
		<description>Hola Xavi,
los Mixins me parecen una muy buena alternativa a los bloques estáticos dentro del marco de Flex porque en este caso te aseguras de que la ejecución se realiza *siempre* en un punto muy temprano de instanciación del framework. En el caso de los bloques estáticos es cuando la clase es realmente cargada en la AVM, lo cual puede suceder en cualquier momento y no necesariamente al iniciarse la aplicación...

Por otro lado, llámame freak si quieres, pero me gusta que pongas el ejemplo de los namespaces porque precisamente hice algo parecido en un ejemplo de un post anteior tratando los espacios de nombres: &lt;a href=&quot;http://www.joangarnet.com/blog/?p=428#toc-pseudo-sobrecarga-de-metodos&quot; rel=&quot;nofollow&quot;&gt;http://www.joangarnet.com/blog/?p=428#toc-pseudo-sobrecarga-de-metodos&lt;/a&gt; pero esta vez mostrando un ejemplo de pseudo sobrecarga de métodos.

Sé que el ejemplo aquí propuesto no es ni mucho menos el más apropiado... pero es que en realidad no se me ocurren demasiados casos de uso para esta rareza sintáctica que son los bloques estáticos XD

Gracias por el aporte ;)</description>
		<content:encoded><![CDATA[<p>Hola Xavi,<br />
los Mixins me parecen una muy buena alternativa a los bloques estáticos dentro del marco de Flex porque en este caso te aseguras de que la ejecución se realiza *siempre* en un punto muy temprano de instanciación del framework. En el caso de los bloques estáticos es cuando la clase es realmente cargada en la AVM, lo cual puede suceder en cualquier momento y no necesariamente al iniciarse la aplicación&#8230;</p>
<p>Por otro lado, llámame freak si quieres, pero me gusta que pongas el ejemplo de los namespaces porque precisamente hice algo parecido en un ejemplo de un post anteior tratando los espacios de nombres: <a href="http://www.joangarnet.com/blog/?p=428#toc-pseudo-sobrecarga-de-metodos" rel="nofollow">http://www.joangarnet.com/blog/?p=428#toc-pseudo-sobrecarga-de-metodos</a> pero esta vez mostrando un ejemplo de pseudo sobrecarga de métodos.</p>
<p>Sé que el ejemplo aquí propuesto no es ni mucho menos el más apropiado&#8230; pero es que en realidad no se me ocurren demasiados casos de uso para esta rareza sintáctica que son los bloques estáticos XD</p>
<p>Gracias por el aporte ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Xavi Beumala</title>
		<link>http://www.joangarnet.com/blog/?p=669&#038;cpage=1#comment-1479</link>
		<dc:creator>Xavi Beumala</dc:creator>
		<pubDate>Tue, 11 Aug 2009 05:18:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.joangarnet.com/blog/?p=669#comment-1479</guid>
		<description>Buenas Joan,

el ejemplo es muy didactico!! :-) Pero creo que es bueno añadir alguna puntualización importante.

Como bien comentas los bloques estáticos se ejecutan al cargar la definición de una clase en el AVM. El hacer un uso indevido  de estos bloques puede relantizar su inicialización.

Si las clase es una clase que se carga dentro de una aplicación Flex yo personalmente optaria por la utilizacion de [Mixin]. Basicamente al marcar una clase como Mixin tendremos que implementar un metodo estatico public static init ( sm : ISystemManager). Este metodo sera invocado durante el ciclo de instanciacion de la aplicacion desde SystemManager. Este es el mecanismo para inicializar las implementaciones para las clases de automatizacion o accesibilidad en la SDK.

Por otro lado cabe destacar que los bloques estaticos son bloques interpretados en tiempo de ejecucion y no en tiempo de compilacion. En el ejemplo del post yo quizas optaria por compilacion condicional o el uso de un contenedor IoC que inyectara la instancia apropiada. De esta forma ahorrariamos el linkar clases innecesarias en el swf resultante.

Yo usaria los bloques estaticos para inicializar propiedades estaticas. Y la pregunta es... Cual es la diferencia entre 

public static var myVar : String = &quot;hola&quot;;

y 

public static var myVar : String;

{
	myVar = &quot;hola&quot;;
}

En esta caso ninguna diferencia, pero las variables se ejecutan antes que el bloque estatico. Esto lleva a que los bloques estaticos pueden utilizarse para inicializar variables mas complejas que hagan uso de las otras variables:

public static const VAL1 : String = &quot;val1&quot;;
public static const VAL2 : String = &quot;val2&quot;;
public static const map : Object = new Object();

{
	map[ VAL1 ] = new MyClass();
	map[ VAL2 ] = new MyClass();
}

Volviendo al ejemplo del post. Habria otra forma bastante freak de conseguir el mismo efecto que consistiria en el uso de namespaces. Podrias definir todos los metodos en distintos namespaces en la misma clase:

package
{
	public class TestClass
	{
		private namespace air_ns;
		private namespace flex_ns;
		
		private var currentNS: Namespace = air_ns;
		
		public function guardar(): void{
			currentNS::guardar();
		}
		
		public function borrar() : void {
			currentNS::borrar();
		}
		
		air_ns function guardar():void
		{
			trace(&quot;air guardar&quot;);
		}
		
		air_ns function borrar():void
		{
			trace(&quot;air borrar&quot;) 
		}
		
		flex_ns function guardar():void
		{
			trace(&quot;flex guardar&quot;);
		}
		
		flex_ns function borrar():void
		{
			trace(&quot;flex borrar&quot;);
		}

	}
}

para usarlo:

var tc : TestClass = new TestClass();
tc.guardar();

donde podrias inicializar de forma estatica currentNS con la logica que quisieras. El uso de namespaces aporta una forma sencilla para desarrollar polimorficamente. En este caso todas las implementaciones quedarian linkadas en el swf final (aumentando su tamaño)</description>
		<content:encoded><![CDATA[<p>Buenas Joan,</p>
<p>el ejemplo es muy didactico!! :-) Pero creo que es bueno añadir alguna puntualización importante.</p>
<p>Como bien comentas los bloques estáticos se ejecutan al cargar la definición de una clase en el AVM. El hacer un uso indevido  de estos bloques puede relantizar su inicialización.</p>
<p>Si las clase es una clase que se carga dentro de una aplicación Flex yo personalmente optaria por la utilizacion de [Mixin]. Basicamente al marcar una clase como Mixin tendremos que implementar un metodo estatico public static init ( sm : ISystemManager). Este metodo sera invocado durante el ciclo de instanciacion de la aplicacion desde SystemManager. Este es el mecanismo para inicializar las implementaciones para las clases de automatizacion o accesibilidad en la SDK.</p>
<p>Por otro lado cabe destacar que los bloques estaticos son bloques interpretados en tiempo de ejecucion y no en tiempo de compilacion. En el ejemplo del post yo quizas optaria por compilacion condicional o el uso de un contenedor IoC que inyectara la instancia apropiada. De esta forma ahorrariamos el linkar clases innecesarias en el swf resultante.</p>
<p>Yo usaria los bloques estaticos para inicializar propiedades estaticas. Y la pregunta es&#8230; Cual es la diferencia entre </p>
<p>public static var myVar : String = &#8220;hola&#8221;;</p>
<p>y </p>
<p>public static var myVar : String;</p>
<p>{<br />
	myVar = &#8220;hola&#8221;;<br />
}</p>
<p>En esta caso ninguna diferencia, pero las variables se ejecutan antes que el bloque estatico. Esto lleva a que los bloques estaticos pueden utilizarse para inicializar variables mas complejas que hagan uso de las otras variables:</p>
<p>public static const VAL1 : String = &#8220;val1&#8243;;<br />
public static const VAL2 : String = &#8220;val2&#8243;;<br />
public static const map : Object = new Object();</p>
<p>{<br />
	map[ VAL1 ] = new MyClass();<br />
	map[ VAL2 ] = new MyClass();<br />
}</p>
<p>Volviendo al ejemplo del post. Habria otra forma bastante freak de conseguir el mismo efecto que consistiria en el uso de namespaces. Podrias definir todos los metodos en distintos namespaces en la misma clase:</p>
<p>package<br />
{<br />
	public class TestClass<br />
	{<br />
		private namespace air_ns;<br />
		private namespace flex_ns;</p>
<p>		private var currentNS: Namespace = air_ns;</p>
<p>		public function guardar(): void{<br />
			currentNS::guardar();<br />
		}</p>
<p>		public function borrar() : void {<br />
			currentNS::borrar();<br />
		}</p>
<p>		air_ns function guardar():void<br />
		{<br />
			trace(&#8220;air guardar&#8221;);<br />
		}</p>
<p>		air_ns function borrar():void<br />
		{<br />
			trace(&#8220;air borrar&#8221;)<br />
		}</p>
<p>		flex_ns function guardar():void<br />
		{<br />
			trace(&#8220;flex guardar&#8221;);<br />
		}</p>
<p>		flex_ns function borrar():void<br />
		{<br />
			trace(&#8220;flex borrar&#8221;);<br />
		}</p>
<p>	}<br />
}</p>
<p>para usarlo:</p>
<p>var tc : TestClass = new TestClass();<br />
tc.guardar();</p>
<p>donde podrias inicializar de forma estatica currentNS con la logica que quisieras. El uso de namespaces aporta una forma sencilla para desarrollar polimorficamente. En este caso todas las implementaciones quedarian linkadas en el swf final (aumentando su tamaño)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: zguillez</title>
		<link>http://www.joangarnet.com/blog/?p=669&#038;cpage=1#comment-1478</link>
		<dc:creator>zguillez</dc:creator>
		<pubDate>Tue, 11 Aug 2009 01:12:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.joangarnet.com/blog/?p=669#comment-1478</guid>
		<description>Muy interesante ;)
Los conocía pero nunca me he visto en la necesidad de utilizarlos.
Saludetes</description>
		<content:encoded><![CDATA[<p>Muy interesante ;)<br />
Los conocía pero nunca me he visto en la necesidad de utilizarlos.<br />
Saludetes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andres</title>
		<link>http://www.joangarnet.com/blog/?p=669&#038;cpage=1#comment-1477</link>
		<dc:creator>Andres</dc:creator>
		<pubDate>Mon, 10 Aug 2009 22:45:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.joangarnet.com/blog/?p=669#comment-1477</guid>
		<description>Hola Joan. Muy bueno lo de los bloques estáticos, realmente no sabía que existían. 
De seguro que hoy mismo le encuentro utilidad en mis codigos.

Muchas gracias por compartir el tip.

Saludos!</description>
		<content:encoded><![CDATA[<p>Hola Joan. Muy bueno lo de los bloques estáticos, realmente no sabía que existían.<br />
De seguro que hoy mismo le encuentro utilidad en mis codigos.</p>
<p>Muchas gracias por compartir el tip.</p>
<p>Saludos!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
