2011-05-16 15 views
8

Hay varias preguntas sobre StackOverflow que discuten la cuestión de cuándo se debe usar una declaración de afirmación frente a arrojar alguna excepción. (Ejemplos here, here, here, here y here.Cuándo usar afirmar en el cliente y código común de GWT

Sin embargo, he llegado a sospechar que la sabiduría convencional de afirmar tiro-contra-se basa en la suposición de que se está ejecutando dentro de una JVM. En el GWT universo, donde su Java se transcribe a JavaScript y se ejecuta en el contexto de un navegador, el conjunto de compensaciones se siente diferente: las afirmaciones siempre se compilan cuando se ejecuta en un navegador, y todo lo que mantiene el tamaño de su JavaScript más pequeño es una victoria , especialmente si su aplicación web debe ejecutarse en un teléfono móvil. Las afirmaciones sí se ejecutan en DevMode, sin embargo, para que tengan utilidad allí durante el desarrollo.

So m y las preguntas son: ¿Alguien ha pensado en un conjunto de reglas de mejores prácticas que gobiernan cómo usar la declaración de afirmación en GWT? He tenido miembros de mi equipo que me preguntan "ya que la afirmación se compila, ¿tiene sentido tenerlos?", Y me gustaría tener una buena respuesta para ellos.

Además, ¿alguien tiene alguna idea de la filosofía que los desarrolladores de GWT en Google tienen sobre este tema? Al mirar el código fuente de GWT, parecen usarlo con frecuencia.

Respuesta

14

de FAQ Google dice

Utilice únicamente afirmaciones para fines de depuración, no la lógica de producción debido a las afirmaciones sólo funcionará en el modo de desarrollo de GWT. De forma predeterminada, el compilador de GWT los compila, por lo que no tienen ningún efecto en el modo de producción a menos que los habilite explícitamente.

Esto no es diferente de las respuestas a las preguntas que enlazó. Ya sea que el código Java esté siendo compilado de la manera habitual por javac o compilado a JavaScript por GWT, "afirmar" significa "si esto no es cierto, tengo un error". Por el contrario, el código de la forma

if (condition) throw new Exception(msg); 

significa "si esto es cierto, entonces tenemos una situación inesperada que el programa tendrá que manejar."

En cuanto a los miembros del equipo que no ven el punto de afirmar, explique que se supone que tienen un conjunto de pruebas unitarias que se ejecutan con aserciones habilitadas. Si las pruebas tienen una buena cobertura de código y ninguna de ellas hace que falle la aserción, se demuestra que se mantiene la suposición indicada por la declaración de aserción.

+0

El enlace a "Preguntas frecuentes" en realidad enlaza a esta pregunta. ¿Tienes la verdadera referencia? – pohl

+0

Se corrigió el enlace. Gracias por la respuesta. – gatkin

4

El compilador GWT los elimina de forma predeterminada, pero puede dejarlos si lo desea. Si cree que las aserciones son útiles en el código compilado, agregue el argumento de línea de comando -ea al invocar com.google.gwt.dev.Compiler. El compilador convertirá las afirmaciones de Java en JavaScript.

Google Web Toolkit 2.3.0 
    Compiler [-logLevel level] [-workDir dir] [-gen dir] [-style style] [-ea] [-XdisableClassMetadata] [-XdisableCastChecking] [-validateOnly] [-draftCompile] [-optimize level] [-compileReport] [-strict] [-localWorkers count] [-war dir] [-deploy dir] [-extra dir] module[s] 

    ... 
     -ea Debugging: causes the compiled output to check assert statements 
Cuestiones relacionadas