SourceMonitor

SourceMonitor es una aplicación freeware que examina el codigo fuente de nuestros proyectos y calcula distintas metricas acerca la complejidad que encuentra. Una caracteristica muy interesante es la posibilidad de tomar ’snapshots’ de los valores arrojados por las metricas para poder compararlos a lo largo de tiempo . Soporta Java, C, C++ y unos cuantos lenguajes más

Muy util para saber en que momento hay que empezar a refactorear.

Scripting en Java

En Java es posible interpretar virtualmente cualquier lenguaje de scripting utilizando una API bastante simple introducida  a partir de la versión 1.6  por obra de la JSR223. Estos lenguajes se incorporan en nuestros proyectos como simples Jars que luego son descubiertos por un ScriptEngineManager que los regentea.

JSE6 incorpora out-of-the-box el engine Rhino asi que tenemos la posibilidad de ejecutar código JavaScript en nuestras aplicaciónes haciendo poco y nada.

 ScriptEngineManager scm = new ScriptEngineManager();
ScriptEngine jsEngine = scm.getEngineByName("JavaScript");

Uhm… listo! estamos listos para interpretar javascript. Por un proceso de discovering (siguiendo la linea de los *Manager de Java) el ScriptEngineManager sabe que hacer cuando le pedimos un Engine de “JavaScript” y nos devuelve una instancia de ScriptEngine.

String script = "var sum = 0; var obj = new Array(1,1,2,3,5,13);"
+ "for each (var item in obj) { sum += item; }"
+ "print(sum);";
jsEngine.eval(script); // 25

el metodo eval del ScriptEngine interpreta el String que le pasamos como parametro y en la consola terminariamos con un “25″. However, el scripting en Java es mucho más inteligente, el metodo eval devuelve un Object que contiene el valor del ultimo statement del script. El mapeo del valor que ‘retorna’ el script contra los tipos de datos de Java es especifico del Engine por lo que nos vamos a encontrar con comportamientos diferentes segun el lenguaje (y el engine) que interpretemos.

 String script = "var sum = 0; var obj = new Array(1,1,2,3,5,13);"
+ "for each (var item in obj) { sum += item; }"
+ "sum;";
Double d = (Double) jsEngine.eval(script);
 System.out.println( d +1 ); //26!!!

Con esta feature de JSE6 es inevitable pensar en dar un paso más en la parametrización de nuestros sistemas  ya no solo parametrizando valores y constantes sino también la logica de determinados procesos a traves de scripts simples en JS, Phyton, Ruby, Groovy, Jaskell o lo que sea. Otra ventaja en el uso de de esta API esta en incorporar lenguajes que nos eliminan el ciclo de code-compile-deploy-test pero sin alejarnos de la plataforma Java.

Entradas y comentarios feeds. 13 queries. 0.294 seconds.

60921 pages viewed, 16 today
29270 visits, 11 today
FireStats icon Powered by FireStats