lenguaje - Compilación condicionada Flash/Flex "else"
as3 rpdr (4)
En AS3 puede pasar una constante al compilador
-define+=CONFIG::DEBUG,true
Y úsalo para la compilación condicional de esta manera:
CONFIG::DEBUG {
trace("This only gets compiled when debug is true.");
}
Estoy buscando algo como #ifndef, así que puedo negar el valor de la depuración y usarlo para agregar código de liberación condicionalmente. La única solución que he encontrado hasta ahora estaba en la documentación de compilación condicional en adobe y dado que mis configuraciones de depuración y liberación son mutuamente excluyentes, no me gusta la idea de tener constantes DEBUG y RELEASE.
Además, este formato funciona, pero supongo que está ejecutando el control en tiempo de ejecución, que no es lo que quiero:
if (CONFIG::DEBUG) {
//debug stuff
}
else {
//release stuff
}
También consideré hacer algo como esto, pero todavía no es la solución elegante que esperaba:
-define+=CONFIG::DEBUG,true -define+=CONFIG::RELEASE,!CONFIG::DEBUG
Gracias por adelantado :)
Esto funciona bien y eliminará el código que no se ejecutará:
if (CONFIG::DEBUG) {
//debug stuff
}
else {
//release stuff
}
PERO esto se evaluará en tiempo de ejecución:
if (!CONFIG::DEBUG) {
//release stuff
}
else {
//debug stuff
}
mxmlc aparentemente solo puede evaluar un booleano literal, y no cualquier tipo de expresión, incluyendo un simple no .
Si bien la respuesta de Patrick cumple con los criterios de la pregunta, no cubre todos los casos de uso. Si se encuentra en un área de código que le permite usar una instrucción if / else, esta es una buena respuesta. Pero si estás en un lugar donde no puedes, entonces necesitarás una mejor solución. Por ejemplo, es posible que desee hacer algo como esto para declarar una constante en una clase:
private var server:String = "http://localhost/mystagingenvironment";
o para una versión en vivo:
private var server:String = "http://productionserver.com";
(Este es un ejemplo y no estoy abogando por esto como código de producción).
Utilizo xml configs y uso el archivo loadConfig + = "myconfig.xml" para hacer mi configuración en lugar de pasar un gran número de parámetros de línea de comandos. Entonces, en la sección <compiler>
de tu configuración xml:
<define>
<name>CONFIG::debug</name>
<value>false</value>
</define>
<define>
<name>CONFIG::release</name>
<value>!CONFIG::debug</value>
</define>
Esto funciona bien para todos los casos de uso:
CONFIG::debug
{
private var server:String = "http://localhost/mystagingenvironment";
}
CONFIG::release
{
private var server:String = "http://productionserver.com";
}
Esto tiene el beneficio adicional de trabajar de manera consistente en todas las aplicaciones. Tampoco depende de que la bandera ''optimize'' sea verdadera, como la respuesta de Patrick (aunque creo que podemos suponer que el 99.999999% de todos los swfs tienen optimize = true, solo lo configuro como falso cuando el optimizador rompe mi AS3).
Tiene el inconveniente de que no compila todas las rutas de código, solo las que están incluidas. Entonces, si no está utilizando un servidor de compilación para crear compilaciones de versiones y le dice cuándo se rompen las cosas, prepárese para los errores inesperados cuando realice la versión de lanzamiento ("¡Pero compilado en depuración! ¡Mierda, necesito que esto se lance ahora!" )
Solo mis dos centavos sobre la respuesta de Chris Hill (que es la solución que también uso regularmente): parece que usar la opción loadConfig + = "myconfig.xml" hace que el compilador busque el archivo myconfig.xml en el directorio de Flex SDK mientras que el - La opción load-config + = myconfig.xml lo hace buscar el archivo myconfig.xml en el directorio del proyecto, que es el comportamiento que prefiero mucho ya que puede distribuir fácilmente este archivo con las fuentes de su proyecto ...
Use el constructo if / else
: el compilador eliminará el código muerto y no se probará en el tiempo de ejecución. Solo tendrá una versión de su código en su swf.
Si no está seguro, use un descompilador o una herramienta de volcado para ver qué sucede realmente.
http://apparat.googlecode.com/files/dump.zip
...