Novedades Java SE 7: ‘Strings’ en sentencias ‘Switch’

¡Por fin! Ha hecho falta llegar hasta la séptima versión de Java (Java SE 7) pero finalmente ya tenemos aquí esta ‘ansiada’ característica.

Actualmente son muchos los lenguajes que incluyen esta funcionalidad o simplemente ya nacieron con ella, aun así, más vale tarde que nunca.

Vamos a imaginar un ejemplo sencillo, una pequeña función que nos devuelve un valor numérico en función de un color.

En Java SE 6 podríamos hacer algo parecido a esto:

public class StringSwitchTest {

	public static int getColorNumber(String color) {

		int out = 0;

		if (color == null) {
			return out;
		}

		if (color.equalsIgnoreCase("rojo")) {
			out = 1;
		}
		else if (color.equalsIgnoreCase("amarillo")) {
			out = 2;
		}
		else if (color.equalsIgnoreCase("verde")) {
			out = 3;
		}

		return out;
	}

	public static void main(String[] args) {

		String color = "verde";
		int colorNumber =
			StringSwitchTest.getColorNumber(color);

		System.out.print("Color->'" +
			color + "' y Valor->'" + colorNumber + "'.");

	}
}

Ahora en cambio, en Java SE 7, podremos hacer lo mismo mediante el uso de ‘Strings’ en un ‘switch’:

public class StringSwitchTest {

	public static int getColorNumberWithSwitch(String color) {

		int out = 0;

		if (color == null) {
			return out;
		}

		switch (color.toLowerCase()) {
			case "rojo":
				out = 1;
				break;

			case "amarillo":
				out = 2;
				break;

			case "verde":
				out = 3;
				break;

			default:
				out = 0;
				break;
		}

		return out;
	}

	public static void main(String[] args) {

		String color = "verde";
		int colorNumber =
			StringSwitchTest.getColorNumberWithSwitch(color);

		System.out.print("Color->'" +
			color + "' y Valor->'" + colorNumber + "'.");

	}
}

Cosas a tener en cuenta:

  1. Las comparaciones dentro del ‘switch’ se llevan a cabo mediante el método ‘equals’ correspondiente, de ahí a que en el segundo ejemplo se invoque al método ‘toLowerCase’ antes de realizar la comparación para evitar problemas de mayúsculas y minúsculas.
  2. Conviene comprobar a priori la existencia de valores ‘null’, de lo contrario, obtendríamos una preciosa excepción de tipo ‘NullPointerException’ al intentar realizar la comparación, un clásico.

Al final, el uso de la sentencia ‘switch’ frente al ‘if – else’ puede convertirse en una mera cuestión de legibilidad de código, siempre me ha parecido más elegante el empleo del primero cuando se acumulan muchas condiciones, otro tema a tener en cuenta sería la complejidad ciclomática, algo que trataré en futuras entradas.

3 comentarios en “Novedades Java SE 7: ‘Strings’ en sentencias ‘Switch’

  1. Muy interesante! Te iré leyendo, Oscar!!!

  2. Genial Ros! Te añado a favoritos. Dale caña!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s