Our Country Sites: Argentina|Brazil|Chile|Mexico|Peru

Buenas Practicas J2ME (I)

Versão para impressãoVersão para impressãoSend by emailSend by email

Buenos dias,

En este nuevo post, quiero compartir un comentario sobre buenas practicas que podriamos utilizar para mejorar el procesamiento en los equipos móviles principalmente y en general para cualquier lenguaje.

Un error que varios de nosotros cometemos al momento de programar es el instanciar una variable u objeto dentro de un bucle(for,while,do-while) y quizás cuando hacemos esto en una pagina Web no hay mucha relevancia sin embargo cuando nos trasladamos a la parte móvil esto viene a ser algo critico ya que los equipos móviles en general tienen sus limitaciones, Principalmente la de procesamiento y Capacidad de la Memoria.

El ejemplo que les pongo es muy básico, pero nos ayuda a ver una situación típica cuando programamos.

Ejemplo:

* No sugerible:

Objeto[] input = Objeto.getArray();
for (int i=0; i < input.length;i++)
{
   Bean p = new Bean(input[i]);
   System.out.println(p.getAtributo());
}

Explicación:
Cada vez que se crea el objeto "Bean" se crea llena una dirección de memoria con ese objeto al cual no se va a utilizar en ninguna otra parte de la aplicacion. Esto causaria perdida de memoria disponible y el Garbage Collector(GC) trabaja mas de la cuenta y si tenemos en cuenta que el GC es como si tuvieramos un hilo mas procesando...entonces el rendimiento de la aplicacion tiene una baja.

* Lo mas adecuado:

Objeto[] input = Objeto.getArray();
Bean p = new Bean();
for (int i=0; i < input.length;i++)
{
   p.setAtributo(input[i]);
   System.out.println(p.getAtributo());
}

Explicación:
De esta forma sólo se crea una sola direccion de memoria y aliviamos la tarea al GC y evitamos los errores como "Out of Memory".

Espero que les ayude estas sugerencias.
Cualquier duda,consulta o comentario serán bienvenidos.

Saludos,

EP

Excelente observación

Un error comun en nuevos desarrolladores o aquellos que no tienen experiencia con OO.

Totalmente de acuerdo. Estas

Totalmente de acuerdo. Estas buenas practicas son utiles no solamente cuando programamos en J2ME, sino en cualquier implementacion en general. Los potentes servidores pueden soportar una carga de mejor manera que un equipo movil, que tiene los recursos limitados.

Otra buena practica es no concatenar varios String directamente. A continuacion un antiejemplo, no hacer esto por favor:
String cadenapesima = "";
cadenapesima = cadenapesima + "Nombre : " + beanusuario.getNombre();
Cada vez que sumo cadenas, se crean cadenas temporales parciales que cuentan cada una como un objeto mas en memoria, que tarde o temprano van a ser reciclados por el Garbage Colector, pero ocupan espacio de memoria que puede ser crítico en un determinado momento del procesamiento.

En lugar de ello, es mejor usar un StringBuffer.
StringBuffer cadenaoptima = new StringBuffer();
cadenaoptima.append("Nombre : ").append(beanusuario.getNombre());

Otra practica

Omar, es importante lo que estas diciendo y adicional a tu comentario tengo otra buena practica, que va mas por el lado del tipo de variable.

Por ejemplo:
En un bean con los siguientes atributos:

-int codCliente;
-String nomCliente;
-boolean estado;
-String dirCliente;

Cuando asignamos al atributo "nomCliente" o "dirCliente" un String es porque va a ocupar un espacio de memoria mayor que el entero, por eso si sabemos que el atributo "codCliente" va a ser Sólo numerico deberia ser un entero(int) ya que si lo declaramos como "String" estamos ocupando mas espacio en la memoria de lo que en realidad vamos a utilizar. Lo mismo pasa con los "boolean"" entre otros tipos de variable. Y vuelvo a repetir, esto es importante cuando programamos en moviles ya que cada espacio de memoria es importante, porque hace mas eficiente nuestro codigo y el procesamiento de la informacion tambien.

Saludos,

EP

Hay una practica que mas bien

Hay una practica que mas bien es un nemotecnico que usan algunas personas, que es añadir al nombre de la variable un prefijo que te recuerde que tipo de dato es. Por ejemplo:
- int iCodCliente;
- String sNomCliente;
- boolean bEstado;
- String sDirCliente;
En caso de booleanos, cuyo contenido es verdadero o falso, tambien se estila poner el prefijo 'is'.
- boolean isAdministrador = false;
No es una buena practica, pero es algo que algunos programadores usan, sobre todo cuando tienen muchas variables con diferentes tipos de dato.

Sugerencia

Una buena practica adicional es un "IF" simplificado:

String lsValor = bean.codigo == null ? "" : bean.codigo;

Explicacion:

Si el bean.codigo es nullo, entonces setea a esa variable un vacio, de lo contrario; sigue conservando el valor de esa variable.

Ayuda mucho cuando se quiere simplificar codigo.

Saludos,

EP

Hum, difiero un poco contigo,

Hum, difiero un poco contigo, estimado epineda. El codigo que incluyes, ayuda a ingresar menos lineas de codigo:
String lsValor = bean.codigo == null ? "" : bean.codigo;
Pero en lugar de minimizar el numero de lineas de codigo, personalmente prefiero explayarme mas, pero que el codigo sea mas claro para un tercero que va a revisar codigo ajeno:
String lsValor = bean.codigo;
if( lsValor == null )
{
lsValor = "";
}

que diferencia hace

si yo pongo:
String lsValor = bean.codigo
if(bean.codigo== null)
bean.codigo="";
es mala practica?

No es mala practica. En

No es mala practica. En algunas ocaciones algun valor llega como NULL, y debemos poner codigo para poder controlar el NullPointerException. Naturalmente, mucho mejor es averiguar de donde viene el NULL y tratar de manejarlo una capa antes.