Ver la versión completa : Switch de Strings en Java 1.7! :D
Me acabo de enterar, desde Java 1.7 se puede hacer un Switch guarro de Strings, no solo de Integers :D :D :D.
Si, es una gilipollez, pero ahora el código quedara más limpio. La de castillacos de ifs mal hechos que se podrán quitar gracias a esto :rolleyes:.
:brindis::brindis:
Nathrezim
23/12/2011, 10:02
Bieeen, lástima que solo se pueda usar en las aplicaciones que se desarrollen nuevas, migrar a 1.7 una aplicación tiene que ser un dolor considerable.
SilentSei
23/12/2011, 10:04
Era algo que clamaba al cielo...aunque yo no suelo usar apenas el switch XD, pero claro, eso puede ser porque estaba supeditado a int.
Bieeen, lástima que solo se pueda usar en las aplicaciones que se desarrollen nuevas, migrar a 1.7 una aplicación tiene que ser un dolor considerable.
Habría que ver que más cambios hay... pero vamos que en el proyecto que yo estoy se va a seguir con la 1.6 para evitar movidas.
Era algo que clamaba al cielo...aunque yo no suelo usar apenas el switch XD, pero claro, eso puede ser porque estaba supeditado a int.
Esta guay el Switch, es muy limpito jeje, yo siempre que podía lo usaba (sobre todo en menus y cosas así o intentando usar tipos de datos numéricos).
:brindis::brindis:
Nathrezim
23/12/2011, 10:41
Esta guay el Switch, es muy limpito jeje, yo siempre que podía lo usaba (sobre todo en menus y cosas así o intentando usar tipos de datos numéricos).
Psss siempre quedaba usarlo con enumerados o constantes... pero quien se ponía a picar código para envolverlos XD
^MiSaTo^
23/12/2011, 11:44
Yo para ese tipo de cosas siempre he usado enum :P
Realmente tampoco veo mucha mucha más claridad entre:
switch(string) {
case "hola":
orden();
break;
case "adios":
orden();
break;
case "joputa":
teden();
break();
default:
teden_porsiacaso();
}
y:
if (string.equals("hola")) {
orden();
}
else if (string.equals("adios")) {
orden();
}
else if (string.equals("joputa")) {
teden();
}
else {
teden_porsiacaso();
}
Incluso el switch tiene una linea más xDDDD
Realmente tampoco veo mucha mucha más claridad entre:
switch(string) {
case "hola":
orden();
break;
case "adios":
orden();
break;
case "joputa":
teden();
break();
default:
teden_porsiacaso();
}
y:
if (string.equals("hola")) {
orden();
}
else if (string.equals("adios")) {
orden();
}
else if (string.equals("joputa")) {
teden();
}
else {
teden_porsiacaso();
}
Incluso el switch tiene una linea más xDDDD
Jue, pues yo el switch lo veo muchisimo mas claro :D. Como en un churro de ifs te metan una doble condición y no te des cuenta ya te han jodido, con los switch no te lo van a hacer nunca. De un vistazo yo creo que se ve mejor :D.
Misato, iep para eso son ;)
:brindis::brindis:
loixartx
23/12/2011, 13:26
Realmente tampoco veo mucha mucha más claridad entre:
...
Incluso el switch tiene una linea más xDDDD
El tema de cual está más claro es subjetivo, lo que sí es objetivo, es que en terminos de eficiencia, el switch es más rápido ya que no tiene que hacer todas las comparaciones que hace el if-esle.
Por otro lado, sale una línea más, pero ¿has contado con cual escribes más caracteres? [wei4]
Nathrezim
23/12/2011, 14:35
El tema de cual está más claro es subjetivo, lo que sí es objetivo, es que en terminos de eficiencia, el switch es más rápido ya que no tiene que hacer todas las comparaciones que hace el if-esle.
Meh, eso en tiempo, para el manejo de variables locales dentro del bloque de la condición es mejor el if, solo estan vigentes hasta que acaba el if. Para el switch hay que ponerlas por fuera.
El tema de cual está más claro es subjetivo, lo que sí es objetivo, es que en terminos de eficiencia, el switch es más rápido ya que no tiene que hacer todas las comparaciones que hace el if-esle.
Por otro lado, sale una línea más, pero ¿has contado con cual escribes más caracteres? [wei4]
Lo de la longitud era coña obviamente, y como ves hablaba de claridad, no de eficiencia.
De todas maneras, no tiene porqué ser más eficiente, por ejemplo: Si esto fuera C, y fueran números y no strings, se podria traducir a ensamblador con comparaciones y saltos condicionales.
La traducción sería similar con el switch que con los ifs, ya que seria algo como
; (ensamblador genérico inventado)
cmp1:
CMP R1, 25 ; 25 es un valor con el que comparar la variable en R1
JPE eq25 ; salta a eq25 si son iguales
cmp2:
CMP R1, 32
JPE eq32
...
eq25:
; igual a 25, hacer algo...
...
eq32:
; igual a 32, hacer otra cosa....
...
Con strings sería algo parecido pero llamando a una subrutina que las compare, y devuelva si o no en un registro que podriamos comparar...
En Java esto debería ser similar, el bytecode al final no deja de ser como un ensamblador, asi que la compilación dejará algo parecido en las dos estructuras.
De hecho, en C un switch si es muy grande se traduce en una Jump Table, que es mas eficiente.
Tambien, en lo de java, mejor hacer constante.equals(objeto) asi es mas rapido y ademas si el objeto es null no peta xD
Meh, eso en tiempo, para el manejo de variables locales dentro del bloque de la condición es mejor el if, solo estan vigentes hasta que acaba el if. Para el switch hay que ponerlas por fuera.
puedes abrir un nuevo bloque:
switch( var )
{
case VALUE_1:
{ int a;
...
} break;
case VALUE_2:
break;
}
pffff que cagada, seguro que los que implementan el java vieron en la lista de TODO esta aberracion hace un par de versiones y lo fueron postergando hasta que desgraciadamente han tenido que añadirla. Yo le veo tres problemas.
1: Si escribes un string del case en plan "lisdexico" no dara error de compilacion, despues te pegaras varias horas hasta que te des cuenta de que el string es distinto.
2: ocupa mas memoria
3: es mas lento
Lo importante es el punto 1, los otros dos teniendo en cuenta la memoria y procesador que tiene cualquier cacharro de ahora pues da igual.
Es una mejora al lenguaje, pero yo lo usaría lo menos posible. Porque las cadenas en Java son objetos y las comparaciones son lentas (encima son 2 bytes por caracter).
Lo importante es el punto 1, los otros dos teniendo en cuenta la memoria y procesador que tiene cualquier cacharro de ahora pues da igual.
Pero un día esto llegará a Android y verás que risa...
*****, y es noticia!, maredios, que retraso!
El tema de cual está más claro es subjetivo, lo que sí es objetivo, es que en terminos de eficiencia, el switch es más rápido ya que no tiene que hacer todas las comparaciones que hace el if-esle.
Por otro lado, sale una línea más, pero ¿has contado con cual escribes más caracteres? [wei4]
El java se compila. No tengo creo que a día de hoy los compiladores modernos no tengan en cuenta los castillos de if-else-if. Además, traduce un switch a ensamblador y me dirás que es más eficaz.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.