Developing Frogtek

El blog del Departamento de Tecnología

Aquí huele a cuco (IV)

Bueno, un poco de autocrítica nunca viene mal y en este caso yo soy uno de los culpables de este desaguisado….

public int getVendorsCount() {
	if (this.mDm.openDBConnection()) {
		this.mDbHelper = new VendorsDbAdapter();
		Cursor cursor = this.mDbHelper.getVendorsCount();
		if (cursor != null) {
			cursor.close();
			return cursor.getCount();
		}
		this.mDm.closeDBConnection();
	}
	return 0;
}

Fijaos bien: estamos intentando acceder a un cursor después de cerrarlo….. además solo cerramos la base de datos si el cursor es null… vamos, una joya de código. Gracias a que tenemos test funcionales en Android hemos encontrado semejante esperpento. Ya vamos recuperando poco a poco lo invertido en ellos 🙂 .

Así he dejado el código después del pertinente refactor.

public int getVendorsCount() {
	int vendorsCount = 0;
	if (this.mDm.openDBConnection()) {
		this.mDbHelper = new VendorsDbAdapter();
		Cursor cursor = this.mDbHelper.getVendorsCount();
		if (cursor != null) {
			vendorsCount = cursor.getCount();
			cursor.close();
		}
		this.mDm.closeDBConnection();
	}
	return vendorsCount;
}

¿Bastante mejor no? ¿Alguna sugerencia para mejorarlo todavía más?

2 Comentarios

  1. Se puede mejorar diferenciando (si por el contexto es importante saberlo) cuando el valor obtenido al llamar a la función es realmente cero o si la función nos devuelve cero por un problema. Simplemente se puede solucionar inicializando la variable con algun valor inválido, por ejemplo -1:

    int vendorsCount = -1;

  2. Julio García

    17 enero, 2011 at 12:54

    Toda la razón le Funes, muchas gracias. Ahora compruebo que se espera de la función y me aseguro de que no nos pasamos por alto el caso que comentas.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

*