Me estoy releyendo y parezco más ********** de lo normal :P
A ver, en java hay
switch (numero){
case 0: loquesea(); break;
case 1: otracosa(); break;
default: nothing(); break;
}
internamente comparan el numero con los valores de las etiquetas "case X:", que ya ha indexado el compilador, asi que las encuentra en O(1). Las etiquetas no son código, son como anotaciones específicas para esa línea, luego se puede hacer goto para llegar a ellas. Si ignoras las etiquetas (ya que no son código) lo que tienes es un bloque de código, todo lo que está entre {}, que se va a ejecutar secuencialmente, y como no quieres que cuando encuentre 0 haga también el case 1 por ser la línea de debajo tienes que poner el break para que se salga del bloque.
En otros lenguajes te dejan hacer switches con mas tipos, como cadenas o tipos multiples
Rust
Código:
match number {
// Match a single value
1 => println!("One!"),
// Match several values
2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
// Match an inclusive range
13...19 => println!("A teen"),
// Handle the rest of cases
_ => println!("Ain't special"),
}
o
Código:
let tup = (4, 5.0);
match x {
(x,y) if x > y => { println("Decreasing"); }
(x,y) if y > x => { println("Increasing"); }
_ => { println("Equal")}
}
o incluso sólo encontrar partes o si son de un tipo concreto
Código:
let tup = (4, "sacapuntas");
match tup {
(0, true) => println("Success"),
(_, true) => println("Pyrrhic victory"), // Any first value matches
(_, _) => println("Complete loss") // Any pair of values will match
}
La mayoría de estas cosas las deja preparaditas el compilador asi que cuando llega el código no tiene que hacer mucho esfuerzo, y en cómo de bueno es el rendimiento casos de ejemplo como éste, que además se parece a la pregunta original:
http://www.cjqed.com/blog/rust-patte...g-performance/
Marcadores