switch case
Al igual que las instrucciones if, switch ... case controla el flujo del programa permitiendo que los programas especifiquen un código diferente que debe ser ejecutado en distintas condiciones. En particular, una sentencia switch compara el valor de una variable con los valores especificados en las instrucciones case. Cuando se encuentra una sentencia case cuyo valor coincide con el de la variable, el código de esa declaración case se ejecuta.
La palabra reservada break interrumpe la sentencia switch, y se usa normalmente al final de cada declaración case. Sin una declaración de interrupción, la sentencia switch continuará la ejecución de las siguientes expresiones hasta que se alcanza una interrupción o hasta el final de la sentencia switch.
switch (var)
{
case label1:
break;
case label2:
break;
default:
break;
}
var: la variable cuyo valor es comparado en los distintos case.
label1, label2: el valor a comparar con la variable
void setup() {
Serial.begin(9600);
Serial.println("====== TEST START ======");
for (int i = 0; i < 5; i++) {
switch (i) {
case 0:
Serial.print("Inside case 0: i = ");
Serial.println(i);
break;
case 1:
Serial.print("Inside case 1: i = ");
Serial.println(i);
break;
case 2:
Serial.print("Inside case 2: i = ");
Serial.println(i);
break;
default:
Serial.print("Inside default: i = ");
Serial.println(i);
break;
}
}
Serial.println("====== TEST END ========");
}
void loop() {
}
The result on Serial Monitor:
====== TEST START ======
Inside case 0: i = 0
Inside case 1: i = 1
Inside case 2: i = 2
Inside default: i = 3
Inside default: i = 4
====== TEST END ========
※ Nota:
if we does not use the break in a case, the next case will also be executed. The execution is stopped when it reaches a break. Let's comment or remove a break in the above example and see the result.
void setup() {
Serial.begin(9600);
Serial.println("====== TEST START ======");
for (int i = 0; i < 5; i++) {
switch (i) {
case 0:
Serial.print("Inside case 0: i = ");
Serial.println(i);
break;
case 1:
Serial.print("Inside case 1: i = ");
Serial.println(i);
case 2:
Serial.print("Inside case 2: i = ");
Serial.println(i);
break;
default:
Serial.print("Inside default: i = ");
Serial.println(i);
break;
}
}
Serial.println("====== TEST END ========");
}
void loop() {
}
The result on Serial Monitor:
====== TEST START ======
Inside case 0: i = 0
Inside case 1: i = 1
Inside case 2: i = 1
Inside case 2: i = 2
Inside default: i = 3
Inside default: i = 4
====== TEST END ========
As you can see, when i = 1, the code run through case 1 and case 2.
If we miss a break in a case by accident, it results in the wrong operation of the code. Why the language does not force to use break instead of optional? Let's see two advanced usages to know the reason why.
Let's see the below example:
void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) {
switch (i) {
case 0:
Serial.println("HELLO!");
break;
case 1:
Serial.println("ARDUINO");
break;
case 2:
Serial.println("ARDUINO");
break;
case 3:
Serial.println("ARDUINO");
break;
default:
Serial.println("ArduinoGetStarted.com");
break;
}
}
}
void loop() {
}
The result on Serial Monitor:
HELLO!
ARDUINO
ARDUINO
ARDUINO
ArduinoGetStarted.com
In the above code, you can see the case 1, 2 and 3 have the same code (do the same work). Let's remove all code in the case 1 and case 2:
void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) {
switch (i) {
case 0:
Serial.println("HELLO!");
break;
case 1:
case 2:
case 3:
Serial.println("ARDUINO");
break;
default:
Serial.println("ArduinoGetStarted.com");
break;
}
}
}
void loop() {
}
The result on Serial Monitor:
HELLO!
ARDUINO
ARDUINO
ARDUINO
ArduinoGetStarted.com
As you can see, the results of both example codes are the same. But the second example code are shorter. Furthermore, if you get familiar to the second example code, you will realize that the second code is more readable. That is the benefit of not using the break;
Let's see the below example:
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
switch (i) {
case 0:
Serial.println("Hello!");
break;
case 1:
Serial.print("Let's learn ");
Serial.println("Arduino");
break;
case 2:
Serial.println("Arduino");
break;
default:
Serial.println("via ArduinoGetStarted.com");
break;
}
}
}
void loop() {
}
The result on Serial Monitor:
Hello!
Let's learn Arduino
Arduino
via ArduinoGetStarted.com
In the above code, you can see the case 1 and 2 have the same a line of code (Serial.println("Arduino")). Let's compare with the below code:
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
switch (i) {
case 0:
Serial.println("Hello!");
break;
case 1:
Serial.print("Let's learn ");
case 2:
Serial.println("Arduino");
break;
default:
Serial.println("via ArduinoGetStarted.com");
break;
}
}
}
void loop() {
}
The result on Serial Monitor:
Hello!
Let's learn Arduino
Arduino
via ArduinoGetStarted.com
As you can see, the results of both example codes are the same. However, the second example code are shorter. That is another benefit of not using the break;
※ ARDUINO BUY RECOMMENDATION
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.