Switch y Case
Clase 13 de 29 • Curso de Dart
Contenido del curso
Clase 13 de 29 • Curso de Dart
Contenido del curso
Usuario anónimo
Facundo Nicolás García Martoni
Juan Manuel Cortes
Arnold Stuwar Pedraza Marin
David Galicia
Carlos Nassif Trejo Garcia
Carlos Nassif Trejo Garcia
Wilson Fabian Pérez Sucuzhañay
Facundo Nicolás García Martoni
Usuario anónimo
Adrian Campos
Victor Riveros
Elias Ojeda Medina
Martin Gabriel Bruno
Fabian Bardecio
Daniel Mauricio Sanchez Acebedo
Valeria Calcina Cisneros
Luis Jose Altamirano
Fredy Red Ramos Pomari
Juan Castro
Edgar Tasayco
Cristian David Franco Garcia
Juan Carlos Meza Gómez Daza
Facundo Nicolás García Martoni
hector alejandro viscue parra
Usuario anónimo
Arturo Guardo Rincón
Erik Elyager
Edgar Balderrama
Massimo Di Berardino
Emmanuel Rodríguez
Pablo Moreno Quintero
CARLOS ALBERTO CASTRO ESTRADA
Christian David Sánchez
Valeria Calcina Cisneros
Maximiliano Zavala
Juan Castro
Juan Castro
Juan José del Aguila López
Sebastián Pineda Duque
Fernanda Aragon
Emmanuel Guerra Sánchez
Valeria Calcina Cisneros
🐱💻 Switch Case se utiliza para agilizar la toma de decisiones múltiples. Si tienes varios If-Else anidados deberías considerar utilizar esta estructura de control.
++RESUMEN DE LA CLASE++
Switch y Case: Es una manera de evaluar condiciones muy similar a if-else en cascada.
Reglas
-Se puede utilizar int, String y Enum como tipo para evaluar la condición. -La claúsula case debe terminar con break, continue, throw o return. -Si ningun case coincide con el valor evaluado, se utiliza la claúsula default.
Sintaxis
switch(opción){ case expresion1: print("caso 1"); break; case expresion2: print("caso 2"); break; default: print("por defecto"); }
Información adicional
Con la claúsula continue se puede mandar al programa a una etiqueta definida. Por ejemplo:
//...// case 1: continue EtiquetaUno; //...// Etiqueta Uno: print("hola");
joder, que buen resumen
sabes por que este curso esta oculto ?
Se ve interesante el uso de la palabra continue es parecida a GOTO que te permitia ir a donde esta una etiqueta solo que en este caso se limita al parecer a funcionar dentro de un ciclo o estructura condicional.
También seria bueno mencionar que no solo te permite ir lineas abajo sino que puedes ir lineas arriba
var opcion = 2; switch (opcion) { irAOpcion1: //Si opcion=2 el codigo retorna aqui arriba case 1: print('Opcion 1'); break; case 2: print('Opcion 2'); continue irAOpcion1; //Regresando al bloque de la opcion 1 break; case 3: print('Opcion 3'); break; }
Algo interesante es que también puede crear un bucle, si pones la etiqueta justo arriba del caso 2. Y por lo que vi no es taaanto como un GOTO, ya que si por decir cambias dentro del caso 2 la opcion a 3,, si la cambia pero no la ejecuta- es como si dentro de continue hace lo del label y despues se regresa al break terminando con el switch.
void main(List<String> args) { switches(); } void ifes() { var edad = 22; if (edad >= 18) { print('Adulto'); } else { print('Menor'); } var acceso = edad >= 18 ? "Correcto" : "Incorrecto"; print("El usuario tiene acceso: $acceso"); var nombre; nombre = 'Carlos'; print(nombre ?? 'Invitado'); } void switches() { var opcion = 2; switch (opcion) { irAOpcion1: case 1: print('Opcion 1'); break; case 2: print('Opcion 2'); opcion = 3; continue irAOpcion1; break; case 3: print('Opcion 3'); break; } print(opcion); }```
No se como borrar mi comentario, pero aqui esta mas entendible el codigo haha
void main(List<String> args) { var opcion = 2; switch (opcion) { irAOpcion1: case 1: print('Opcion 1'); break; case 2: print('Opcion 2'); opcion = 3; continue irAOpcion1; break; case 3: print('Opcion 3'); break; } print(opcion); } }```
Esto del continue me recordo al antiguo GO TO o solo me lo parece a mi
Exacto, es igual :D
¡Muy similar!
Interesante el uso de etiquetas, se pueden hacer los saltos que desees creo que otro lenguaje no posee algo parecido, aqui un ejemplo de 4 etiquetas para formar mi nombre.
void main(){ String nombre_completo = ""; var opcion = 2; switch(opcion){ primerApellido: case 1: nombre_completo += " Campos"; continue segundoApellido; break; case 2: nombre_completo += "Jose"; continue segundoNombre; break; segundoApellido: case 3: nombre_completo += " Madrid"; break; segundoNombre: case 4: nombre_completo += " Adrian"; continue primerApellido; break; } print(nombre_completo); }
muy interesante la funcionalidad del continue... pasar de php a dart al parecer no es tan complicado
Es muy similar a la mayoría de los lenguajes orientados a objetos
Bastante malo el ejempo. La etiqueta no se debe usar, eso por un lado. Y ademas poner la etiqueta abajo de la linea que la llama es lo mismo que no poner ninguna de esas 2 lineas.. Ni hablar que el ejemplo el que esta aprendiendo no sabe si entro por 1 o 2 ya que son iguales los textos.
Venía a comentar eso mismo, muy mal ejemplo de como usar switch
Regular esta explicación, sobretodo por el ultimo ejemplo.
Hola! Yo le entendí, tratare de explicarte un poquito; cuando puso continue se refería que si la opción del usuario (en el ejemplo fue 2) entraba o era la misma en el caso (case 2:) se continuaría al caso 3, porque fue elegido por el usuario. Sino no me deje entender bien, dímelo y tratare de explicarte de otra forma. Saludos!
En que casos es recomendado usar switch y cases ? , no hace esto nuestro codigo realmente largo ?
Me parece que se debe usar switch/case cuando se tienen muchas clausulas y así evitar if else anidados. Hace que el código sea más fácil de leer
En algunos casos los condicionales switch te pueden ayudar bastante para que tu código sea más legible. Te recomiendo este artículo: https://dev.to/hellomeghna/tips-to-write-better-conditionals-in-javascript-2189. :wink:
main() { var opcion=2; switch (opcion){ case 1: print ('Retornar valor $opcion'); break; case 2: print ('Retornar valor $opcion'); continue continuaaqui; continuaaqui : case 3: print ('Retorna el valor anidado $opcion'); break; default: print('Retornar valor :8'); } }```
Dart Programming - continue Statement
https://www.tutorialspoint.com/dart_programming/dart_programming_continue_statement.htm
Muchas gracias por la URL
¿Como podría utilizarse la cláusula throw?
(throw) se utiliza para indicar que se ha producido un error mientras se ejecutaba el programa, por ejemplo llega un nuevo dato que no estaba contemplado, esto no es buena practica, pero cuando el programa o los requerimientos son estricto.
Gracias por aclararnos el uso de throw.
“La claúsula case debe terminar con break, continue, throw o return.”
¿Qué función tiene y como funciona throw y return?.
Te lo explico:
Perdón, tal vez es algo básico pero no me queda claro... Como se logra ejecutar el código que está dentro del case 3 después del continue, si es un case "3" y nuestra opción es "2"?
¡Hola Edgar! acá lo que el profesor muestra es como con la sentencia continue puedes luego de entrar a un case ir a otra parte del código y que sea ejecutado, en este caso es el case 3 pero podría ser cualquier otro fragmento de código
Porque switch evalúa una condición múltiple una vez, y en el contexto de saltar a rompe la forma de trabajar el switch y, siendo prácticos case es una etiqueta sin acción alguna, ejecutando el código siguiente, que sería el print.
switch( opcion ) { ... case 2 : print('Retornamos valor $opcion'); continue continuaAqui; continuaAqui: case 3 : print('Retornamos valor 3 pedido por usuario '); break; ... }
Por ejemplo, te dejo el siguiente código para que realices tus propias conclusiones:
var opcion = 1; switch (opcion) { case 1: print('Retornamos valor 1'); continue siguiente_2; siguiente_2: case 2 : print('Retornamos valor 2'); continue siguiente_3; siguiente_3: case 3 : print('Retornamos valor 3'); continue siguiente_4; siguiente_4: case 4 : print('Retornamos valor 4'); break; default: print('Retornamos valor $opcion'); }
Nota. En algunos lenguajes, dejas tus case sin brake, sería un comportamiento similar.
Hola! yo utilizo VSCode como mi visualizador de código pero a estas alturas del curso no he podido correr ningún código de Dart en el, en internet no he podido encontrar nada al respecto. ¿Alguien sabe como puedo correrlo?
Hola Pablo,
Necesitas tener unas extensiones así como el SDK de Dart. Las extensiones que necesitas son Code Runner y Dart.
El sdk lo encuentras en internet. Una vez tengas el sdk tiene que agregarlo al PATH o variables de entorno del sistema, eligiendo la carpeta ~/bin
Eso es lo que yo hice y he ejecutado todos los códigos de Dart en VS Code.
Cualquier duda aquí andamos.
La instrucción switch evalúa una expresión, hace coincidir el valor de la expresión con una cláusula case y ejecuta las declaraciones asociadas con ese caso.
La siguiente es la sintaxis.
switch(variable_expression) { case constant_expr1: { // statements; } break;
case constant_expr2: { //statements; } break;
default: {
//statements;
}
break;
}
Exactamente!
Buenas, con el IF se pueden utilizar distintos operadores de comparación, con SWITCH esto es posible?
Sí. La diferencia es que utilizando switch es un poco más cómodo (relativamente) comparar entre más de dos posibles resultados de una misma comparación.
Por ejemplo (código en JS, pero el concepto también funciona en Dart):
// En este caso considero mejor un IF que un SWITCH: if (x <= 5) { console.log("x es < o = que 5"); } else { console.log("x NO es < o = que 5"); } switch(x <= 5) { case true: console.log("x es < o = que 5"); break; case false: console.log("x NO es < o = que 5") break; } // En este caso la comparación no solo es // entre falso o verdadero, así que el SWITCH // funciona muy bien: switch(nombre) { case "Juan": console.log("Yo soy Juan"); break; case "Batman": console.log("BATMAN SOY TU FAN!!!!"); break; case "Freddy": console.log("FREDDY SOY TU FAN!!!!"); break; case "Maxi": console.log("¡Maxi! ¿Cómo va todo?"); break; default: console.log("¿Te conozco?"); } if (nombre == "Juan") { console.log("Yo soy Juan"); } else if (nombre == "Batman") { console.log("BATMAN SOY TU FAN!!!!"); } else if (nombre == "Freddy") { console.log("FREDDY SOY TU FAN!!!!"); } else if (nombre == "Maxi") { console.log("¡Maxi! ¿Cómo va todo?"); } else { console.log("¿Te conozco?"); }
Esta lectura también te puede ayudar: https://techdifferences.com/difference-between-if-else-and-switch.html. :wink:
void main() { var opcion = 11; switch (opcion) { case 1: print('Retornamos la opción $opcion'); break; case 2: print('Retornamos la opción $opcion'); break; default: print('Retornamos la opción $opcion'); } }
¿Cómo se pueden recibir datos por teclado? Veo que no lo han explicado.
Hola Sebastian, con stdin de Dart puedes hacer esto.
import 'dart:io'; main() { var line = stdin.readLineSync(encoding: Encoding.UTF_8); print(line); }
Yo tuve que agregar dart:convert para poder usar el encoding
import 'dart:convert' show utf8; var opcion = int.parse(stdin.readLineSync(encoding: utf8));
Excelente explicacion! Me di cuenta que Switch es muy parecido a When o tambien a las condiciones If-else. Hasta ahora la mejor clase!